欢迎来到天天文库
浏览记录
ID:48732370
大小:314.00 KB
页数:39页
时间:2020-01-20
《ADS异常处理.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、异常处理Agenda序言中断处理软中断(SWI)处理其它异常处理VectorTableVectortablecanbeat0xFFFF0000onARM720TandonARM9/10familydevicesFIQIRQ(Reserved)DataAbortPrefetchAbortSoftwareInterruptUndefinedInstructionReset0x1C0x180x140x100x0C0x080x040x00异常处理当异常产生时,ARMcore:拷贝CPSR到SPSR_设置适当的CPSR位:改变处理器状态进
2、入ARM状态改变处理器模式进入相应的异常模式设置中断禁止位禁止相应中断(如果需要)保存返回地址到LR_设置PC位相应的异常向量返回时,异常处理需要:从SPSR_恢复CPSR从LR_恢复PCNote:这些操作只能在ARM态执行.从SWI和Undef异常返回MOVSpc,lr从FIQ,IRQ和预取异常(PrefectAbort)返回SUBSpc,lr,#4从数据异常(DataAbort)返回SUBSpc,lr,#8如果LR之前被压栈的话使用LDM“^”LDMFDsp!,{pc}^异常返回:使用一数据处理指令:相应
3、的指令取决于什么样的异常在特权模式不仅仅更新PC,而且拷贝SPSR到CPSR设置CPSR,“S”bitPC做为目的寄存器异常返回指令Seeendofpresentationforbackgroundinformationontheseinstructions异常优先级异常在当前指令执行完成之后才被响应多个异常可以在同一时间产生异常指定了优先级和固定的服务顺序:ResetDataAbortFIQIRQPrefetchAbortSWIUndefinedinstruction向量表指令>32Mbytes<4KbytesLiteralpoolcont
4、ainingaddressofUndefHandlerIRQhandlerwithin32MBytesBranchinstructionrangeSWIExceptionhandlerplacedonapplicableaddressboundaryFIQhandlerfollowsvectortableUndefhandleroutside32MBytesbranchinstructionrange0x00x10000x20000000xFFC0x80x180x300000000xFFFFFFFF0x1C0x4MOVPC,#0x30000
5、000BIRQ_handler0x30008000IRQHandlerSWIHandlerFIQHandlerLDRPC,[PC,#+0xFF0]UndefHandler0x30008000ARMorThumb?Thumb/ARM混合应用程序ARMCodeARMCodeThumbCodeFIQIRQ(Reserved)DataAbortPrefetchAbortSoftwareInterruptUndefinedInstructionReset异常处理中的寄存器使用与异常发生相关的模式改变意味着所调用的异常处理程序至少要访问:私有的SP_6、ode>(stackpointer).私有的LR_(linkregister).私有的SPSR_(savedprogramstatusregister).在FIQ异常处理中,另有5个私有的通用寄存器(r8_fiqtor12_fiq).其它的寄存器是所有模式公用的.异常处理程序必须确保其他的寄存器在退出前恢复到原来的状态这可以通过将任何正在使用的寄存器的内容保存在堆栈中,并在返回前恢复来实现任何所需寄存器的初始化要有应用程序的起始代码来完成,参阅:“EmbeddedSoftwareDevelopment”Agenda序言中7、断处理软中断(SWI)处理其它异常处理中断处理ARM有两级外部中断FIQ,IRQ.可是大多数的基于ARM的系统有>2个的中断源!因此需要一个中断控制器(通常是地址映射的)来控制中断是怎样传递给ARM的。在许多系统中,一些中断的优先级比其它中断的优先级高,他们要抢先任何正在处理的低优先级中断。Note:通常中断处理程序总是应该包含清除中断源的代码。地址映射中断控制器nIRQnFIQARMMultiplePeripheralinterruptsourcesARM读控制器寄存器并找到IRQ/FIQ中断源ARM写外设寄存器清相应中断源FIQvsI8、RQFIQ和IRQ提供了非常基本的优先级级别。在下边两种情况下,FIQs有高于IRQs的优先级:当多个中断产生时,FIQ高于IRQ.处理FIQ时禁止I
6、ode>(stackpointer).私有的LR_(linkregister).私有的SPSR_(savedprogramstatusregister).在FIQ异常处理中,另有5个私有的通用寄存器(r8_fiqtor12_fiq).其它的寄存器是所有模式公用的.异常处理程序必须确保其他的寄存器在退出前恢复到原来的状态这可以通过将任何正在使用的寄存器的内容保存在堆栈中,并在返回前恢复来实现任何所需寄存器的初始化要有应用程序的起始代码来完成,参阅:“EmbeddedSoftwareDevelopment”Agenda序言中
7、断处理软中断(SWI)处理其它异常处理中断处理ARM有两级外部中断FIQ,IRQ.可是大多数的基于ARM的系统有>2个的中断源!因此需要一个中断控制器(通常是地址映射的)来控制中断是怎样传递给ARM的。在许多系统中,一些中断的优先级比其它中断的优先级高,他们要抢先任何正在处理的低优先级中断。Note:通常中断处理程序总是应该包含清除中断源的代码。地址映射中断控制器nIRQnFIQARMMultiplePeripheralinterruptsourcesARM读控制器寄存器并找到IRQ/FIQ中断源ARM写外设寄存器清相应中断源FIQvsI
8、RQFIQ和IRQ提供了非常基本的优先级级别。在下边两种情况下,FIQs有高于IRQs的优先级:当多个中断产生时,FIQ高于IRQ.处理FIQ时禁止I
此文档下载收益归作者所有