在arm7tdmi中,当FIQ和RIQ同时发生时,两者是如何顺序执行的,首先是FIQ,然后是IRQ?

时间:2016-09-25 17:32:24

标签: exception arm irq arm7 fiq

在arm7tdmi中,假设指令正在执行,同时FIQ和IRQ都同时发生。现在根据优先级FIQ将处理然后IRQ但我的问题是它如何处理从FIQ返回后的IRQ 我的意思是在返回FIQ时将完成哪些过程以及如何在FIQ处理程序的return语句之后将控制转移到IRQ处理程序?

示例:                                   地址=>指令

  0x00000100              :      MOV R0,R1
  0x00000104              :      MOV R0,R1
 =>> 0x00000108              :      MOV R0,R1   
  0x00000110              :      MOV R0,R1
  0x00000114              :      MOV R0,R1
  0x00000118              :      MOV R0,R1

;假设在0x00000108处执行指令并且FIQ和IRQ在时间被引发

1 个答案:

答案 0 :(得分:1)

与M-profile体系结构不同,它们具有非常不同的异常模型,允许尾部链接异常,经典/ A-profile体系结构以完全直接的方式执行。

当相应的CPSR.F / CPSR.I位清零时,在指令边界检查中断。因此,假设FIQ处理程序是直截了当的,一旦0x108处的指令完成,则从CPU所处的任何模式获取FIQ(因为它优先于IRQ),FIQ处理程序在FIQ和IRQ被屏蔽的情况下运行,然后执行异常返回0x110。事实上,正好有一个IRQ待处理,这一点没有任何区别。

值得注意的是FIQ处理程序末尾的返回指令与返回的返回指令之间的边界。 FIQ返回将恢复先前的SPSR,其(可能)具有未屏蔽的IRQ。因此,执行该返回指令之后执行0x110之前的之前,CPU返回初始模式,IRQ未屏蔽,IRQ挂起。这需要它; IRQ处理程序在屏蔽了IRQ的情况下运行,然后执行异常返回到0x110,执行最终继续为两个中断服务。

对于ARM7TDMI来说,真的就是它。在较新的体系结构版本(ARMv7以上版本)中,有一些规则在预期会采取异步异常时精确收紧,因为一旦CPU设计开始变为超标量和/或无序的"指令边界&##的概念34;变得有点模糊。但是,这种特殊情况在现代CPU上没有什么不同,因为FIQ的异常返回构成了一个上下文同步事件,之后必须立即采取任何挂起的异步异常(即IRQ)。