• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Внешние прерывания

kript0n

New member
Собственно, не получается заставить работать на GPIO14.

Код:
#define NETWORK_INFO_GPIO            PERIPHS_IO_MUX_MTMS_U
#define NETWORK_INFO_GPIO_FUNC        FUNC_GPIO14
#define NETWORK_INFO_GPIO_ID        GPIO_ID_PIN(14)
#define NETWORK_INFO_GPIO_BIT        BIT14
#define NETWORK_INFO_GPIO_ENABLE()  gpio_output_set(NETWORK_INFO_GPIO_BIT, 0, NETWORK_INFO_GPIO_BIT, 0)
#define NETWORK_INFO_GPIO_DISABLE()    gpio_output_set(0, NETWORK_INFO_GPIO_BIT, NETWORK_INFO_GPIO_BIT, 0)

void ICACHE_FLASH_ATTR gpio_interrupt_init(void)
{
    ETS_GPIO_INTR_DISABLE();
    //gpio_intr_handler_register((gpio_intr_handler_fn_t)gpio_intr, NULL);
    ETS_GPIO_INTR_ATTACH((gpio_intr_handler_fn_t)gpio_intr, NULL);
    GPIO_DIS_OUTPUT(14);
    GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, NETWORK_INFO_GPIO_BIT);
    gpio_pin_intr_state_set(NETWORK_INFO_GPIO_ID, GPIO_PIN_INTR_ANYEDGE);
    ETS_GPIO_INTR_ENABLE();
}


LOCAL void gpio_intr(uint32 intr_mask, void *arg)
{
    char str[15];
    os_sprintf(str, "0x%08x\r\n", intr_mask);
    LOGGER_log(LOG_VERBOSE, str);

    WIFI_GPIO_DISABLE();

    /* Clear interrupt state */
    uint32 gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS);
    GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status);
}
gpio_interrupt_init(void) вызываю в user_init. Мультиметр показывает скачок напряжения на линии, а прерывания нет.
 
Сверху Снизу