当前位置:文档之家› ARM中异常中断处理概述

ARM中异常中断处理概述

异常中断处理概述1.ARM中异常中断处理概述1)在正常程序执行过程中,每执行一条ARM指令,程序计数器寄存器PC的值加4个字节;每执行一条Thumb指令,程序计数器寄存器PC的值加两个字节.整个过程是顺序执行.2)通过跳转指令,程序可以跳转到特定的地址标号处执行,或者跳转到特定的子程序处执行;B指令用于执行跳转操作;BL指令在执行跳转操作的同时,保存子程序的返回地址;BX指令在执行跳转操作的同时,根据目标地址的最低位可以将程序状态切换到Thumb状态;BLX指令执行3个操作:跳转到目标地址处执行,保存子程序的返回地址(R15保存在R14中),根据目标地址的最低位可以将程序状态切换到Thumb状态.3)当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行.在当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行.4)在进入异常中断处理程序时,要保存被中断的程序的执行现场,在从异常中断处理程序退出时,要恢复被中断的程序的执行现场.本章讨论ARM体系中的异常中断机制.2.ARM体系中异常中断种类.ARM体系中的异常中断如下表所示:3.中断向量表中指定了各异常中断及其处理程序的对应关系.它通常存放在存储地址的低端.在ARM体系中,异常中断向量表的大小为32字节.其中,每个异常中断占据4个字节大小,保留了4个字节空间.每个异常中断对应的中断向量表的4.通过这两种指令,程序将跳转到相应的异常中断处理程序处执行.当几个异常中断同时发生时,就必须按照一定的次序来处理这些异常中断.在ARM 中通过给各异常中断富裕一定的优先级来实现这种处理次序.当然有些异常中断是不坑能同时发生的,如指令预取中止异常中断和软件中断(SWI)异常中断是有同一条指令的执行触发的,他们是不可能同时发生的.处理器执行某个特定的异常中断的过程中,称为处理器处于特定的中断模式.各异常中断的中断向量地址以及中断的处理优先级如表2所示.4.异常中断使用的寄存器各异常中断对应着一定的处理器模式.应用程序通常运行在用户模式下.ARM中的处理器模式如表3所示.各种不同的处理器模式可能有对应于该处理器模式的物理寄存器组,如表4所示,其中,R13_svc表示特权模式下的R13寄存器,R13_abt表示中止模式下的R13寄存器,其余的各寄存器名称含义类推.表4 各处理器模式的物理寄存器组如果异常中断处理程序中使用它自己的物理寄存器之外的其它寄存器,异常中断处理程序必须保存和恢复这些寄存器.在表4中各物理寄存器的名称(如R13_svc等)在ARM汇编语言中并没有被预定义.用户使用这些寄存器时,必须使用伪操作RN来定义这些名称.如可以通过下面操作定义寄存器名称R13_svc:R13_svc RN R13一.进入和退出异常中断的过程1.ARM处理器对异常中断的相应过程ARM处理器对异常中断的响应过程如下:a.保存处理器当前状态,中断屏蔽位以及各条件标志位.只是通过将当前程序状态寄存器CPSR的内容保存到将要执行的异常总段对应的SPSR寄存器中实现的.各异常中断有自己的物理SPSR寄存器.b.设置当前程序CPSR中相应的位.包括设置CPSR中的位,使处理器进入相应的执行模式;设置CPSR中的位,禁止IRQ:当进入FIQ模式时,禁止FIQ中断.c.将寄存器LR_mode(R14)设置成返回地址,R14从R15中得到PC的备份.d.将程序计数器值PC设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行.上述的处理器对异常中断的相应过程可以用如下的伪代码描述.e.响应复位异常中断.当处理器的复位引脚有效时,处理器中止当前指令.当处理器的复位引脚变成无效时,处理器开始执行下面的操作.R14_svc = UNPREDICTABLE valueSPSR_svc = UNPREDICTABLE valueCPSR[4:0] = 0b10011 //进入特权模式CPSR[5] = 0 //切换到ARM状态CPSR[6] = 1 //禁止FIQ异常中断CPSR[7] = 1 //禁止IRQ中断If high vectors configured thenPC = 0xffff0000ElsePC = 0x00000000f.响应未定义指令异常中断处理器相应未定义指令异常中断时的处理过程如下面的伪代码所示.R14_und = address of next instruction after the undefined instructionSPSR_und = CPSRCPSR[4:0] = 0b11011 //进入未定义指令异常中断模式CPSR[5] = 0 //切换到ARM状态CPSR[6] = 1 //禁止FIQ异常中断CPSR[7] = 1 //禁止IRQ中断If high vectors configured thenPC = 0xffff0004ElsePC = 0x00000004g.响应SWI异常中断处理器相应SWI异常中断时的处理过程如下面的伪代码所示.R14_svc = address of next instruction after the SWI instructionSPSR_svc = CPSRCPSR[4:0] = 0b10011 //进入特权模式CPSR[5] = 0 //切换到ARM状态CPSR[6] = 1 //禁止FIQ异常中断CPSR[7] = 1 //禁止IRQ中断If high vectors configured thenPC = 0xffff0008ElsePC = 0x00000008h.响应指令预取中止异常中断.处理器相应指令预取中止异常会总段时的处理过程如下面的伪代码所示.R14_abt = address of the aborted instruction + 4SPSR_abt = CPSRCPSR[4:0] = 0b10111 //进入指令预取中止模式CPSR[5] = 0 //切换到ARM状态CPSR[6] = 1 //禁止FIQ异常中断CPSR[7] = 1 //禁止IRQ中断If high vectors configured thenPC = 0xffff000cElsePC = 0x0000000ci.响应数据访问中止异常中断处理器相应数据访问中止异常中断时的处理过程如下面的伪代码所示.R14_abt = address of the aborted instruction + 8SPSR_abt = CPSRCPSR[4:0] = 0b10111 //进入数据访问中止模式CPSR[5] = 0 //切换到ARM状态CPSR[6] = 1 //禁止FIQ异常中断CPSR[7] = 1 //禁止IRQ中断If high vectors configured thenPC = 0xffff0010ElsePC = 0x00000010j.响应IRQ异常中断处理器相应IRQ异常总段时的处理过程如下面的伪代码所示.R14_irq = address of next instruction to be executed + 4SPSR_irq = CPSRCPSR[4:0] = 0b10010 //进入IRQ异常中断模式CPSR[5] = 0 //切换到ARM状态CPSR[6] = 0 //打开FIQ异常中断CPSR[7] = 1 //禁止IRQ中断If high vectors configured thenPC = 0xffff0018ElsePC = 0x00000018k.响应FIQ异常中断处理器相应FIQ异常中断时的处理过程如下面的伪代码所示.2.从异常中断处理程序种返回基本操作:1)恢复被中断的程序的处理器状态,即将SPSR_mode寄存器内容复制到当前程序状态寄存器CPSR中。

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

