异常中断处理ppt课件_第1页
异常中断处理ppt课件_第2页
异常中断处理ppt课件_第3页
异常中断处理ppt课件_第4页
异常中断处理ppt课件_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第9章 异常中断处置o9.1 ARM异常中断处置概述o控制程序的执行流程有3种方式:o正常情况下,程序每执行一条指令,程序计数器存放器pc将添加4或2字节;o经过跳转指令,程序可以跳转到特定的地址标号处执行,或者跳转到特定的子程序处执行;oB指令oBL指令oBLX指令,BX指令o当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处置程序处执行。异常中断名称含义复位当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处理程序处执行。未定义指令当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机制进行软件仿真。软件中断(SWI)该异常由执行SWI指令产

2、生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用。指令预取中止若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。数据访问中止若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。外部中断请求(IRQ )当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务。快速中断请求( FIQ )当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。o9.1.1 ARM体系中异常中断种类o中断

3、向量表指定了各异常中断及其处置程序的对应关系,通常放在内存的低地址端。o在ARM体系中,异常中断向量表的大小为32字节,其中每个异常中断占据4个字节,保管4个字节。o每个异常中断对应的中断向量表中的4个字节空间中存放一条跳转指令或者一条向PC存放器中赋值的数据访问指令。o9.1.2 异常中断向量表及异常中断优先级o各异常中断的中断向量地址及其异常中断处置优先级表中断向量地址异常中断类型异常中断模式优先级*0 x0复位特权模式(SVC)10 x4未定义的指令未定义指令中止模式(Undef)60 x8软件中断(SWI)特权模式(SVC)60 x0c指令预取中止中止模式50 x10数据访问中止中止模

4、式20 x14保留未使用未使用0 x18外部中断请求(IRQ)外部中断(IRQ)模式40 x1c快速中断请求(FIQ)快速中断(FIQ)模式3*注:1最高;6最低o9.1.3 异常中断运用的存放器o各异常中断对应着一定的处置器方式。o运用程序通常运转在用户方式下。o各种不同的处置器方式对应于该处置器方式的物理存放器组。异常处置中的存放器运用o与异常发生相关的方式改动意味着所调用的异常处置程序至少要访问:o私有的 SP_ (stack pointer ).o私有的 LR_ (link register).o私有的 SPSR_ (saved program status register ).o在

5、 FIQ异常处置中, 另有5个私有的通用存放器 (r8_fiq to r12_fiq).o其它的存放器是一切方式公用的.o异常处置程序必需确保其他的存放器在退出前恢复到原来的形状o这可以经过将任何正在运用的存放器的内容保管在堆栈中,并在前往前恢复来实现o任何所需存放器的初始化要由运用程序的起始代码来完成,参阅: “Embedded Software Developmento 处理器模式描述用户模式(usr)正常程序执行的模式快速中断模式(fiq)用于高速数据传输或通道处理外部中断模式(irq)用于通用的中断处理特权模式(svc)供操作系统使用的保护模式(复位或软中断)中止模式(abt)当数据或

6、指令预取终止时进入该模式,可用于虚拟存储及存储保护。未定义指令中止模式(und)当未定义的指令执行时进入该模式,可用于支持通过软件仿真硬件的协处理器。 系统模式(sys) 用于运行具有特权级的操作系统任务。ARM中的处置器方式Vector TableVector table can be at 0 xFFFF0000 on ARM720T and on ARM9/10 family devicesFIQIRQ(Reserved)Data AbortPrefetch AbortSoftware InterruptUndefined InstructionReset0 x1C0 x180 x140

7、 x100 x0C0 x080 x040 x00o当异常产生时, ARM core:o拷贝 CPSR 到 SPSR_o设置适当的 CPSR 位: o改动处置器形状进入 ARM 形状o改动处置器方式进入相应的异常方式o设置中断制止位制止相应中断 (假设需求)o保管前往地址到 LR_o设置 PC 位相应的异常向量o前往时, 异常处置需求:o从 SPSR_恢复CPSRo从LR_恢复PC oNote:这些操作只能在 ARM 态执行.o2.9 进入和退出异常中断的过程 oARM微处置器对异常的呼应过程用伪码可以描画为:oR14_ = Return LinkoSPSR_ = CPSRoCPSR4:0 =

