ESP32 - GPIO中断触发与事件回调
程序员文章站
2022-04-10 23:51:25
最近为项目增加了GPIO外部触发中断功能,原理是为GPIO32注册了上升沿触发事件,事件触发后,会向RTOS队列写入数据。在RTOS事件中检测到该队列中有新加入的事件,就读出,并执行相应代码。 ......
最近为项目增加了gpio外部触发中断功能,原理是为gpio32注册了上升沿触发事件,事件触发后,会向rtos队列写入数据。在rtos事件中检测到该队列中有新加入的事件,就读出,并执行相应代码。
#define gpio_input_io_wakeup 32 #define gpio_input_pin_sel (1ull<<gpio_input_io_wakeup) #define esp_intr_flag_default 0 static void iram_attr gpio_isr_handler(void* arg) { uint32_t gpio_num = (uint32_t) arg; xqueuesendfromisr(gpio_evt_queue, &gpio_num, null); } static void gpio_task_example(void* arg) { uint32_t io_num; for(;;) { if(xqueuereceive(gpio_evt_queue, &io_num, portmax_delay))
{ printf("gpio[%d] intr, val: %d\n", io_num, gpio_get_level(io_num)); } } } void app_main() { gpio_config_t io_conf; io_conf.intr_type = gpio_pin_intr_posedge;//interrupt of rising edge io_conf.pin_bit_mask = gpio_input_pin_sel;//bit mask of the pins, use gpio32 here io_conf.mode = gpio_mode_input;//set as input mode io_conf.pull_up_en = 0;//enable pull-up mode gpio_config(&io_conf); //install gpio isr service gpio_install_isr_service(esp_intr_flag_default); //hook isr handler for specific gpio pin gpio_isr_handler_add(gpio_input_io_wakeup, gpio_isr_handler, (void*) gpio_input_io_wakeup); xtaskcreate(gpio_task_example, "gpio_task_example", 2048, null, 10, null); while(1) { } }
上一篇: 《战时灯火》的故事背景是什么?《战时灯火》讲了什么?
下一篇: 月子蔬菜攻略,让您月子坐的最健康