fiq& irq handler - arm

时间:2012-12-08 11:56:42

标签: arm

我是手臂和手臂的新手有一些与IRQ& amp; FIQ。请尽量澄清这些 有多少FIQ& IRQ通道臂有?
我们可以为每个渠道编写多少处理程序? 此外,如果我们可以为单个中断通道注册多个处理程序,arm将如何知道要运行哪个处理程序。

4 个答案:

答案 0 :(得分:6)

IRQFIQ之间的区别正好可以追溯到ARM早期的时候,它是由Acorn设计的。总是这样的情况是IRQ线连接到一个中断控制器,该控制器将大量中断源复用在一起。这正是所有现代ARM中发生的事情

FIQ的基本原理是提供具有最高优先级的极低延迟响应(它可以安全地抢占IRQ处理程序)。相对大量的影子寄存器有助于编写处理程序,将处理程序的状态存储在CPU寄存器中而不是访问堆栈。

影子寄存器几乎与APCS常用于函数调用的设置相反,因此在C中编写处理程序将导致最多8个非阴影寄存器的推送和最终弹出。任何类型的中断解复用都会消除FIQ可能给出的任何性能优势。

所有这一切意味着将FIQ用于非常专业的应用程序只有一个好处,其中一个中断设备需要真正的实时中断响应,并且您愿意编写处理程序汇编。您还将了解如何与系统的其余部分同步 - 其中一些将依赖于禁用IRQ来保持数据同步。

答案 1 :(得分:3)

传统上,arm有一个中断线,您可以将其发送给两个处理程序FIQ或IRQ中的一个。 FIQ只有一大堆FIQ模式寄存器,因此您需要存储在堆栈中的数量更少。从那里你可以读取供应商特定的寄存器(如果有的话)以确定中断的来源,然后分支到单独的处理程序。

最近有弯臂设计,有许多中断128,256,每个都有一个单独的处理程序。所以一般地询问手臂并不是那么多,而是像问一些关于x86的通用。

所有这些信息都可以在ARM体系结构参考手册中轻松获得,用于不同的体系结构和核心的引脚(供应商构建其芯片的内容)记录在各种内核的技术参考手册中(也非常简单)获得)。 infocenter.arm.com提供架构和技术参考手册以及amba / axi(供应商连接的数据总线)。你的问题在这些文件中得到了完整的回答。

答案 2 :(得分:1)

ARM处理器直接仅支持一个IRQ和一个FIQ。 ARM通过称为中断控制器的外设支持多个中断。 ARM标准中断控制器称为GIC(通用中断控制器)。

GIC有许多外围设备用于连接中断线和两条连接到IRQ和FIQ的输出线。基本上它充当MUX。 GIC驱动程序将设置中断优先级,类型(IRQ / FIQ),屏蔽等配置。

在传统的ARM系统中,Exception Vectors中的IRQ和FIQ各有一个条目。根据中断触发的行,调用IRQ或FIQ处理程序。中断处理程序查询GIC(具体的GIC CPU接口寄存器)以获取中断号。根据此中断号,调用相应的设备处理程序。

中断数取决于具体的GIC实现。因此,您必须检查系统中断控制器的手册以获取这些细节。

注意:根据您编码的特定ARM内核,中断处理略有不同。

答案 3 :(得分:0)

实际上这个问题有点棘手。您必须在问题中指定您使用ARM的架构。 ARM v7-A和ARM v7-R架构参考手册(ARM ARM)指定了一个FIQ和一个IRQ,正如许多人已经回答的那样。但ARMv7-M(用于Cortex-M处理器)在处理器中集成了一个中断控制器,因此提供一个NMI(而不是FIQ)和多达240个IRQ线。

有关更多信息:ARMv7 A和ARMv7-R Architecure参考手册:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0406c/index.html

ARMv7-M架构参考手册:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0403e.b/index.html

例如,Cortex M4规格表:http://www.arm.com/products/processors/cortex-m/cortex-m4-processor.php