我正试图使用GPIO中断来检测某些交换机上的上升和下降沿,但是当我使用GPIO\u EnableIRQ启用它们时,一些中断就会触发。例如,在一个引脚上有一个上升沿中断,它的初始值很低。在同一个引脚上还有一个下降沿中断,不会立即触发。类似地,下降沿中断在一个最初很高的引脚上触发。
有没有办法抑制这种即时中断,让我的边缘触发的中断只在边缘触发?
你好,埃里克,
我不确定我是否理解这个问题,我没有看到任何触发中断,只要我调用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的其他参数,例如去抖动或释放等待,也许驱动中断的线路有触发中断的尖峰。
谢谢你的对话
谢谢,我好像误解了API。我的印象是,中断可以配置为边缘检测,如果不是这样的话,那么我所经历的错误是有意义的。
你好,埃里克,
我不确定我是否理解这个问题,我没有看到任何触发中断,只要我调用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的其他参数,例如去抖动或释放等待,也许驱动中断的线路有触发中断的尖峰。
谢谢你的对话
谢谢,我好像误解了API。我的印象是,中断可以配置为边缘检测,如果不是这样的话,那么我所经历的错误是有意义的。