ARM处理器对异常的响应过程是,当异常产生时,ARM内核将自动完成以下工作:
(1)保存ARM处理器当前状态、中断屏蔽位以及各条件标志位。这是通过将CPSR的内容保存到将要执行的异常对应的SPSR中实现的。各异常有自己的物理SPSR。
(2)设置CPSR中相应的位,使处理进入相应的执行模式;设置CPSR中相应的位,禁止外部中断请求异常,当进入快速中断模式时,禁止快速中断请求异常;
(3)将寄存器LR_mode设置成异常返回地址;
(4)将PC设置成该异常的异常向量地址,从而跳转到相应的异常处理程序处执行。
上述ARM处理器对异常的响应过程可以用如下伪代码描述:
下面按异常的类型分情况讨论。
1.响应复位异常
当ARM处理器发生复位异常时,系统进入管理模式,切换到ARM状态,同时禁止快速中断请求异常和外部中断请求异常,然后设置PC使其从复位地址0x00000000(或者0xFFFF0000)取下一条指令执行,伪代码描述如下:
2.响应未定义指令异常
当处理器发生未定义指令异常时,系统将下一条指令的地址存入R14_und,同时将CPSR的值复制到SPSR_und中;然后强制设置CPSR的值,使系统进入未定义指令工作模式,同时切换到ARM状态;设置CPSR的I位为1,用来禁止外部中断请求异常;最后设置PC,使其从未定义指令异常向量地址0x00000004(或者0xFFFF0004)取下一条指令执行。伪代码描述如下:(www.xing528.com)
3.响应软件中断异常
当ARM处理器发生软件中断异常时,系统将下一条指令地址存入R14_svc。同时将CPSR的值复制到SPSR_svc中,然后强制设置CPSR的值,使系统进入管理模式,同时切换到ARM状态;设置CPSR的位I为1,用来禁止快速中断请求异常,最后设置PC,使其从软件中断异常向量地址0x00000008(或者0xFFFF0008)取下一条指令执行。伪代码描述如下:
4.响应指令预取中止异常
当ARM处理器发生指令预取中止异常时,系统将下一条指令的地址存入R14_abt,同时将CPSR的值复制到SPSR_abt中,然后强制设置CPSR的值,使系统进入数据访问中止模式,同时切换到ARM状态;设置CPSR的I位为1,用来禁止外部中断请求异常,最后设置PC,使其从指令预取中止异常向量地址0x0000000C(或者0xFFFF000C)取下一条指令执行。伪代码描述如下:
5.响应数据访问中止异常
当ARM处理器发生数据访问中止异常时,系统将下一条指令的地址存入R14_abt,同时将CPSR的值复制到SPSR_abt中,然后强制设置CPSR的值,使系统进入数据访问中止模式,同时切换到ARM状态;设置CPSR的I位为1,用来禁止外部中断请求异常,最后设置PC,使其从数据中止异常向量地址0x00000010(0xFFFF0010)取下一条指令执行。伪代码描述如下:
6.响应外部中断请求异常
当ARM处理器发生异常时,系统将下一条指令的地址存入R14_irq,同时将CPSR的值复制到SPSR_irq中,然后强制设置CPSR的值,使系统进入外部中断模式,同时切换到ARM状态;设置CPSR的I位为1,用来禁止外部中断请求异常,最后设置PC,使其从IRQ向量地址0x00000018(0xFFFF0018)取下一条指令执行。伪代码描述如下:
7.响应快速中断请求异常
当处理器发生快速中断请求异常异常时,系统将下一条指令的地址存入R14_fiq,同时将CPSR的值复制到SPSR_fiq中,然后强制设置CPSR的值,使系统进入快速中断模式,同时切换到ARM状态;设置CPSR的I位和F位都为1,用来禁止外部中断请求异常和快速中断请求异常,最后设置PC,使其从快速中断请求异常向量地址0x0000001C(0xFFFF001C)取下一条指令执行。伪代码描述如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。