Собственно, не получается заставить работать на GPIO14.
gpio_interrupt_init(void) вызываю в user_init. Мультиметр показывает скачок напряжения на линии, а прерывания нет.
Код:
#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);
}