嵌入式学习笔记(3)ARM的异常处理方式介绍

什么是异常

  正常工作之外的流程都叫异常

  异常会打断正在执行的工作,并且一般我们希望异常处理完后继续回来执行原工作

  中断是异常的一种

异常向量表

  所有的CPU都有异常向量表,这是CPU设计时就设定好的,是硬件决定的。

  当异常发生时,CPU会自动动作(PC跳转到异常向量处处理异常,有时伴有一些辅助动作)

  异常向量表是硬件向软件提供的处理异常的支持。

ARM的异常处理机制

当异常产生时, ARM core:

(1)将CPSR的值保存到将要执行的异常中断对应的SPSR中,以实现对处理器当前状态、中断屏蔽及各标志位的保护。

(2)设置当前状态寄存器CPSR的相应位。设置CPSR中的M4~M0的5位,进入相应工作模式,设置I=1禁止IRQ中断,如果进入复位模式或FIQ模式,还要设置F=1以禁止FIQ中断。

(3)将引起异常指令的下一条地址(断点地址)保存到 LR(R14)中,使异常处理程序执行完后正确返回原来程序处继续向下执行。

(4)给程序计数器PC强制赋值,转入向量地址,以便执行相应的处理程序。

每种中断异常模式对应两个寄存器SP和LR。

从中断返回。如果是复位异常,系统自动从0x00000000开始重新执行程序,无需返回

(1)首先恢复原来被保护的用户寄存器。

(2)将SPSR寄存器复制到CPSR中,使得原来CPSR状态从相应的SPSR中恢复,——恢复被中断的程序状态。

(3)根据异常类型将PC值恢复成断点地址,以继续执行用户原来运行着的程序。

(4)清除CPSR中的中断禁止标志I和F,开放外部中断和快速中断。

注意:

(1)程序状态寄存器及断点地址的恢复必须同时进行。

(2)由于异常随机发生,所以要对异常向量进行初始化,即在异常向量的地址处放置一条跳转指令,跳转到异常处理程序。

更多嵌入式学习笔记、实战项目,点击这里即可免费领取

猜你喜欢

转载自blog.csdn.net/m0_70888041/article/details/132555019
今日推荐