对于共享中断线,如何找到要使用的中断处理程序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对于共享中断线,如何找到要使用的中断处理程序?相关的知识,希望对你有一定的参考价值。

对于共享中断线,我可以有几个中断处理程序。内核将按顺序调用该特定共享行的所有处理程序。据我所知,每个处理程序在被调用时都会通知内核它是否是要调用的正确处理程序。

我的问题是如何确定,有没有办法检查一个内存映射寄存器,告诉特定设备的状态或是否有其他硬件机制?处理程序如何知道相应的设备确实是发出中断的设备?

这些信息是通过设备和处理器中断线之间的中断控制器进行中继的吗?

答案

内核将按顺序调用该特定共享行的所有处理程序。

究竟。说Dev1和Dev2共享IRQ10。当为IRQ10生成中断时,将逐个调用在该行注册的所有ISR。

在我们的场景中,假设Dev2是产生中断的那个。如果首先注册Dev1的ISR,则首先调用它的ISR(即Dev1的ISR)。在该ISR中,将验证中断状态寄存器的中断。如果没有设置中断位(这种情况,导致Dev2引发中断),那么我们可以确认Dev1没有产生中断 - 所以Dev1的ISR应该返回内核IRQ_NONE - 这意味着:“我没有处理那个中断“,所以在内核上继续下一个ISR(即Dev2的ISR),这反过来,确实会验证它的相应设备是否产生了中断,因此,这个处理程序应该处理它并最终返回IRQ_HANDLED - 这意味着:”我处理了这个”。

有关更多信息,请参阅返回值IRQ_NONE/IRQ_HANDLED

处理程序如何知道相应的设备是否发出了中断?

通过仅读取中断状态寄存器。

这些信息是通过设备和处理器中断线之间的中断控制器进行中继的吗?

我不确定这个。但操作系统将负责根据ISR的返回值调用ISR。

以上是关于对于共享中断线,如何找到要使用的中断处理程序?的主要内容,如果未能解决你的问题,请参考以下文章

四 . 树莓派A20 GPIO中断程序编写(1基本处理)

linux 安装一个中断处理

ARM中的异常中断是如何实现进入中断程序的,比如如何进入...

Linux(内核剖析):22---中断之中断控制接口(禁止/激活/屏蔽中断)

STM32共用中断线的外部中断引脚的判断

GIC驱动程序对中断的处理流程