ARM教学系统-06 异常中断处理_第1页
ARM教学系统-06 异常中断处理_第2页
ARM教学系统-06 异常中断处理_第3页
ARM教学系统-06 异常中断处理_第4页
ARM教学系统-06 异常中断处理_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1提纲132ARM异常中断处理概述中断处理程序的安装第六章异常中断处理异常的响应和退出各种异常中断的处理42ARM异常中断处理概述当正常的程序执行流程发生暂时的停止时,称之为异常,例如处理一个外部的中断请求。在处理异常之前,当前处理器的状态必须保留,这样当异常处理完成之后,当前程序可以继续执行。处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。ARM体系结构中的异常,与8位/16位体系结构的中断有很大的相似之处,但异常与中断的概念并不完全等同。

ARM异常中断处理概述3ARM体系结构所支持的异常类型

异常类型具体含义复位复位电平有效时,产生复位异常,程序跳转到复位处理程序处执行。未定义指令遇到不能处理的指令时,产生未定义指令异常。软件中断执行SWI指令产生,用于用户模式下的程序调用特权操作指令。指令预取中止处理器预取指令的地址不存在,或该地址不允许当前指令访问,产生指令预取中止异常。数据中止处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。IRQ外部中断请求有效,且CPSR中的I位为0时,产生IRQ异常。FIQ快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。ARM异常中断处理概述4异常向量表(ExceptionVectors)

地址异常进入模式0x0000,0000复位管理模式0x0000,0004未定义指令未定义模式0x0000,0008软件中断管理模式0x0000,000C中止(预取指令)中止模式0x0000,0010中止(数据)中止模式0x0000,0014保留保留0x0000,0018IRQIRQ0x0000,001CFIQFIQARM异常中断处理概述5异常优先级(ExceptionPriorities)

优先级异常1(最高)复位2数据中止3FIQ4IRQ5预取指令中止6(最低)未定义指令、SWIARM异常中断处理概述6对异常的响应

对异常的响应当一个异常出现以后,ARM微处理器会执行以下几步操作将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。将CPSR复制到相应的SPSR(各异常中断有自己的物理寄存器中)。根据异常类型,强制设置CPSR的运行模式位。将寄存器R14_<Exception_Mode>设置成返回地址。强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。

7异常响应伪代码处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。ARM微处理器对异常的响应过程用伪码可以描述为:对异常的响应R14_<Exception_Mode>=ReturnLinkSPSR_<Exception_Mode>=CPSRCPSR[4:0]=ExceptionModeNumberCPSR[5]=0;ARM状态If<Exception_Mode>==ResetorFIQthenCPSR[6]=1 ;禁止FIQ中断

CPSR[7]=1;禁止IRQ中断

PC=ExceptionVectorAddress8从异常返回

异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:将连接寄存器LR的值减去相应的偏移量后送到PC中。将SPSR复制回CPSR中。若在进入异常处理时设置了中断禁止位,要在此清除。 可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。

对异常的响应9中断处理程序的安装一般在系统的启动代码中安装异常处理程序。大致可以分为两种情况:0地址处存储器为ROM/FLASH0地址处存储器为RAM中断处理程序的安装10在ROM/FLASH中安装中断处理程序在ROM/FLASH的异常中断向量表中,可以使用LDR指令直接向程序计数器PC中赋值,也可以直接使用跳转指令转到异常中断处理程序。使用LDR指令:Vector_entry: LDR PC,=Reset_Handler LDR PC,=Undef_Handler LDR PC,=SWI_Handler 中断处理程序的安装11在ROM/FLASH中安装中断处理程序 LDR PC,=Prefetch_Handler LDR PC,=Abort_HandlerNOP LDR PC,=IRQ_Handler LDR PC,=FIQ_HandlerVector_tabler:Reset_Handler:.LONG Start_BootUndef_Handler:.LONG Undef_Isr……中断处理程序的安装12在ROM/FLASH中安装中断处理程序使用跳转指令(只能在32MB范围内跳转):Vector_entry: B Reset_Handler B Undef_Handler B SWI_Handler B Prefetch_Handler B Abort_HandlerNOP B IRQ_Handler B FIQ_Handler中断处理程序的安装13RAM中安装中断处理程序当0地址处为RAM时,中断向量表必须使用数据读取指令直接指向PC中赋值的形式。而且必须使用下面的代码把中断向量从ROM中复制到RAM地址的0地址处的存储空间中。

MOV r8,#0;r8指向RAM的0地址

ADR r9,Vector_Init_Block;r9指向ROM的中断向量表;复制中断向量表(8word)

LDMIA r9!,{r0-r7} STMIA r8!,{r0-r7}

中断处理程序的安装14ABORT(中止)

