如何知道哪个引脚触发了 i.MX6 的中断?

How to know which pin triggered the interrupt with i.MX6?

我正在处理 i.MX6 处理器的中断。

正如@RodBorras 在this thread 中所说:

"这是我对MX6Q GPIO中断工作原理的理解:

a) GPIO1(32 个引脚)到 GPIO7(32 个引脚)可以配置为在引脚设置为输入时产生中断

b) GPIO2 到 GPIO7 没有针对每个引脚的“ARM 中断”,而是针对 16 个引脚的“或”运算结果

==> 例如如果在 0-15

范围内的任何引脚上存在有效中断,GPIO2 将导致“ARM IRQ 100”

==> 例如如果 16-31

内的任何引脚上存在有效中断,GPIO2 将导致“ARM IRQ 101”

==> 因此,即使 GPIO2 可以监控 activity 的 32 个引脚,ARM 内核也只会看到 2 个 IRQ 中的 1 个发生(#100 或 #101)

c) GPIO1 具有与 b) 中所述相同的功能,但还有一些更细粒度:其底部 8 个引脚 (0-7) 将导致 8 个特定的“ARM 中断”

==> GPIO1_0 将导致“ARM IRQ 97”,针脚 1、2、3、4、5、6 依此类推; GPIO1_7 将导致“ARM IRQ 90”

==> 对于 GPIO1_8 到 GPIO1_31,这些只能通过引脚 0-15 的“ARM IRQ98”或引脚 16 的“ARM IRQ99”看到-31"

那么如果我们以同组的两个中断为例(例如GPIO2的0~15之间的两个管脚),如何知道是哪个管脚触发了中断?

感谢您的帮助!

来自 NXP TechSupport 的回答:“中断源可以通过读取 GPIOx_ISR 寄存器获得,见 28.5.7 节 GPIO 中断状态寄存器 (GPIOx_ISR)”

这里是this document对应的寄存器描述。