我一直在处理ARM:上的Linux中断
- CCD_ 1可用于注册中断
在一条中断线上,您可以用SHA_SHIRQ
注册多个中断,即正常IRQ。
- Linux是否允许在特定的中断线上注册多个SA_interrupt
- 也就是说,我们可以为ARM快速中断或
FIQ
s注册多个中断处理程序吗
与IRQ
一样,FIQ
也有一个来自矢量表的入口点。您必须根据位/数字检查中断控制器和分支,以处理特定的FIQ
。对于FIQ
,这往往会否定存储体寄存器,因为两个例程都必须共享它们。可以让一个FIQ
例程拥有存储体寄存器,其他例程显式保存它们。
当前的Linux FIQ代码支持FIQ处理程序的堆叠,而不支持多个同时的FIQ
源。您的代码可以使用set_fiq_regs()初始化request_irq()
0寄存器。您可以分配一个中断控制器基地址,并将检查interrupt source
和分支的代码分配给适当的处理程序注意:,内核不提供任何与FIQ
的通信机制。您必须编写自己的联锁。我认为FIFO实现应该是FIQ
安全的,以及其他无锁内核模式。
编辑:这是主线代码中FIQ
的示例。它是一个IMX SSI驱动程序。SSI汇编程序,符号接口,主文件。FIQ
也称为软DMA。FIQ
延迟非常小,并且应当允许高服务频率。通常只有一个设备需要这种关注。您可以在处理程序中解复用(分支/函数调用/源编号上的指针)。FIQ
经常用汇编程序编写的原因是,如果使用它,性能是隐含的。此外,FIQ
通常不会被屏蔽,并且它会增加系统其余部分的IRQ
延迟。通过在汇编程序中进行编码使其更快,可减少IRQ
延迟。
另请参阅:FIQ-IRQ差异
所有在同一IRQ上注册的中断处理程序都被放在列表中。当中断触发时,内核会依次调用每个中断处理程序(要么是最后一次先注册,要么是第一次先注册—我记不起是哪一个)。FAST_IRQ在这方面并不特别。
每个中断处理程序的职责是检查其硬件,看看是否需要处理任何事情。如果没有,只需返回以便下一个处理程序可以查看。