武汉创维特ARM教学系统-06 异常中断处理.ppt
嵌入式系统教案嵌入式系统教案嵌入式系统教案嵌入式系统教案武汉创维特信息技术有限公司武汉创维特信息技术有限公司 1/22/2023提纲1 13 32 2ARM 异常中断处理概述中断处理程序的安装第六章 异常中断处理异常的响应和退出各种异常中断的处理4 42ARM异常中断处理概述q当正常的程序执行流程发生暂时的停止时,称之为异常,当正常的程序执行流程发生暂时的停止时,称之为异常,例如处理一个外部的中断请求。在处理异常之前,当前处例如处理一个外部的中断请求。在处理异常之前,当前处理器的状态必须保留,这样当异常处理完成之后,当前程理器的状态必须保留,这样当异常处理完成之后,当前程序可以继续执行。处理器允许多个异常同时发生,它们将序可以继续执行。处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。会按固定的优先级进行处理。qARMARM体系结构中的异常,与体系结构中的异常,与8 8位位/16/16位体系结构的中断有很位体系结构的中断有很大的相似之处,但异常与中断的概念并不完全等同。大的相似之处,但异常与中断的概念并不完全等同。ARM异常中断处理概述3ARM体系结构所支持的异常类型 异常类型具体含义复位复位电平有效时,产生复位异常,程序跳转到复位处理程序处执行。未定义指令遇到不能处理的指令时,产生未定义指令异常。软件中断执行SWI指令产生,用于用户模式下的程序调用特权操作指令。指令预取中止处理器预取指令的地址不存在,或该地址不允许当前指令访问,产生指令预取中止异常。数据中止处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。IRQ外部中断请求有效,且CPSR中的I位为0时,产生IRQ异常。FIQ快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。ARM异常中断处理概述4异常向量表(Exception Vectors)地地 址址异异 常常进入模式进入模式0 x0000,00000 x0000,0000复位复位管理模式管理模式0 x0000,00040 x0000,0004未定义指令未定义指令未定义模式未定义模式0 x0000,00080 x0000,0008软件中断软件中断管理模式管理模式0 x0000,000C0 x0000,000C中止(预取指令)中止(预取指令)中止模式中止模式0 x0000,00100 x0000,0010中止(数据)中止(数据)中止模式中止模式0 x0000,00140 x0000,0014保留保留保留保留0 x0000,00180 x0000,0018IRQIRQIRQIRQ0 x0000,001C0 x0000,001CFIQFIQFIQFIQARM异常中断处理概述5异常优先级(Exception Priorities)优先级优先级异异 常常1 1(最高)(最高)复位复位2 2数据中止数据中止3 3FIQFIQ4 4IRQIRQ5 5预取指令中止预取指令中止6 6(最低)(最低)未定义指令、未定义指令、SWISWIARM异常中断处理概述6对异常的响应 当一个异常出现以后当一个异常出现以后,ARMARM微处理器会执行以下几步操作微处理器会执行以下几步操作1.1.将下一条指令的地址存入相应连接寄存器将下一条指令的地址存入相应连接寄存器LRLR,以便程序以便程序在处理异常返回时能从正确的位置重新开始执行。在处理异常返回时能从正确的位置重新开始执行。2.2.将将CPSRCPSR复制到相应的复制到相应的SPSRSPSR中。中。3.3.根据异常类型,强制设置根据异常类型,强制设置CPSRCPSR的运行模式位。的运行模式位。4.4.强制强制PCPC从相关的异常向量地址取下一条指令执行,从而从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。跳转到相应的异常处理程序处。对异常的响应7异常响应伪代码处理器处于处理器处于ThumbThumb状态,则当异常向量地址加载状态,则当异常向量地址加载入入PCPC时,处时,处理器自动切换理器自动切换到到ARMARM状态。状态。ARMARM微处理器对异常的响应过程用微处理器对异常的响应过程用伪码可以描述为:伪码可以描述为:R14_=Return LinkSPSR_=CPSRCPSR4:0=Exception Mode NumberCPSR5=0If =Reset or FIQ then CPSR6=1 CPSR7=1 PC=Exception Vector Address 对异常的响应8从从异常返回返回异常处理完毕之后,异常处理完毕之后,ARMARM微处理器会执行以下几步操作从微处理器会执行以下几步操作从异常返回:异常返回:1.1.将连接寄存器将连接寄存器LRLR的值减去相应的偏移量后送的值减去相应的偏移量后送到到PCPC中。中。2.2.将将SPSRSPSR复制回复制回CPSRCPSR中。中。3.3.若在进入异常处理时设置了中断禁止位,要在此清除。若在进入异常处理时设置了中断禁止位,要在此清除。可以认为应用程序总是从复位异常处理程序开始执行的,可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。因此复位异常处理程序不需要返回。对异常的响应9中断处理程序的安装q一般在系统的启动代码中安装异常处理程序。大致可以分为两种情况:1.0地址处存储器为ROM/FLASH2.0地址处存储器为RAM中断处理程序的安装10在ROM/FLASH中安装中断处理程序q在ROM/FLASH的异常中断向量表中,可以使用LDR指令直接向程序计数器PC中赋值,也可以直接使用跳转指令转到异常中断处理程序。1.使用LDR指令:Vector_entry:LDRPC,Reset_HandleLDRPC,Undef_HandleLDRPC,SWI_Handle中断处理程序的安装11在ROM/FLASH中安装中断处理程序LDRPC,Prefetch_HandleLDRPC,Abort_Handle NOPLDRPC,IRQ_HandleLDRPC,FIQ_HandleqVector_table:qReset_Handle:.LONGStart_BootqUndef_Handle:.LONGUndef_Isr中断处理程序的安装12在ROM/FLASH中安装中断处理程序2.使用跳转指令:Vector_entry:BReset_HandleBUndef_HandleBSWI_HandleBPrefetch_HandleBAbort_Handle NOPBIRQ_HandleBFIQ_Handle中断处理程序的安装13RAM中安装中断处理程序q当0地址处为RAM时,中断向量表必须使用数据读取指令直接指向PC中赋值的形式。而且必须把中断向量从ROM中复制到RAM地址的0地址处。MOVr8,#0ADRr9,Vector_Init_BlockLDMIAr9!,r0-r7STMIAr8!,r0-r7中断处理程序的安装14在C程序中安装异常中断处理程序1.中断向量表使用数据处理指令的情况 在中断向量vector处安装location处指向的处理程序unsigned ist_handler(unsigned location,unsigned*vector)unsigned vec,oldvec;vec=(location (unsigned)vector 0 x08)|0 xe59ff000;oldvec=*vector;*vector=vec;return oldvec;中断处理程序的安装15在C程序中安装异常中断处理程序2.中断向量表使用跳转指令的情况 在中断向量vector处安装routine处理程序unsigned ist_handler(unsigned routine,unsigned*vector)unsigned vec,oldvec;vec=(routine (vector 0 x08)2);vec=0 xea000000|vec;oldvec=*vector;*vector=vec;return oldvec;中断处理程序的安装16ABORT(中止)产生中止异常意味着对存储器的访问失败。ARM微处理器在存储器访问周期内检查是否发生中止异常。q中止异常包括两种类型:指令预取中止:发生在指令预取时。数据中止:发生在数据访问时。各种异常中断的处理17指令预取异常中断的处理q系统中不包含MMU时,指令预取中止异常处理程序只是简单的报告错误,然后退出;q在使用MMU的系统中,则发生错误的指令触发虚拟地址失效,在该失效处理程序中重新读取该指令。指令预取异常是在有错误的指令被执行时才触发的。当异常发生时,Lr_abt寄存器没有被更新,它指向引起该指令的后面1条指令。q异常的返回地址应该是该有问题的指令,即Lr_abt4处。各种异常中断的处理18数据访问异常中断的处理q系统中不包含MMU时,数据访问中止异常处理程序只是简单的报告错误,然后退出;q在使用MMU的系统中,数据访问中止异常处理程序要处理该数据访问异常。当异常发生时,Lr_abt寄存器已经被更新,它指向引起该异常的指令的后面2条指令。q异常的返回地址是引起数据访问中止异常中断的指令,即Lr_abt8处。各种异常中断的处理19ABORT(中止)处理函数的退出q当确定了中止的原因后,Abort处理程序均可以执行以下指令从中止模式返回,无论是在ARM状态还是Thumb状态:SUBS PC,R14_abt,#4;指令预取中止SUBS PC,R14_abt,#8;数据中止各种异常中断的处理20FIQ(Fast Interrupt Request)qFIQFIQ异常是为了支持数据传输或者通道处理而设计的。异常是为了支持数据传输或者通道处理而设计的。q若若将将CPSRCPSR的的F F位置为位置为1 1,则会禁止,则会禁止FIQFIQ中断,若中断,若将将CPSRCPSR的的F F位位清零,处理器会在指令执行时检查清零,处理器会在指令执行时检查FIQFIQ的输入。注意只有的输入。注意只有在特权模式下才能改变在特权模式下才能改变F F位的状态。位的状态。q可由外部通过对处理器上可由外部通过对处理器上的的nFIQnFIQ引脚输入低电平产生引脚输入低电平产生FIQFIQ。不管是不管是在在ARMARM状态还是状态还是在在ThumbThumb状态下进入状态下进入FIQFIQ模式,模式,FIQFIQ处处理程序均可以执行以下指令从理程序均可以执行以下指令从FIQFIQ模式返回:模式返回:SUBS PC,R14_SUBS PC,R14_fiqfiq,#4,#4各种异常中断的处理21IRQ(Interrupt Request)qIRQIRQ异常属于正常的中断请求,可通过对处理器的异常属于正常的中断请求,可通过对处理器的nIRQnIRQ引引脚输入低电平产生,脚输入低电平产生,IRQIRQ的优先级低于的优先级低于FIQFIQ,当程序执行进当程序执行进入入FIQFIQ异常时异常时,IRQIRQ可能被屏蔽。可能被屏蔽。q若若将将CPSRCPSR的的I I位置为位置为1 1,则会禁止,则会禁止IRQIRQ中断,若中断,若将将CPSRCPSR的的I I位位清零,处理器会在指令执行完之前检查清零,处理器会在指令执行完之前检查IRQIRQ的输入。注意的输入。注意只有在特权模式下才能改变只有在特权模式下才能改变I I位的状态。位的状态。q不管是在不管是在ARMARM状态还是在状态还是在ThumbThumb状态下进入状态下进入IRQIRQ模式,模式,IRQIRQ处处理程序均可以执行以下指令理程序均可以执行以下指令从从IRQIRQ模式返回:模式返回:SUBS PC,R14_SUBS PC,R14_irqirq,#4,#4各种异常中断的处理22IRQ/FIQ处理程序示例STMFDsp!,r0-r12,lr调用IRQ/FIQ处理程序LDMFDsp!,r0-r12,lrSUBS pc,lr,#4各种异常中断的处理23Undefined Instruction(未定义指令)当当ARMARM处理器遇到不能处理的指令时,会产生未定义指令异处理器遇到不能处理的指令时,会产生未定义指令异常。采用这种机制,可以通过软件仿真扩展常。采用这种机制,可以通过软件仿真扩展ARMARM或或ThumbThumb指指令集。令集。处理器执行以下程序返回,无论是在处理器执行以下程序返回,无论是在ARMARM状态还是状态还是ThumbThumb状态:状态:MOVS PC,R14_undMOVS PC,R14_und以上指令恢复以上指令恢复PCPC(从从R14_undR14_und)和和CPSRCPSR(从从SPSR_undSPSR_und)的值,的值,并返回到未定义指令后的下一条指令。并返回到未定义指令后的下一条指令。各种异常中断的处理24SWI(软件中断)软件中断指令(软件中断指令(SWISWI)用于进入管理模式,常用于请求执行用于进入管理模式,常用于请求执行特定的管理功能。软件中断处理程序执行以下指令可以从特定的管理功能。软件中断处理程序执行以下指令可以从SWISWI模式返回,无论是在模式返回,无论是在ARMARM状态还是状态还是ThumbThumb状态:状态:MOVS PC,R14_svcMOVS PC,R14_svc以上指令恢复以上指令恢复PCPC(从从R14_svcR14_svc)和和CPSRCPSR(从从SPSR_svcSPSR_svc)的值,的值,并返回到并返回到SWISWI的下一条指令。的下一条指令。各种异常中断的处理25SWI一级处理程序STMFDsp!,r0-r12,lrLDR r0,lr,#-4BICr0,r0,#0 xFF000000在此调用二级处理程序LDMFDsp!,r0-r12,lr各种异常中断的处理26SWI二级处理程序CMPr0,#maxSWILDRLSpc,pc,r0,LSL#2B SWIOutofRangeSWIJmpTable:.LONGSWInum0.LONGSWInum1.LONGSWInum2各种异常中断的处理27异常进入/退出小节 返回指令返回指令以前的状态以前的状态注意注意ARMR14_xThumbR14_xBLMOVPC,R14PC4PC21SWIMOVSPC,R14_svcPC4PC21UDEFMOVSPC,R14_undPC4PC21FIQSUBSPC,R14_fiq,4PC4PC42IRQSUBSPC,R14_irq,4PC4PC42PABTSUBSPC,R14_abt,4PC4PC41DABTSUBSPC,R14_abt,8PC8PC83RESETNA4各种异常中断的处理28注意事项1.1.在在此此PC应应是是具具有有预预取取中中止止的的BL/SWI/未未定定义义指指令令所所取取的地址。的地址。2.2.在此在此PC是从是从FIQ或或IRQ取得不能执行的指令的地址。取得不能执行的指令的地址。3.3.在此在此PC是产生数据中止的加载或存储指令的地址。是产生数据中止的加载或存储指令的地址。4.4.系统复位时,保存在系统复位时,保存在R14_svc中的值是不可预知的。中的值是不可预知的。各种异常中断的处理29