文档详情

嵌入式系统-第二章.ppt

发布:2025-02-25约9.26千字共10页下载文档
文本预览下载声明

.异常(Exceptions)当正常的程序执行流程发生暂时的停止时,称之为异常。在处理异常之前,当前处理器的状态必须保留,这样,当异常处理完成之后,当前程序可以继续执行。处理器允许多个异常同时发生,处理器会按固定的优先级对多个异常进行处理。1、对异常的响应:按以下步骤操作(1)将下一条指令的地址存入相应连接寄存器LR。若异常是从ARM状态进入,LR寄存器中保存的是下一条指令的地址(当前PC+4或PC+8,与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量。这样,异常处理程序就不需要确定异常是从何种状态进入的,程序在处理异常返回时能从正确的位置重新开始执行。例如:在软件中断异常SWI中,指令MOVPC,R14_svc总是返回到下一条指令,而不管SWI是在ARM状态执行,还是在Thumb状态执行。(2)将CPSR复制到相应的SPSR中。(3)根据异常类型,强制设置CPSR的运行模式位。(4)强制PC从相应的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。2、从异常返回:进入异常处理前可以设置中断禁止位,以禁止异常处理时对中断的响应。如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。异常处理完毕之后,执行以下操作从异常返回:(1)将连接寄存器LR的值减去相应的偏移量后送到PC中。(2)将SPSR复制回CPSR中。(3)若在进入异常处理时设置了中断禁止位,要在此清除。3、各类异常的具体描述(1)FIQ(快速中断请求)(2)IRQ(中断请求)(3)Abort(中止)(4)SoftwareInterrupt(软件中断)(5)UndefinedInstruction(未定义指令)异常进入/退出表中总结了进入异常处理时保存在相应R14中的PC值,及在退出异常处理时推荐使用的指令。异常向量及异常处理应用程序中的异常处理:当系统运行时,异常可能会随时发生。为保证在ARM处理器发生异常时不至于处于未知状态,在应用程序的设计中,首先要进行异常处理。采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序。当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到异常处理程序。当异常处理完成以后,返回到主程序继续执行。各异常向量地址如表所示。当多个异常同时发生时,系统根据固定的优先级决定异常的处理顺序。异常优先级由高到低的排列次序为:复位、数据中止、FIQ、IRQ、预取指令中止、未定义指令、SWI。2.2.7ARM微处理器的指令集*加载/存储型,指令集仅能处理寄存器中的数据,处理结果要放回寄存器中。跳转指令数据处理指令程序状态寄存器(PSR)处理指令加载/存储指令协处理器指令异常产生指令1、ARM指令集*1)跳转指令:实现程序流程的跳转直接向程序计数器PC写入跳转地址值,可在4GB地址空间中的任意跳转MOVLR,PC;保存将来的返回地址值从当前指令向前或向后的32MB地址空间的跳转,有4条指令:(1)B指令:B{条件}目标地址(2)BL指令:BL{条件}目标地址(3)BLX指令:BLX目标地址(4)BX指令:BX{条件}目标地址2)数据处理指令(1)MOV指令:加载数据MOV{条件}{S}目的寄存器,源操作数如:MOVR1,R0MOVPC,R14MOVR1,R0,LSL#3(2)MVN指令:取反后加载数据MVN{条件}{S}目的寄存器,源操作数(3)CMP指令:比较数据CMP{条件}操作数1,操作数2(4)CMN指令:取反后比较CMN{条件}操作数1,操作数2(5)TST指令:按位与运算TST{条件}操作数1,操作数2(6)TEQ指令:按位异或TEQ{条件}操作数1,操作数2(7)ADD指令:相加并存储ADD{条件}{S}目的寄存器,操作数1,操作数2(8)ADC指令:相加并加上标志位,再存储ADC{条件}{S}目的寄存器,操作数1,操作数2(9)SUB指令:相减并存放在目的寄存器(10)SBC指令:相减并减去标志位,再存放在目的寄存器(11)RSB指令:逆向减法,再存放在目的寄存器(12)RSC指令:逆向减法,再减去标志位,再存放在目的寄存器(13)AND指令:操作数逻辑与运算(14)ORR指令:

显示全部
相似文档