历史上的今天
今天是:2024年09月17日(星期二)
2021年09月17日 | ARM9_S3C2440学习(四)FIQ和IRQ区别
2021-09-17 来源:eefocus
ARM 处理器有 FIQ和 IRQ 两级外部中断,它们都是由对电平敏感的低电平(LOW)信号激活进入处理器的。为了产生中断,CPSR 中的相应禁用位必须清零。
快速中断请求(Fast Interrupt Request,FIQ),IRQ全称为Interrupt Request,即是“中断请求”的意思。
FIQ 的优先级比 IRQ高,具体表现如下:
(1)当发生多个中断时,首先处理 FIQ。
(2)处理 FIQ会导致禁用 IRQ 和后续 FIQ,在 FIQ处理程序启用之前,不会处理 IRQ 和后续 FIQ。这通常是通过在处理程序结束时从 SPSR恢复 CPSR来完成的。
FIQ 向量是向量表的最后一个入口,因此 FIQ处理程序可直接放在该向量位置并从该地址顺序执行。这避免了跳转以及相关的延迟,并意味着如果系统有高速缓存,则向量表和 FIQ处理程序可能都锁定在高速缓存中的一个块内。这一点非常重要,因为 FIQ就是为了尽快处理中断而设计的。通过五个额外的 FIQ模式编组寄存器,可以保存处理程序各次调用的状态,这也加快了执行速度。
注意:中断处理程序必须包含清除中断源的代码。
#define pISR_RESET (*(unsigned *)(_ISR_STARTADDRESS+0x0))
#define pISR_UNDEF (*(unsigned *)(_ISR_STARTADDRESS+0x4))
#define pISR_SWI (*(unsigned *)(_ISR_STARTADDRESS+0x8))
#define pISR_PABORT (*(unsigned *)(_ISR_STARTADDRESS+0xc))
#define pISR_DABORT (*(unsigned *)(_ISR_STARTADDRESS+0x10))
#define pISR_RESERVED (*(unsigned *)(_ISR_STARTADDRESS+0x14))
#define pISR_IRQ (*(unsigned *)(_ISR_STARTADDRESS+0x18))
#define pISR_FIQ (*(unsigned *)(_ISR_STARTADDRESS+0x1c))
FIQ和IRQ是两种不同类型的中断,ARM为了支持这两种不同的中断,提供了对应的叫做FIQ和IRQ处理器模式(ARM有7种处理模式)。
一般的中断控制器里我们可以配置与控制器相连的某个中断输入是FIQ还是IRQ,所以一个中断是可以指定为FIQ或者IRQ的,为了合理,要求系统更快响应,自身处理所耗时间也很短的中断设置为FIQ,否则就设置了IRQ。
如果该中断设置为了IRQ,那么当该中断产生的时候,中断处理器通过IRQ请求线告诉ARM,ARM就知道有个IRQ中断来了,然后ARM切换到IRQ模式运行。类似的如果该中断设置为FIQ,那么当该中断产生的时候,中断处理器通过FIQ请求线告诉ARM,ARM就知道有个FIQ中断来了,然后切换到FIQ模式运行。
简单的对比的话就是FIQ比IRQ快,为什么快呢?
ARM的FIQ模式提供了更多的banked寄存器,r8到r14还有SPSR,而IRQ模式就没有那么多,R8,R9,R10,R11,R12对应的banked的寄存器就没有,这就意味着在ARM的IRQ模式下,中断处理程序自己要保存R8到R12这几个寄存器,然后退出中断处理时程序要恢复这几个寄存器,而FIQ模式由于这几个寄存器都有banked寄存器,模式切换时CPU自动保存这些值到banked寄存器,退出FIQ模式时自动恢复,所以这个过程FIQ比IRQ快.
FIQ比IRQ有更高优先级,如果FIQ和IRQ同时产生,那么FIQ先处理。
在symbian系统里,当CPU处于FIQ模式处理FIQ中断的过程中,预取指令异常,未定义指令异常,软件中断全被禁止,所有的中断被屏蔽。所以FIQ就会很快执行,不会被其他异常或者中断打断,所以它又比IRQ快了。而IRQ不一样,当ARM处理IRQ模式处理IRQ中断时,如果来了一个FIQ中断请求,那正在执行的IRQ中断处理程序会被抢断,ARM切换到FIQ模式去执行这个FIQ,所以FIQ比IRQ快多了。
另外FIQ的入口地址是0x1c,IRQ的入口地址是0x18。
史海拾趣
|
在CCS2.0下用C写程序的时候编译连接都没问题,但是程序老是陷入死循环,查了很久都没查出来,最后感觉是可能是如下3个warning的问题 “Reg5509a.h\",line 107:warning:incompatible redefinition of macro \"RSA0L\"(declared at line 60) “Reg5 ...… 查看全部问答> |
|
请问大家,做“智能卡”(比如食堂饭卡、公交车卡)、读卡器的开发工作,对于嵌入式开发、手机软件开发和Wince应用开发的工作在经验和技能上有没有多大帮助呢?… 查看全部问答> |
|
ST公司将在登记的客户中抽取1500人,免费赠送MCU开发套件(含STM32,STM8最小系统,和STLINK)。赠品预计5月底发放。微芯力科公司将协办ST公司的开发套件免费赠送活动。请点击以下链接,登记信息,参加活动。http://w ...… 查看全部问答> |
|
STM32F103RBT6+KEIL3.4+JLINK怎样设置keil下载程序到flash呢? STM32F103RBT6+KEIL3.4+JLINK 怎样设置keil下载程序到flash呢? 在网上查了好多相关文档,都试了,下载的时候也没报错,但是结果很奇怪。 之前下了个让PB2输出高电平点亮LED灯的程序,下载后LED确实亮了,后来想让LED闪烁,但是无论如何,LE ...… 查看全部问答> |
|
我现在想用STM32F105RB做产品,在现场通过U盘对产品进行升级!请问可以做到吗?因为USB的OTG我从来没有用过。以前用的要么只能host,或者只能作device。 另外当用STM32F105RB的OTG作主访问U盘时,外围还要加其它的接口芯片吗?另外就是STM32F ...… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 11:40 编辑 这个是英文版的,没发现中文版,有牛人自制中文版的,发上来贡献下。 … 查看全部问答> |




