一、配置外部中断的步骤
1、选择管脚 PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U,FUNC_GPIO2);//pin脚选择
2、设置对应管脚为输入模式 GPIO_DIS_OUTPUT(GPIO_ID_PIN(2)) ; // 设置成输入
3、设置对应中断的触发方式 触发方式有5种 gpio_pin_intr_state_set(GPIO_ID_PIN(2),GPIO_PIN_INTR_NEGEDGE);//s设置中断触发方式
typedef enum {
GPIO_PIN_INTR_DISABLE = 0,//不使用中断
GPIO_PIN_INTR_POSEDGE = 1,//上升沿
GPIO_PIN_INTR_NEGEDGE = 2,//下降沿
GPIO_PIN_INTR_ANYEDGE = 3,//双边沿
GPIO_PIN_INTR_LOLEVEL = 4,//低电平
GPIO_PIN_INTR_HILEVEL = 5//高电平
} GPIO_INT_TYPE;
4、设置中断的回调函数 ETS_GPIO_INTR_ATTACH(ext_interrupt_callback,NULL);//设置中断回调函数
5、开启中断 ETS_GPIO_INTR_ENABLE();//开启gpio中断
6、回调函数的编写
LOCAL void ext_interrupt_callback(void *arg)
{
uint16 gpio_status = 0;
gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS);//判断io口状态
ETS_GPIO_INTR_DISABLE();//关闭中断
if(GPIO_INPUT_GET(2) == 0)
{
os_printf("触发中断\r\n");
}
os_delay_us(10000);
GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status);//清中断标志
ETS_GPIO_INTR_ENABLE();//打开中断
}
中断中主要是要 清除相应中断的标志
按照如上步骤就可以实现外部中断,如果写的不对请看官指出,谢谢
可以参考 官方的接口参考里面的
8B-ESP8266__Interface__GPIO_Registers__Release_15-11-2014.xls
8A-ESP8266__Interface_GPIO__CN_v0.4.pdf