GPIO中断
Posted: Fri Jun 21, 2019 10:41 am
<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>
代码如下:<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>