1)复位异常中断不需要返回。

整个应用系统是从复位异常中断处理程序开始执行的,因而它不需要返回。

2)SWI和未定义指令异常中断处理程序的返回SWI和未定义指令异常中断是由当前执行的指令自身产生的,PC指向了第三条指令,但PC的值还没有更新,还为第二条指令的地址值所以返回时,直接MOV PC,LR即可3)IRQ和FIQ异常中断处理程序的返回通常处理器执行完当前指令后,查询IRQ中断引脚及FIQ中断引脚,并且查看系统是否允许IRQ中断及FIQ中断。

如果由中断引脚有效,并且系统允许该中断产生,处理器将产生IRQ异常中断或FIQ异常中断。

PC指向了第三条指令,并且也得到更新所以返回时,SUBS PC, LR, #44)指令预取中止异常中断处理程序的返回当发生指令预取中止异常中断时,程序要返回到该有问题的指令处,重新读取并执行该指令。

因此指令预取中止异常中断程序应该返回到产生该指令预取中止异常中断的指令处,而不是像前面两种情况下返回到发生中断的指令的下一条指令。

PC指向第三条指令,还未更新,所以PC的值仍为第二条指令的地址返回时,SUBS PC, LR, #45)数据访问中止异常中断处理程序的返回其也要返回发生错误的地址处但,发生中断时,PC指向第三条指令,且已更新所以,返回时,SUBS PC, LR, #8寄存器(和保存它的 SPSR 寄存器)中的位分配如下:31 30 29 28 --- 7 6 - 4 3 2 1 0N Z C V I F M4 M3 M2 M1 M00 0 0 0 0 User26 模式// mode0 0 0 0 1 FIQ26 模式0 0 0 1 0 IRQ26 模式0 0 0 1 1 SVC26 模式1 0 0 0 0 User 模式1 0 0 0 1 FIQ 模式1 0 0 1 0 IRQ 模式1 0 0 1 1 SVC 模式1 0 1 1 1 ABT 模式1 1 0 1 1 UND 模式。

相关主题