Page 1 of 1

GPIO中断

Posted: Fri Jun 21, 2019 10:41 am
by lixing3204
<t>请问我再中断中关闭中断使能,再应用中开启中断使能。但是开始会响应。才是多按几次按钮中断就不响应呢怎么办呢?中断代码和线程<br/>
代码如下:<br/>
static void IRAM_ATTR gpio_isr_handle(void* arg)<br/>
{<br/>
uint32_t gpio_num = (uint32_t)arg;<br/>
xQueueSendFromISR(gpio_pen_queue,&gpio_num,NULL);<br/>
GPIO.pin[GPIO_PEN_SDA_IO].int_ena = 0; ///关闭中断<br/>
}<br/>
static void gpio_task_example(void* arg)<br/>
{<br/>
uint32_t io_num;<br/>
for(;;) {<br/>
if(xQueueReceive(gpio_pen_queue, &io_num, portMAX_DELAY)) {<br/>
printf("GPIO[%d] intr, val: %d\n", io_num, gpio_get_level(io_num));<br/>
// GPIO.status_w1tc=1<<GPIO_PEN_SDA_IO;<br/>
// GPIO.pin[GPIO_PEN_SDA_IO].int_type = GPIO_INTR_NEGEDGE; <br/>
// GPIO.pin[GPIO_PEN_SDA_IO].int_ena = 1; ///开启中断<br/>
gpio_set_intr_type(GPIO_PEN_SDA_IO, GPIO_INTR_NEGEDGE);<br/>
gpio_intr_enable(GPIO_PEN_SDA_IO);<br/>
}<br/>
}<br/>
}</t>

Re: GPIO中断

Posted: Thu Aug 08, 2019 3:58 am
by ESP_houwenxiang
可能与最近修复的一个 GPIO 问题有关, 可以尝试最新的 master 分支. 或者用下面的两种方案:

1. 使用单核
2. 处理 GPIO 的任务在创建的时候指定在调用 gpio_install_isr_service 的核上

thanks !!