8、Exception Mode NumberoCPSR5 = 0 ;当运转于ARM任务形状时oIf = Reset or FIQ thenoCPSR6 = 1 ;当呼应FIQ异常时,制止新的FIQ异常 oCPSR7 = 1 ;制止新的IRQ异常oPC = Exception Vector Address o各种中断呼应的伪代码参见教材P.265-268o9.2.2 从异常中断处置程序中前往o从异常中断处置程序中前往包括以下两个根本操作: o1、恢复被中断的程序的处置器形状,即将SPSR_mode存放器内容复制到当前程序形状存放器CPSR中。o2、前往到发生异常中断的指令的下一条指令执行,即将lr

9、_mode存放器的内容复制到程序计数器PC中。o复位异常中断处置程序不需求前往,整个运用系统是从复位异常中断处置程序开场执行的。SUBS PC,R14_fiq ,#4或 MOV PC , R14_svc异常前往指令o从SWI 和 Undef异常前往oMOVS pc,lro从FIQ, IRQ 和 预取异常(Prefect Abort)前往oSUBS pc,lr,#4oo从数据异常( Data Abort)前往oSUBS pc,lr,#8o假设 LR之前被压栈的话运用LDM “ oLDMFD sp!,pco异常前往:o运用一数据处置指令:o相应的指令取决于什么样的异常o在特权方式不仅仅更新PC,而

10、且 拷贝SPSR 到 CPSR设置CPSR, “S bitPC做为目的存放器向量表指令Literal pool containing address of Undef HandlerIRQ handler within 32MBytes Branch instruction rangeSWI Exception handler placed on applicable address boundaryFIQ handler follows vector table Undef handler outside 32MBytes branch instruction range 32 Mbytes

11、2个的中断源!o因此需求一个中断控制器(通常是地址映射的)来控制中断是怎样传送给ARM的。o在许多系统中,一些中断的优先级比其它中断的优先级高,他们要抢先任何正在处置的低优先级中断。oNote: 通常中断处置程序总是应该包含去除中断源的代码。地址映射地址映射中断控制器中断控制器nIRQnFIQARMMultiplePeripheralinterruptsourcesARM读控制器存放器并找到IRQ/FIQ中断源ARM写外设存放器清相应中断源FIQ vs IRQoFIQ 和 IRQ 提供了非常根本的优先级级别。o在下边两种情况下,FIQs有高于IRQs的优先级:o当多个中断产生时,FIQ高于IR

12、Q.o处置 FIQ时制止 IRQs.oIRQs 将不会被呼应直到 FIQ处置完成.oFIQs 的设计使中断处置尽能够的快.oFIQ 向量位于中断向量表的最末.o为了使中断处置程序可从中断向量处延续执行oFIQ 方式有5个额外的私有存放器 (r8-r12)o中断处置必需维护其运用的非私有存放器o可以有多个FIQ中断源,但是思索到系统性能应防止嵌套。C言语简单中断处置程序o在C中可以在函数定义时运用关键词 “_irq来写一个简单的中断处置程序. o这将导致: o函数一切用到的存放器被维护 o假设能够, 任何远程调用所运用的其他存放器也被维护o函数退出运用正确的前往指令(修正 pc = lr-4 并

13、从 spsr恢复cpsr)o_irq 仅仅可在 armcc中运用.o可是被_irq 函数调用的子程序可以用 tcc编译.o确保 IRQ的堆栈指针曾经设置 !C 中断处置例如_irq void IRQHandler (void) volatile unsigned int *source = (unsigned int *)0 x80000000; if (*source = 1)/ which interrupt was itint_handler_1();/ process the interrupt / insert checks for other interrupt sources h

