gpt4 book ai didi

linux-kernel - 我的中断处理程序应该禁用中断还是 ARM 处理器自动执行此操作?

转载 作者:行者123 更新时间:2023-12-04 04:34:50 25 4
gpt4 key购买 nike

我们的团队正在使用自定义驱动程序在共享 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() )

最佳答案

来自 Arm 信息中心文档:

On entry to an exception (interrupt):

  • interrupt requests (IRQs) are disabled for all exceptions

  • fast interrupt requests (FIQs) are disabled for FIQ and Reset exceptions.

接着说:

Handling an FIQ causes IRQs and subsequent FIQs to be disabled, preventing them from being handled until after the FIQ handler enables them. This is usually done by restoring the CPSR from the SPSR at the end of the handler.

因此您不必担心禁用它们,但您必须担心重新启用它们。

您需要在例程末尾包含enable_irq(),但不需要在开始时禁用任何内容。我不认为在硬件中调用disable_irq_nosync(irqno)后在软件中调用它不会产生任何影响。由于硬件调用肯定是在软件调用有机会接管之前调用的。但最好将其从代码中删除以遵循约定,并且不要让下一个查看它的程序员感到困惑。

更多信息在这里:

Arm Information Center

关于linux-kernel - 我的中断处理程序应该禁用中断还是 ARM 处理器自动执行此操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14295403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com