如何知道哪个引脚触发了 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对应的寄存器描述。
我正在处理 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对应的寄存器描述。