Chat freely about anything...

User avatar
By kript0n
#46101 I'm stucked with external interrupt on GPIO14. Voltmeter registers high and low signal on line but interrupt isn't called.

Here is code:
Code: Select all#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)
{
   WIFI_GPIO_DISABLE();

   /* Clear interrupt state */
   uint32 gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS);
   GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status);
}

void ICACHE_FLASH_ATTR user_init()
{
    gpio_init();

    PIN_FUNC_SELECT(NETWORK_INFO_GPIO, NETWORK_INFO_GPIO_FUNC);
    NETWORK_INFO_GPIO_DISABLE();

    PIN_FUNC_SELECT(WIFI_GPIO, WIFI_GPIO_FUNC);
    WIFI_GPIO_ENABLE();

    PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12);
    gpio_output_set(0, BIT12, BIT12, 0);

    gpio_interrupt_init();
}