原创 ARM微处理器的异常处理

2009-3-3 09:42 3401 10 10 分类: MCU/ 嵌入式

ARM微处理器的异常处理


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


在一个正常的程序流程执行过程中,由内部或外部源产生的一个事件使正常的程序产生暂时的停止时,称之为异常。异常是由内部或外部源产生并引起处理器处理一个事件,例如一个外部的中断请求。在处理异常之前,当前处理器的状态必须保留,当异常处理完成之后,恢复保留的当前处理器状态,继续执行当前程序。多个异常同时发生时,处理器将会按固定的优先级进行处理。


ARM体系结构中的异常,与单片机的中断有相似之处,但异常与中断的概念并不完全等同,例如外部中断或试图执行未定义指令都会引起异常。


ARM体系结构支持7种类型的异常,异常类型、异常处理模式和优先级如下表所示。异常出现后,强制从异常类型对应的固定存储器地址开始执行程序。这些固定的地址称为异常向量(Exception Vectors)。



异常类型


异常


进入模式


地址(异常向量)


优先级


复位


复位


管理模式


0x0000,0000


1(最高)


未定义指令


未定义指令


未定义模式


0x0000,0004


6(最低)


软件中断


软件中断


管理模式


0x0000,0008


6(最低)


指令预取中止


中止(预取指令)


中止模式


0x<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />0000,000C


5


数据中止


中止(数据)


中止模式


0x0000,0010


2


IRQ(外部中断请求)


IRQ


IRQ


0x0000,0018


4


FIQ(快速中断请求)


FIQ


FIQ


0x0000,001C


3


1)复位


当处理器的复位电平有效时,产生复位异常,ARM处理器立刻停止执行当前指令。复位后,ARM处理器在禁止中断的管理模式下,程序跳转到复位异常处理程序处执行(从地址0x000000000xFFFF0000开始执行指令)。


2)未定义指令异常


ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。当ARM处理器执行协处理器指令时,它必须等待任一外部协处理器应答后,才能真正执行这条指令。若协处理器没有响应,就会出现未定义指令异常。若试图执行未定义的指令,也会出现未定义指令异常。未定义指令异常可用于在没有物理协处理器(硬件)的系统上,对协处理器进行软件仿真,或在软件仿真时进行指令扩展。


3)软件中断异常(SoftWare InterruptSWI


软件中断异常由执行SWI指令产生,可使用该异常机制实现系统功能调用,用于用户模式下的程序调用特权操作指令,以请求特定的管理(操作系统)函数。


4)指令预取中止


若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出存储器中止(Abort)信号,但当预取的指令被执行时,才会产生指令预取中止异常。


5)数据中止(数据访问存储器中止)


若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。存储器系统发出存储器中止信号。响应数据访问(加载或存储)激活中止,标记数据为无效。在后面的任何指令或异常改变CPU状态之前,数据中止异常发生。


6)外部中断请求(IRQ)异常


当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务。IRQ异常的优先级比FIQ异常的低。当进入FIQ处理时,会屏蔽掉IRQ异常。


7)快速中断请求(FIQ)异常


当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。FIQ支持数据传送和通道处理,并有足够的私有寄存器。


异常的响应过程,当一个异常出现以后,ARM微处理器会执行以下几步操作:


将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。若异常是从ARM状态进入,LR寄存器中保存的是下一条指令的地址(当前PC4PC8,与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量。


CPSR状态传送到相应的SPSR中。


根据异常类型,强制设置CPSR的运行模式位。


强制PC从相关的异常向量地址取下一条指令执行,跳转到相应的异常处理程序。还可以设置中断禁止位,以禁止中断发生。


如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。


异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:


将连接寄存器LR的值减去相应的偏移量后送到PC中。


SPSR内容送回CPSR中。


若在进入异常处理时设置了中断禁止位,要在此清除。


可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。


 


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
10
关闭 站长推荐上一条 /3 下一条