ARM体系的异常中断

在ARM体系中,一般有如下3种方式控制程序的执行流程:spa

  • 在正常程序执行过程当中,每执行一条ARM指令,程序计数寄存器PC的值加4个字节;每执行一条Thumb指令,程序计数寄存器PC的值加2个字节。整个过程是按顺序执行的。
  • 经过跳转指令,程序能够跳转到特定的地址标号处执行,或者跳转到特定的子程序处执行。其中,B指令用于执行跳转操做;BL指令在执行跳转操做的同时,保存子程序的返回地址;BX指令在执行跳转操做的同时,根据目标地址的最低位能够将程序状态切换到Thumb状态;BLX指令执行3个操做,跳转到目标地址处执行,保存子程序的返回地址,根据目标地址的最低位能够将程序状态切换到Thumb状态。
  • 当异常中断发生时,系统执行完当前指令后,跳转到相应的异常中断处理程序处执行。在异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行。在进入异常中断处理程序时,要保存被中断的程序的执行现场,在从异常中断处理程序退出时,要恢复被中断的程序的执行现场。

ARM中异常中断的种类:ci

ARM体系中的异常中断以下表所示。io

各类异常中断都具备各自的备份的寄存器组,在本章前面已经有了比较详细的介绍,这里再也不重复。table

当多个异常中断同时发生时,能够根据异常中断的优先级响应优先级最高的异常中断。关于异常中断的优先级将在之后介绍。软件

ARM体系中的异常中断exception

异常中断名称 含义
复位(reset)

当处理器的复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序处执行,复位异常中断一般用于下面几种状况:请求

系统加电时;系统复位时;跳转到复位中断向量处执行,称为软复位;程序

未定义指令 当ARM处理器或者是系统中的协处理器认为当前指令未定义时,产生未定义的指令异常中断,能够经过异常中断机制仿真浮点向量运行;
软件中断 这是一个用户定义的中断指令,可用于用户模式下的程序调用特权操做指令。
指令预取停止 若是处理器预取的指令的地址不存在,或者该地址不容许当前指令访问,当该被取的指令执行时,处理器产生指令预取停止异常中断;
数据访问停止 若是数据访问指令的目标地址不存在,或者该地址不容许当前指令访问,处理器产生数据访问停止异常中断;
外部中断请求 当处理器的外部中断请求引脚有效时,并且CPSR寄存器的I控制位被清除时,处理器产生外部中断请求异常中断,系统中各外设一般经过异常中断请求处理器服务;
快速中断请求 当处理器的外部快速中断请求引脚有效时,并且CPSR寄存器的F控制位被清除时,处理器产生外部中断请求异常中断;

ARM处理器对异常中断的响应过程:数据

ARM处理器对异常中断的响应过程以下所述。异常

(1)保存处理器当前状态、中断屏蔽位以及各条件标志位。这是经过将当前程序状态寄存器CPSR的内容保存到将要执行的异常中断对应的SPSR寄存器中实现的,各异常中断有本身的物理SPSR寄存器。

(2)设置当前程序状态寄存器CPSR中相应的位。包括设置CPSR中的位,使处理器进入相应的执行模式,设置CPSR中的位,禁止IRQ中断,当进入FIQ模式时,禁止FIQ中断。

(3)将寄存器lr_mode设置成返回地址;

(4)将程序计数器PC设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行;

上述的处理器对异常中断的响应过程能够用以下的代码来描述:

R14_<mode> = return link

SPSR_<mode> = CPSR

CPSR[4:0] = exception mode number

CPSR[5] = 0;

if(exception_mode > reset or FIQ) then

        CPSR[6] = 1

        CPSR[7] = 1

PC = exception vector address

从异常中断处理程序中返回:

从异常中断处理程序中返回包括如下两个基本操做。

(1)恢复被中断的程序的处理器状态,即将SPSR_mode寄存器内容复制到CPSR中。

(2)返回到发生异常中断的指令的下一条指令处执行,即把lr_mode寄存器的内容复制到程序计数器PC中。

在复位异常中断处理程序开始整个用户程序的执行,于是它不须要返回。

实际上,当异常中断发生时,程序计数器PC所指的位置对于各类不一样的异常中断是不一样的,一样的,返回地址对于各类不一样的异常中断也是不一样的。

相关文章
相关标签/搜索