Arduino上单个中断的多个触发器

时间:2014-11-12 19:59:19

标签: c++ arduino interrupt isr

我正在研究Arduinos,我想使用中断来使用旋转编码器。但我想将中断代码降至最低。

我可以在一个中断上使用多个触发器吗?

我想重新编写我的实际代码:

attachInterrupt(0, ChangeA, CHANGE);

类似

attachInterrupt(0, FailingA, FAILING);
attachInterrupt(0, RisingA, RISING);

有可能吗?

1 个答案:

答案 0 :(得分:1)

不,不完全可能。外部中断配置为仅对内部的一种可能性做出反应。

您可以做的一件事是使用CHANGE中断服务程序,并在ISR开头测试引脚的值,以执行FallingA()RisingA()

这里存在潜在的问题。在测试之前,引脚可能已经再次更改,因此触发中断的中断可能已经下降,比如说,测试确定它正在上升。防止两个快速中断的一种方法是检查标志是否仍然设置。如果在中断开始时它应该被清除,如果它被设置,则再次发生变化。没有切实可行的方法来防止三次快速变化。

如果你真的想使用两个独立的ISR,你还有额外的引脚吗?如果是这样,您可以将引脚连接在一起并在一个上运行FALLING ISR,在另一个上运行RISING ISR。