ARM9内核2.6.10 GPIO引脚中断返回IRQ_HANDLED

时间:2012-11-27 20:29:33

标签: linux arm masking gpio

我正在努力更好地理解基于GPIO引脚的中断处理程序(上半部分)中使用的“返回IRQ_HANDLED”语句与GPIO引脚硬件之间的交互。特别是,考虑一种假设情况,其中器件将GPIO引脚拉低以指示需要注意。这会导致调用关联的(上半部分)中断处理程序。现在假设上半部分处理程序将某些工作排队,然后以“返回IRQ_HANDLED”返回,但由于某种原因,中断尚未在生成它的设备上清除(即设备将GPIO引脚保持在低状态) )。调用“return IRQ_HANDLED”会导致中断重新生成吗?我在下面的文章中提到这个问题:

http://www.makelinux.net/books/lkd2/ch06lev1sec4

“可重入和中断处理程序 Linux中的中断处理程序不需要是可重入的。当给定的中断处理程序正在执行时,相应的中断线将在所有处理器上被屏蔽掉,从而防止接收到同一线路上的另一个中断。通常所有其他中断都被使能,因此其他中断被服务,但是当前线路始终被禁用。因此,永远不会同时调用相同的中断处理程序来为嵌套中断提供服务。这极大地简化了编写中断处理程序的过程。“

以上注释表明在调用中断处理程序时,该中断的中断线被屏蔽。我试图找出“返回IRQ_HANDLED”的调用是否取消屏蔽中断线。并且,就上述假设情况而言,如果我“返回IRQ_HANDLED”会发生什么情况,但设备尚未真正清除其中断,因此仍将GPIO引脚保持在低(触发)状态。更具体地说,这将导致再次产生中断,使得处理器在中断首次发生时永远不会有机会排队工作。即,这将导致中断风暴,其中处理器可以无限地中断,因此不允许发生任何有用的处理。我应该补充一点,我在运行内核2.6.10的单CPU linux ARM9系统(Phytec LPC3180)的上下文中提出这个问题。

提前致谢,

吉姆

PS:我不清楚启用/禁用中断(特别是与特定GPIO引脚相关的中断)与屏蔽/取消屏蔽相同GPIO中断之间的区别。

0 个答案:

没有答案