我们小组正在使用自定义驱动程序来连接共享 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 处理器已经禁用了中断线(在硬件中),这些调用的效果是什么(即调用 todisable_irq_nosync()
之后调用enable(irq())
?