我们小组正在使用自定义驱动程序在共享I2C总线上连接四个MAX3107 UART.四个MAX3107的中断通过ARM9处理器(LPC3180模块)上的GPIO引脚连接(即通过逻辑或"动作共享中断").当这些器件中的一个或多个中断时,它们将配置为电平敏感中断的GPIO线拉低.我的问题是否需要禁用处理程序代码中的特定中断行.(我应该补充一点,我们正在运行Linux 2.6.10).
基于我阅读关于中断的几个特定于ARM的应用笔记,似乎当ARM处理器收到中断时,它会自动禁用(屏蔽?)相应的中断线(在我们的例子中,这似乎是对应于我们选择的GPIO引脚).如果这是真的,那么似乎我们不应该在我们的中断处理程序代码中禁用此GPIO引脚的中断,因为这样做似乎是多余的(尽管它似乎工作正常).换句话说,在我看来,如果ARM处理器在发生中断时自动禁用GPIO中断,那么如果有的话,我们的中断处理程序代码应该只需要在设备服务后重新启用中断.
我们使用的中断处理程序代码包括disable_irq_nosync(irqno);在处理程序的最开头和处理程序enable_irq()末尾的相应代码.如果ARM处理器已经禁用了中断线(在硬件中),这些调用会产生什么影响(即调用disable_irq_nosync()后跟一个调用enable(irq())?