Fiq & IRQ Handler -- arm

  • 本文关键字:arm Handler IRQ Fiq arm
  • 更新时间 :
  • 英文 :


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

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

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

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

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

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

最近存在具有许多中断128、256的弯曲臂架构,每个中断具有单独的处理器。因此,一般性地询问arm并没有那么多样化,而是像询问x86一样。

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

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

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

在传统的ARM系统中,异常向量中的IRQ和FIQ各有一个条目。根据中断触发的行,调用IRQ或FIQ处理程序。中断处理程序查询GIC(具体来说是GIC CPU接口寄存器)以获得中断编号。根据这个中断号,调用相应的设备处理程序。

中断的数量取决于特定的GIC实现。因此,您必须查看系统中中断控制器的手册才能了解这些细节。

注意:中断处理略有不同,这取决于您正在为哪个特定的ARM内核进行编码。

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

有关更多信息:ARMv7 A和ARMv7-R架构参考手册: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

最新更新