欢迎来到天天文库
浏览记录
ID:5908624
大小:160.00 KB
页数:27页
时间:2017-11-13
《第6章 arm异常中断处理及程序设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第6章ARM异常处理及程序设计异常(exception)由内部或外部源产生以引起处理器处理一个事件。例如,外部中断或试图执行未定义指令都会引起异常。在处理异常之前,处理器状态必须保留(当前程序的状态、位置、临时数据),以便在异常处理程序完成后,原来的程序能够重新执行。同一时刻可能出现多个异常。ARM支持7种类型的异常。表6-1列出了异常的类型以及处理这些异常的处理器模式。异常出现后,强制从异常类型对应的固定存储器地址开始执行程序。这些固定的地址称为异常向量(ExceptionVectors)。6.1ARM异常类型及处理方式当异常出现
2、时,异常模式分组的R14和SPSR用于保存当前程序的位置和状态,即R14_=returnlinkSPSR_=CPSRCPSR[4:0]=exceptionmodenumberCPSR[5]=0/*在ARM状态执行*/if==ResetorFIQthenCPSR[6]=1/*禁止快速中断*//*否则CPSR[6]不变*/CPSR[7]=1/*禁止正常中断*/PC=exceptionvectoraddress当处理异常返回时,将SPSR传送到CP
3、SR,R14传送到PC。这可用两种方法完成,即使用带S位的数据处理指令,将PC作为目的寄存器;使用带恢复CPSR的多加载指令。1.复位处理器上一旦有复位输入,ARM处理器立刻停止执行当前指令。复位完成下列操作R14_svc=UNPREDICTABLEvalueSPSR_svc=UNPREDICTABLEvalueCPSR[4:0]=0b10011/*进入管理模式*/CPSR[5]=0/*在ARM状态下执行*/CPSR[6]=1/*禁止快速中断*/CPSR[7]=1/*禁止正常中断*/Ifhighvectorsconfiguredth
4、enPC=0xFFFF0000ElsePC=0x00000000复位后,ARM处理器在禁止中断的管理模式下,从地址0x00000000或0xFFFF0000开始执行指令。2.未定义指令异常当ARM处理器执行协处理器指令时,它必须等待任一外部协处理器应答后,才能真正执行这条指令。若协处理器没有响应,就会出现未定义指令异常。若试图执行未定义的指令,也会出现未定义指令异常。未定义指令异常可用于没有物理协处理器(硬件)的系统上,对协处理器进行软件仿真,或在软件仿真时进行指令集扩展。当未定义指令异常出现时,执行下列操作:R14_und=add
5、ressofnextinstructionaftertheundefinedinstructionSPSR_und=CPSRCPSR[4:0]=0b11011/*进入未定义模式*/CPSR[5]=0/*在ARM状态执行*//*CPSR[6]不变*/CPSR[7]=1/*禁止正常中断*/IfhighvectorsconfiguredthenPC=0xFFFF0004ElsePC=0x00000004在仿真未定义指令后,使用下列指令返回,即MOVSPC,R14上面的指令恢复PC(从R14_und)和CPSR(从SPSR_und),并返回
6、到未定义指令后的下一条指令。3.软件中断异常软件中断指令SWI(SoftWareInterruptlnstruction)进入管理模式,以请求特定的管理(操作系统)函数。当执行SWI时,完成下列操作:R14_svc=addressofnextinstructionaftertheSWIinstructionSPSR_svc=CPSRCPSR[4:0]=0b10011/*进入管理模式*/CPSR[5]=0/*在ARM状态执行*//*CPSR[6]不变*/CPSR[7]=1/*禁止正常中断*/Ifhighvectorsconfigure
7、dthenPC=0xFFFF0008ElesPC=0x00000008完成SWI操作后,使用下列指令恢复PC(从R14_svc)和CPSR(从SPSR_svc),并返回到SWI指令后的下一条指令,即MOVSPC,R144.预取指中止(取指令存储器中止)存储器系统发出存储器中止(abort)信号。响应取指激活的中止标记所取的指令无效。若处理器试图执行无效指令,则产生预取中止异常。若指令未执行(例如,指令在流水线中发生了转移),则不发生预取中止。在ARMv5及以上版本中,执行BKPT指令也会产生预取中止异常。当试图执行一条中止的指令时,
8、将执行下列操作:R14_abt=addressoftheabortedinstruction+4SPSR_abt=CPSRCPSR[4:0]=0b10111/*进入中止模式*/CPSR[5]=0/*在ARM状态执行*//*CPSR[6
此文档下载收益归作者所有