GPIO在上升和下降边缘中断

5个帖子/ 0新
最后一篇
alsem145.
离线
最后一次露面:5年10个​​月前
加入:2015-03-19 00:49
GPIO在上升和下降边缘中断

你好,

这是我正在使用的代码来处理中断

gpio_configurepin(sw_cursor_port,sw_cursor_pin,input_pullup,pid_gpio,true);

gpio_registercallback(gpio0_irqn,handle_event);
gpio_enableirq(sw_cursor_port,sw_cursor_pin,gpio0_irqn,true,false,3);

空白
handle_event(void)
{
printf_string(“中断处理程序\ n \ r”);
nvic_clearpendingirq(gpio0_irqn);
}

如果引脚连接到地,我的中断处理程序会被调用一次,但是一旦与地面断开连接,就不会被调用。所以它仅在下降沿呼吁 - 如何确保它在上升和下降边缘呼吁。

谢谢,

sale

ps:gpio_ *是在外设设置示例中包含的gpio.c中定义的函数。

SUMMER20100514.
离线
最后一次露面:4年4个月前
格鲁鲁
加入:2014-12-30 05:01
据我所知,你可以使用

据我所知,您可以使用以下功能配置外部中断引脚。
void wkupct_enable_irq(uint32_t sel_pins,uint32_t pol_pins,uint16_t events_num,uint16_t deb_time)
但您应该首先将高到低模式,并在此之后,手动将低电平设置为高模式。至少它有效。祝你好运。

Kobyfr_mag.
离线
最后一次露面:5年1个月前
加入:2015-06-02 12:48
您已将PIN配置为

您已将PIN配置为响应上升沿。

尝试:在ISR回调中,切换到另一个边缘(下降,上升):

if(gpio_setirqinputlevel(gpio0_irqn)== gpio_irq_input_level_high)
gpio_setirqinputlevel(gpio0_irqn,gpio_irq_input_level_low);
别的
gpio_setirqinputlevel(gpio0_irqn,gpio_irq_input_level_high);

可能工作......自己遇到了麻烦。

Channaankit25
离线
最后一次露面:5年3个月前
加入:2015-09-04 08:11
你好,

你好,

我们可以在引脚2.9上配置中断吗?
我使用以下代码来配置中断。但它不起作用。请验证并让我知道端口2.9引脚的正确配置。

gpio_configurepin(switch3_port,switch3_pin,input_pullup,pid_gpio,false);
//配置PIN和启用交换机中断
gpio_setpinfunction(switch3_port,switch3_pin,input_pullup,pid_gpio);
gpio_enableirq(switch3_port,switch3_pin,gpio0_irqn,true,true,3);
// gpio_setirqinputlevel(gpio0_irqn,gpio_irq_input_level_low);
gpio_registercallback(gpio0_irqn,gpio_intr_callback);
//回调函数
void gpio_intr_callback(void)
{
gpio_resetirq(gpio0_irqn);
printf(“\ r \ nkey press检测到\ r \ n”);
}

请尽快回复。谢谢你。

mt_dialog.
离线
最后一次露面:2个月1周前
职员
加入:2015-06-08 11:34
嗨Channaankiy25,

嗨Channaankiy25,

您可以检查文档UM-B-051,了解有关如何使用DA的外围驱动程序的信息。是您的芯片A QFN40或QFN48,因为端口2仅适用于这些软件包。从快速看,我猜,在RegiseCallback中,您要启用的IRQ是GPIO2_IRQN,因为您希望来自端口2的PIN。

谢谢mt_dialog.