产生中止异常意味着对存储器的访问失败。ARM微处理器在存储器访问周期内检查是否发生中止异常。中止异常包括两种类型:指令预取中止:发生在指令预取时。数据中止:发生在数据访问时。各种异常中断的处理15指令预取异常中断的处理系统中不包含MMU时,指令预取中止异常处理程序只是简单的报告错误,然后退出;在使用MMU的系统中,则发生错误的指令触发虚拟地址失效,在该失效处理程序中重新读取该指令。指令预取异常是在有错误的指令被执行时才触发的。当异常发生时,LR_abt寄存器没有被更新,它指向引起该指令的后面1条指令。异常的返回地址应该是该有问题的指令,即LR_abt-4处。各种异常中断的处理16数据访问异常中断的处理系统中不包含MMU时,数据访问中止异常处理程序只是简单的报告错误,然后退出;在使用MMU的系统中,数据访问中止异常处理程序要处理该数据访问异常。当异常发生时,LR_abt寄存器已经被更新,它指向引起该异常的指令的后面2条指令。异常的返回地址是引起数据访问中止异常中断的指令,即LR_abt-8处。各种异常中断的处理17ABORT(中止)处理函数的退出当确定了中止的原因后,Abort处理程序均可以执行以下指令从中止模式返回,无论是在ARM状态还是Thumb状态:

SUBSPC,R14_abt,#4 ;指令预取中止

SUBSPC,R14_abt,#8 ;数据中止各种异常中断的处理18FIQ(FastInterruptRequest)FIQ异常是为了支持高速数据传输或者通道处理而设计的。若将CPSR的F位置为1,则会禁止FIQ中断,若将CPSR的F位清零,处理器会在指令执行时检查FIQ的输入。注意只有在特权模式下才能改变F位的状态。

可由外部通过对处理器上的nFIQ引脚输入低电平产生FIQ。不管是在ARM状态还是在Thumb状态下进入FIQ模式,FIQ处理程序均可以执行以下指令从FIQ模式返回:

SUBSPC,R14_fiq,#4各种异常中断的处理19IRQ(InterruptRequest)

IRQ异常属于正常的中断请求,通过对处理器的nIRQ引脚输入低电平产生,IRQ的优先级低于FIQ,当程序执行进入FIQ异常时,IRQ可能被屏蔽。若将CPSR的I位置为1,则会禁止IRQ中断,若将CPSR的I位清零,处理器会在指令执行完之前检查IRQ的输入。注意只有在特权模式下才能改变I位的状态。不管是在ARM状态还是在Thumb状态下进入IRQ模式,IRQ处理程序均可以执行以下指令从IRQ模式返回:

SUBSPC,R14_irq,#4各种异常中断的处理20IRQ/FIQ处理程序示例STMFD sp!, {r0-r12,lr}//进栈调用IRQ/FIQ处理程序LDMFD sp!, {r0-r12,lr}//出栈SUBS pc, lr,#4各种异常中断的处理21UndefinedInstruction(未定义指令)当ARM处理器遇到不能处理的指令时,会产生未定义指令异常。采用这种机制,可以通过软件仿真扩展ARM或Thumb指令集。处理器执行以下程序返回,无论是在ARM状态还是Thumb状态:

MOVSPC,R14_und以上指令恢复PC(从R14_und)和CPSR(从SPSR_und)的值,并返回到未定义指令后的下一条指令。各种异常中断的处理22SWI(软件中断)

软件中断指令(SWI)用于进入管理模式,常用于请求执行特定的管理功能。软件中断处理程序执行以下指令可以从SWI模式返回,无论是在ARM状态还是Thumb状态:

MOVSPC,R14_svc

以上指令恢复PC(从R14_svc)和CPSR(从SPSR_svc)的值,并返回到SWI的下一条指令。各种异常中断的处理23SWI一级处理程序 AREAToplevelSwi,CODE,READONLY EXPORTSWI_HandlerSWI_Handler:

STMFDsp!, {r0-r12,lr};保存寄存器

LDRr0, [lr,#-4];计算该SWI指令的地址,并把它读取到寄存器R0中。

BIC r0, r0, #0xFF000000;将SWI指令中的24位立即数存放到R0寄存器中 ;在此调用二级处理程序

LDMFD sp!,{r0-r12,pc}^;返回,SPSR_mode自动恢复到CPSR中

END各种异常中断的处理24SWI二级处理程序 CMP r0,#maxSWI LDRLS pc,[pc,r0,LSL#2] B SWIOutofRangeSWIJmpTable: DCB SWInum0 DCB SWInum1 DCB SWInum2 ……SWInum0:

……;立即数为0对应的SWI中断处理程序

BEndofSWISWInum1:

……;立即数为1对应的SWI中断处理程序

BEndofSWI……各种异常中断的处理25异常进入/退出小节

返回指令以前的状态注意ARMR14_xThumbR14_xBLMOVPC,R14PC+4PC+21SWIMOVSPC,R14_svcPC+4PC+21UDEFMOVSPC,R14_undPC+4PC+21FIQSUBSPC,R14_fiq,#4PC+4PC+42IRQSUBSP

温馨提示

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

评论

0/150

提交评论