14、ere *(source+1) = 0;/ clear the interruptOutput without _irq Output with _irq STMFD sp!,r4,lr STMFD sp!,r0-r4,r12,lrMOV r4,#0 x80000000 MOV r4,#0 x80000000LDR r0,r4,#0 LDR r0,r4,#0CMP r0,#1 CMP r0,#1BLEQ int_handler_1 BLEQ int_handler_1MOV r0,#0 MOV r0,#0 dfg STR r0,r4,#4 STR r0,r4,#4LDMFD sp!,r4,pc

15、 LDMFD sp!,r0-r4,r12,lr SUBS pc,lr,#4C 中断处置例如_irq void IRQHandler (void)volatile unsigned int *source = (unsigned int *)0 x80000000; if (*source = 1) / which interrupt was it?int_handler_1(); / process the interrupt / insert checks for other interrupt sources here *(source+1) = 0;/ clear the interru

16、ptn Output without _irq Output with _irqSTMFD sp!,r4,lrMOV r4,#0 x80000000LDR r0,r4,#0CMP r0,#1LEQ int_handler_1MOV r0,#0STR r0,r4,#4LDMFD sp!,r4,pcSTMFD sp!,r0-r4,r12,lrMOV r4,#0 x80000000LDR r0,r4,#0CMP r0,#1BLEQ int_handler_1MOV r0,#0STR r0,r4,#4LDMFD sp!,r0-r4,r12,lrSUBS pc,lr,#4中断重新使能的问题o当另外一个中

17、断抢先当前中断时,假设程序员运用下边特殊的步骤来防止系统形状丧失 ,中断是可以嵌套:o保管IRQ形状下的LR LR_irq o保管IRQ形状下的SPSRSPSR_IRQo当中断可重入时,在中断处置程序中运用“BL必需特别小心:o假设第二个中断产生,BL调用的前往地址 (LR_irq) 能够被冲掉,子程序将错误的前往 导致无限循环!o处理方法是在运用“BL之前改动方式来防止 LR_irq 被冲掉o通常运用“System方式 ( 这时 BL 运用 LR_usr)o在处置程序终了,必需:o切换回 IRQ 方式 o制止中断 (来防止在恢复SPSR_irq 到一个暂时的存放器中后它被冲掉).o_irq

18、不能用来写可重入中断处置程序o必需采用采用下页中汇编代码段来替代。C 可重入中断例如IRQHandler SUBlr, lr, #4 STMFDsp!, lr MRSr14, SPSR STMFDsp!, r12, r14 MOVr12, #IntBase LDRr12, r12, #IntSource MRSr14, CPSR BICr14, r14, #0 x9F ORRr14, r14, #0 x1F MSRCPSR_c, r14 STMFDsp!, r0-r3, lr MOVr0,r12 BLC_irq_handler LDMFDsp!, r0-r3, lr MRSr12, CPSR

19、BICr12, r12, 0 x1F ORRr12, r12, 0 x92 MSRCPSR_c, r12 LDMFDsp!, r12, r14 MSRSPSR_csxf, r14 LDMFDsp!, PC切换到 IRQ 方式同时制止 IRQ.LR_irq , SPSR_irq 和任务存放器 (r12) 压栈维护来防止下一次中断发生使它们被冲掉保管R0-3, LR_user 到 user 栈中, 然后调用 C 子程序,中断源(R0)作为一个参数传入 C 处置函数。恢复LR_irq , SPSR_irq 和任务存放器 (r12) ,然后退出中断处置运用修正后的LR读 / 清中断控制器中断源切换到

20、System 方式同时使能 IRQ复位(reset)oReset 处置程序执行的动作取决于不同的系统. 例如它可以:o设置异常向量o初始化存储器系统 (e.g. MMU/PU)o初始化一切需求的方式的堆栈和存放器 o初始化一切 C 所需的变量o初始化一切I/O设备o使能中断o改动处置器方式或/和形状o调用主运用程序o详细资料请参考 “Embedded Software Development 模块.未定义指令o以下情况将引起未定义指令异常:oARM 试图执行一真正的未定义指令oARM 遇到一协处置器指令,可是系统中的协处置器硬件并不存在oARM 遇到一协处置器指令,系统中协处置器硬件也存在,可

