⚠️
你好。。谢谢你来参加论坛。令人兴奋的消息!我们现在正在移动到我们的新论坛平台,将提供更好的功能,并包含在主对话网站的过程。所有帖子和账号都已迁移。我们现在只接受新论坛上的流量-请在//www.wsdof.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
3个职位/0个新职位
最后一篇文章
埃里克·斯卡梅尔
离线
最后一次见到:2年10个月前
已加入:2017-03-15 13:28
GPIO边缘中断

我正试图使用GPIO中断来检测某些交换机上的上升和下降沿,但是当我使用GPIO\u EnableIRQ启用它们时,一些中断就会触发。
例如,在一个引脚上有一个上升沿中断,它的初始值很低。在同一个引脚上还有一个下降沿中断,不会立即触发。
类似地,下降沿中断在一个最初很高的引脚上触发。

有没有办法抑制这种即时中断,让我的边缘触发的中断只在边缘触发?

设备:
MT\u对话框
离线
最后一次见到:1个月3周前
工作人员
已加入:2015-06-08 11:34
你好,埃里克,

你好,埃里克,

我不确定我是否理解这个问题,我没有看到任何触发中断,只要我调用GPIO\u EnableIRQ(),除非引脚处于触发中断的状态(如果您设置中断触发在相反的状态,触发在您当前的设置,中断仍然会被触发?),您可以尝试手动重置中断(在启用相应的中断之前GPIO_ResetIRQ()),并检查是否解决了您遇到的问题。关于边缘中断,在580中,GPIO中断是电平触发的,而不是边缘触发的,但是一旦触发,您就可以通过改变中断的极性来检测从高到低或相反的转换,类似下面的代码片段:

void irq0\u中断\u cb(void)
{
if(GPIO\u GetIRQInputLevel(GPIO0\u IRQn)==GPIO\u IRQ\u INPUT\u LEVEL\u LOW)
{
GPIO\ U设置激活(LED\ U端口、LED\ U引脚);
GPIO\u SetIRQInputLevel(GPIO0\u IRQn,GPIO\u IRQ\u INPUT\u LEVEL\u HIGH);
}
其他的
{
GPIO\ U SetInactive(LED\ U端口、LED\ U引脚);
GPIO\u SetIRQInputLevel(GPIO0\u IRQn,GPIO\u IRQ\u INPUT\u LEVEL\u LOW);
}
}

另外,关于您所面临的问题,请查看GPIO启用IRQ的其他参数,例如去抖动或释放等待,也许驱动中断的线路有触发中断的尖峰。

谢谢你的对话

埃里克·斯卡梅尔
离线
最后一次见到:2年10个月前
已加入:2017-03-15 13:28
谢谢,我好像有

谢谢,我好像误解了API。我的印象是,中断可以配置为边缘检测,如果不是这样的话,那么我所经历的错误是有意义的。