浅谈ARM处理器的七种异常处理

昨天的文章,我们谈了ARM处理器的七种运行模式,分别是:用户模式User(usr),系统模式System(sys),快速中断模式(fiq),管理模式Supervisor(svc),外部中断模式(irq),数据访问中止模式Abort(abt),未定义指令中止模式Undfined(und)。

今天我们来谈谈ARM处理器所支持的七种异常处理。

ARM处理器的异常

当程序在正常执行过程中,出现暂时停止时,我们称之为发生了异常。比如说,在程序执行过程中,接到一个外部的中断申请。

处理器在接到中断申请之后,一般要经过下面的步骤:

  1. 保留当前处理器状态;
  2. 处理中断;
  3. 返回中断前状态,继续执行中断前程序。

当有多个中断同时申请时,处理器将按照优先级,顺次进行处理。

需要指出的是,异常并不完全等同与中断,中断只是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处理器对异常的响应过程

如果一个异常出现,复位异常会立即中止当前指令执行,除此之外的其他异常,处理器会尽可能完成当前指令,然后再去处理异常。对异常的响应一般分为以下几步:

  1. 保存下一条指令的地址(PC)到相应连接寄存器LR_mode中,当处理完异常返回时,从异常发生前的地址处,重新开始执行。
  2. 将CPSR的内容复制到,将要执行的异常模式对应的SPSR_<mode>中。
  3. 设置当前状态寄存器CPSR的相关位。
  4. 强制PC从相关的异常向量地址,取下一条指令执行,从而跳转到相应的异常处理程序处。

ARM处理器从异常处理中返回过程

在处理完异常之后,恢复用户任务的正常执行,即从异常处理中返回。ARM处理器从异常中返回,一般分为以下几步:

  1. 从处理程序的保护堆栈中,恢复异常处理中用过的用户寄存器。
  2. 将相应SPSR_<mode>内容复制回CPSR中,以恢复异常出现前的程序状态。若在进入异常处理时设置了中断控制位,要在此时清除。
  3. 将连接寄存器LR_<mode>的值减去相应的偏移量后送到PC中。

小结

今天我们谈了ARM处理器的七种异常情况,并介绍了对异常的响应过程,和返回过程。深入了解今天的内容,是使用ARM处理器实现嵌入式系统编程的前提。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();