21、是ARM 不是在超级用户方式(privileged mode)o例如:操作协处置器15(cp15) - ARM cache 控制器o处理方法:o在处置程序中执行软协处置器仿真o制止在非超级用户方式下操作o报告错误并退出预取异常o不论异常是发生在 ARM 还是Thumb 形状下,导致预取异常的指令地址在 lr-4 处.o处置方法取决于存储器管理战略o有存储器管理的系统 (e.g. demand paged virtual memory)o修正问题 (e.g. enable correct memory page)o前往并重新执行预取异常的指令( SUBS pc,lr,#4 )o没有存储器管理的系

22、统o通常表示一个致命的错误o报告错误 (假设能够) 然后退出数据异常o导致异常的指令的地址在 lr-8 处.o处置方法取决于存储器管理战略o有存储器管理的系统(e.g. demand-paged virtual memory)o假设运用了 MMU ,数据异常的地址在 MMU 的 “Fault Address 存放器中o修正问题(e.g. enable correct page of memory)o前往并重新执行数据异常的指令oSUBS pc,lr,#8o没有存储器管理的系统o通常表示一个致命的错误o报告错误 (假设能够) 然后退出The Abort Modelo许多ARM 存储器存取指令将更

23、新基址存放器 :oe.g. LDR r0,r1,#8!;“! 将更新 R1o假设异常是数据异常, 对基址存放器的影响取决于运用的是哪种 ARM core.o“Base Restored Abort ModeloStrongARM, ARM9 and ARM10 系列支持o基址存放器由ARM core 自动恢复.o“Base Updated Abort ModeloARM7TDMI 系列支持o在异常指令重新执行之前基址存放器必需由处置程序进展恢复o两种方式的例子程序包含在 ADS examples 目录下。异常前往地址oARM 形状:o在异常产生的时候内核设置 LR_mode = PC - 4.

24、o处置程序需求调整 LR_mode (取决于是哪一个异常发生了),以便前往到正确的地址oThumb 形状:o处置器根据发生的异常自动修正存在 LR_mode 中的地址o不论异常产生时的形状如何,处置器确保处置程序的ARM 前往指令能前往到正确的地址(和正确的形状)从SWIs和未定义指令前往o异常是由指令本身引起的,因此内核在计算 LR 时的 PC 值并没有被更新.o ARM Thumbo SWIpc-8 pc-4 ;Exception taken hereo xxx pc-4 pc-2 ;lr = next instructiono yyy pc pco因此前往指令为:oMOVS pc,lro

25、Note : 表示异常前往后将执行的那条指令从FIQs和IRQs前往o异常在当前指令执行完成后才被呼应.因此内核在计算 LR 时的 PC 值已被更新.o o ARM Thumbo www pc - 12 pc 6 Interrupt occurred during execution o xxx pc - 8 pc - 4o yyy pc 4 pc 2 ARM lr = next instructiono zzz pc pc Thumb lr = two instructions aheado因此前往指令为:oSUBS pc,lr,#4oNote : 表示异常前往后将执行的那条指令从预取异常前

26、往o当指令到达执行阶段时异常才产生,因此内核在计算 LR 时的 PC 值已被更新.o需求重新执行导致异常的指令o ARM Thumbo www pc - 8 pc - 4 Prefetch Abort occurred hereo xxx pc - 4 pc - 2 ARM lr = next instructiono yyy pc pc Thumb lr = two instructions aheado因此前往指令为:oSUBS pc,lr,#4oNote : 表示异常前往后将执行的那条指令从数据异常前往o异常发生 ( 和计算 LR ) 在 PC 被更新之后.o需求重新执行导致异常的指令oARM Thumbo www pc - 12pc - 6 Da

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论