• Система автоматизации с открытым исходным кодом на базе 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. Мультиметр показывает скачок напряжения на линии, а прерывания нет.
 
Сверху Снизу