Привет, пытаюсь разобраться с прерываниями на плате. Считывать значение статуса нажатой кнопки – получается, отлавливать прерывание кнопки на другом GPIO - получается, собрать вместе - нет
Я понимаю, что я могу запустить бесконечный таймер и проверять нажата кнопка или нет, но не хочется "городить". Может кто-то сталкивался?
Например для GPIO13 работающий код для кнопки вот такой:
Где pin_mux и pin_func - массивы с соответствующими значениями.
Для GPIO16 у меня получается вот такой вот кусок кода:
Не срабатывают прерывания Что не так?
Я понимаю, что я могу запустить бесконечный таймер и проверять нажата кнопка или нет, но не хочется "городить". Может кто-то сталкивался?
Например для GPIO13 работающий код для кнопки вот такой:
Код:
//Set up GPIO
PIN_FUNC_SELECT(pin_mux[13], pin_func[13]);
PIN_PULLUP_EN(pin_mux[13]);
GPIO_DIS_OUTPUT(button_gpio);
//Set up Interrupts
ETS_GPIO_INTR_DISABLE();
ETS_GPIO_INTR_ATTACH(button_handler, NULL);
GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, BIT(button_gpio));
gpio_pin_intr_state_set(GPIO_ID_PIN(button_gpio), GPIO_PIN_INTR_ANYEDGE);
ETS_GPIO_INTR_ENABLE();
Где pin_mux и pin_func - массивы с соответствующими значениями.
Для GPIO16 у меня получается вот такой вот кусок кода:
Код:
//Set up GPIO
ETS_GPIO_INTR_DISABLE();
PIN_FUNC_SELECT(pin_mux[16], pin_func[16]);
PIN_PULLUP_EN(pin_mux[16]);
GPIO_DIS_OUTPUT(16);
WRITE_PERI_REG(PAD_XPD_DCDC_CONF,
(READ_PERI_REG(PAD_XPD_DCDC_CONF) & 0xffffffbc) | (uint32)0x1); // mux configuration for XPD_DCDC and rtc_gpio0 connection
WRITE_PERI_REG(RTC_GPIO_CONF,
(READ_PERI_REG(RTC_GPIO_CONF) & (uint32)0xfffffffe) | (uint32)0x0); //mux configuration for out enable
WRITE_PERI_REG(RTC_GPIO_ENABLE,
READ_PERI_REG(RTC_GPIO_ENABLE) & (uint32)0xfffffffe); //out disable
//Set up Interrupts
ETS_GPIO_INTR_ATTACH(button_handler, NULL);
GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, BIT(16));
gpio_pin_intr_state_set(GPIO_ID_PIN(16), GPIO_PIN_INTR_ANYEDGE);
ETS_GPIO_INTR_ENABLE();