本日我们来谈谈ARM处理器所支持的七种非常处理。
ARM处理器的非常
当程序在正常实行过程中,涌现暂时停滞时,我们称之为发生了非常。比如说,在程序实行过程中,接到一个外部的中断申请。
处理器在接到中断申请之后,一样平常要经由下面的步骤:

当有多个中断同时申请时,处理器将按照优先级,顺次进行处理。
须要指出的是,非常并不完备等同与中断,中断只是ARM所支持非常类型的一种。
ARM所支持的非常类型
ARM体系处理器支持的非常处理有7种,下表列出了ARM体系处理器支持的非常及互异常的含义。
复位在复位电平有效时,就会产生复位非常,程序跳转到复位处理程序处实行。复位向量地址是0x00000000开始连续四个字节。复位非常常日用在:系统加电时,系统复位时,跳转到复位向量地址。
未定义指令当碰着不能处理的指令时,产生未定义指令非常。向量地址为:0x00000004开始连续四个字节。
软件中断实行SWI指令产生,用于用户模式下的程序调用特权操作指令。在实时操作系统(RTOS)中可以通过该机制实现系统功能调用。向量地址为:0x00000008开始连续四个字节。
指令预取中止处理器预取指令的地址不存在,或该地址不许可当前指令访问,产生此类非常。向量地址为:0x0000000C开始连续四个字节。
数据中止处理器数据访问指令的地址不存在,或该地址不许可当前指令访问时,产生数据中止非常。向量地址为:0x00000010开始连续四个字节。
IRQ外部中断要求有效,且CPSR中的I位为0时,产生IRQ非常。向量地址为:0x00000018开始连续四个字节。
FIQ快速中断要求引脚有效,且CPSR中的F位为0时,产生FIQ非常。向量地址为:0x0000001C开始连续四个字节。
ARM处理器对非常的相应过程如果一个非常涌现,复位非常会立即中止当前指令实行,除此之外的其他非常,处理器会尽可能完成当前指令,然后再去处理非常。对非常的相应一样平常分为以下几步:
保存下一条指令的地址(PC)到相应连接寄存器LR_mode中,当处理完非常返回时,从非常发生前的地址处,重新开始实行。将CPSR的内容复制到,将要实行的非常模式对应的SPSR_<mode>中。设置当前状态寄存器CPSR的干系位。逼迫PC从干系的非常向量地址,取下一条指令实行,从而跳转到相应的非常处理程序处。ARM处理器从非常处理中返回过程在处理完非常之后,规复用户任务的正常实行,即从非常处理中返回。ARM处理器从非常中返回,一样平常分为以下几步:
从处理程序的保护堆栈中,规复非常处理中用过的用户寄存器。将相应SPSR_<mode>内容复制回CPSR中,以规复非常涌现前的程序状态。若在进入非常处理时设置了中断掌握位,要在此时打消。将连接寄存器LR_<mode>的值减去相应的偏移量后送到PC中。小结本日我们谈了ARM处理器的七种非常情形,并先容了对非常的相应过程,和返回过程。深入理解本日的内容,是利用ARM处理器实现嵌入式系统编程的条件。