Разбираюсь с прерываниями в esp8266. Софт visual studio +platformio + rtos-sdk
Создано два типа кода.
1.
2.
Параллельно работает задача миганием светодиода но другой ножке.
При 1м типа кода в обработчик программа попадает не только при нажатии кнопки, которая вывод BUTTON садит на землю, но и при низком уровне на ножке питания светодиода. Почему? При 2м кода типе этого не происходит, здесь в прерывание попадает программа только по нажатию кнопки.
И здесь
в 1м коде
конфигурация вывода произведена по уровню сработки. Но её видимо не происходит,
пока не вставил код
.
Разве этот способ конфигурации не равен
?
Создано два типа кода.
1.
Код:
ConfigBtn.GPIO_IntrType = GPIO_PIN_INTR_NEGEDGE;
ConfigBtn.GPIO_Mode = GPIO_Mode_Input;
ConfigBtn.GPIO_Pin = BUTTON;
ConfigBtn.GPIO_Pullup = GPIO_PullUp_EN;
gpio_config(&ConfigBtn);
GPIO_OUTPUT_SET(BUTTON,1);
gpio_intr_handler_register(io_intr_handler, NULL); // регистрация прерывания
gpio_pin_intr_state_set(GPIO_ID_PIN(BUTTON),GPIO_PIN_INTR_NEGEDGE); // почему выше прописан уровень прерывания, но без этой строки они не происходят?
_xt_isr_unmask(1 << ETS_GPIO_INUM); // Разрешение прерываний GPIO
Код:
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U,FUNC_GPIO4);
GPIO_AS_INPUT(GPIO_ID_PIN(BUTTON));
GPIO_OUTPUT_SET(BUTTON,1);
_xt_isr_mask(1 << ETS_GPIO_INUM); // запрет прерываний GPIO
gpio_intr_handler_register(io_intr_handler, NULL); // регистрация прерывания
gpio_pin_intr_state_set(GPIO_ID_PIN(BUTTON),GPIO_PIN_INTR_NEGEDGE);
_xt_isr_unmask(1 << ETS_GPIO_INUM); // Разрешение прерываний GPIO
При 1м типа кода в обработчик программа попадает не только при нажатии кнопки, которая вывод BUTTON садит на землю, но и при низком уровне на ножке питания светодиода. Почему? При 2м кода типе этого не происходит, здесь в прерывание попадает программа только по нажатию кнопки.
И здесь
Код:
gpio_config(&ConfigBtn);
конфигурация вывода произведена по уровню сработки. Но её видимо не происходит,
пока не вставил код
Код:
gpio_pin_intr_state_set(GPIO_ID_PIN(BUTTON),GPIO_PIN_INTR_NEGEDGE);
Разве этот способ конфигурации не равен
Код:
ConfigBtn.GPIO_IntrType = GPIO_PIN_INTR_NEGEDGE;