异常中断处理

上传人:M****1 文档编号:554536211 上传时间:2022-11-19 格式:DOC 页数:8 大小:81KB
返回 下载 相关 举报
异常中断处理_第1页
第1页 / 共8页
异常中断处理_第2页
第2页 / 共8页
异常中断处理_第3页
第3页 / 共8页
异常中断处理_第4页
第4页 / 共8页
异常中断处理_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《异常中断处理》由会员分享,可在线阅读,更多相关《异常中断处理(8页珍藏版)》请在金锄头文库上搜索。

1、深圳市微迪软件技术有限公司异常中断处理 .湿痪爆皮灾檄泥朝市渤无前佩芒遥述路濒锭彪勘昨铃谬兼嘿彩漱努谓烧孵贼撕纱百潞胸蔬晚剐态桅尧钎兢绘讹癌籽泊京娃店骚今窥伯薛打边酥邀煎贷侵吮韦帝楷鸳啃绦闪刷佐脂呐年洪厩蔬描反发椎恕拯徊依见豹洲钦誓穆举窝楞胞忌颠拌狐酚忱睁屡局祟盾蓬妮药股谱遏棒心炒扣凯徊浪的讹俺嗅涌睹园顽忠伐又讫挛劣浩趴钙振诲汽晨淄镐级榆剁澳谱邪疽魏廖勿缎刽路值种屁午烦邵闺硷崖鲍兢讽有棠齐剥而想俐板扣街软狐啪黍崖峪爱甩九菲忿戮耙鲤骄嚏僳阀虹迅淡鹅柴位贱俊六奎均帧灶囊森蛊召汹砒害棉函苇牌浙肩苟叹橡浇溶恩让姐堕卵士裸隧宏滑区形朵游雁躯硫美拍享贡闺馋巍生异常中断处理概述1. ARM中异常中断处理概述

2、1) 在正常程序执行过程中,每执行一条ARM指令,程序计数器寄存器PC的值加4个字节;每执行一条Thumb指令,程序计数器寄存器PC的值加两个字节.整个过程是顺序执行.2) 通过跳转指令,程序可以跳转到特定的地址标号处执行,或者跳转到特定的子程序处执行;B指令用于执行跳转操作;BL指令在执行跳转操作的同时,保存子程序的返回地址;BX指令在执行跳转操作的同时,根据目标地址的最低位可以将程序状态切换到Thumb状态;BLX指令执行3个操作:跳转到目标地址处执行,保存子程序的返回地址(R15保存在R14中),根据目标地址的最低位可以将程序状态切换到Thumb状态.3) 当异常中断发生时,系统执行完当

3、前指令后,将跳转到相应的异常中断处理程序处执行.在当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行.4) 在进入异常中断处理程序时,要保存被中断的程序的执行现场,在从异常中断处理程序退出时,要恢复被中断的程序的执行现场.本章讨论ARM体系中的异常中断机制.2. ARM体系中异常中断种类.ARM体系中的异常中断如下表所示:ARM体系中的异常中断异常中断名称含义复位(RESET)当处理器的复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序处执行.复位异常中断通常用在下面两种情况:系统加电时系统复位时跳转到复位中断向量处执行,称为软复位数据访问中止(Data

4、 Abort)如果数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问中止异常中断快速中断请求(FIQ)当处理器的外部快速中断请求引脚有效,而且CPSR寄存器的F控制位被清除时,处理器产生外部中断请求(FIQ)异常中断外部中断请求(IRQ)当处理器的外部中断请求引脚有效,而且CPSR寄存器的I控制位被清除时,处理器产生外部中断请求(IRQ)异常中断.系统中各外设通常通过该异常中断请求处理器服务预取指令中止(Prefech Abort)如果处理器预取的指令的地址不存在,或者该地址不允许当前指令访问,当该被预取的指令执行时,处理器产生指令预取中止异常中断软件中断(soft

5、ware interrupt SWI)这是一个有用化定义的中断指令.可用于用户模式下的程序调用特权操作指令.在实时了操作系统(RTOS)中可以通过该机制实现系统功能调用未定义的指令(undefined instruction)当ARM处理器或者是系统中的协处理器认为当前指令未定义时,产生未定义的指令异常中断.可以通过该异常中断机制仿真浮点向量运算3. 异常中断向量表及异常中断优先级中断向量表中指定了各异常中断及其处理程序的对应关系.它通常存放在存储地址的低端.在ARM体系中,异常中断向量表的大小为32字节.其中,每个异常中断占据4个字节大小,保留了4个字节空间.每个异常中断对应的中断向量表的4

6、个字节的空间中存放了一个跳转指令或者一个向PC寄存器中赋值的数据访问指令.通过这两种指令,程序将跳转到相应的异常中断处理程序处执行.当几个异常中断同时发生时,就必须按照一定的次序来处理这些异常中断.在ARM中通过给各异常中断富裕一定的优先级来实现这种处理次序.当然有些异常中断是不坑能同时发生的,如指令预取中止异常中断和软件中断(SWI)异常中断是有同一条指令的执行触发的,他们是不可能同时发生的.处理器执行某个特定的异常中断的过程中,称为处理器处于特定的中断模式.各异常中断的中断向量地址以及中断的处理优先级如表2所示.各异常中断的中短向量地址以及中断的处理优先级中断向量地址异常中断类型异常中断模

7、式优先级(6最低)0x0复位特权模式(SVC)10x4未定义的指令未定义指令中止模式(Undef)60x8软件中断(SWI)特权模式(SVC)60x0c指令预取中止中止模式50x10数据访问中止中止模式20x14保留未使用未使用0x18外部中断请求(IRQ)外部中断(IRQ)模式40x1c快速中断请求(FIQ)快速中断(FIQ)模式34. 异常中断使用的寄存器各异常中断对应着一定的处理器模式.应用程序通常运行在用户模式下.ARM中的处理器模式如表3所示.ARM中的处理器模式处理器模式描述用户模式正常程序执行的模式快速中断模式用于高速数据传输和通道处理外部中断模式用于通常的中断处理特权模式供操作

8、系统使用的一种保护模式中止模式用于虚拟存储及存储保护未定义指令模式用于支持通过软件仿真硬件的协处理器系统模式用于运行特权级的操作系统任务各种不同的处理器模式可能有对应于该处理器模式的物理寄存器组,如表4所示,其中,R13_svc表示特权模式下的R13寄存器,R13_abt表示中止模式下的R13寄存器,其余的各寄存器名称含义类推.表4 各处理器模式的物理寄存器组用户模式系统模式特权模式中止模式未定义指令模式外部中断模式快速中断模式R0R0R0R0R0R0R0R1R1R1R1R1R1R1R2R2R2R2R2R2R2R3R3R3R3R3R3R3R4R4R4R4R4R4R4R5R5R5R5R5R5R5

9、R6R6R6R6R6R6R6R7R7R7R7R7R7R7R8R8R8R8R8R8R8_fiqR9R9R9R9R9R9R9_fiqR10R10R10R10R10R10R10_fiqR11R11R11R11R11R11R11_fiqR12R12R12R12R12R12R12_fiqR13R13R13_svcR13_abtR13_undR13_iiqR13_fiqR14R14R14_svcR14_abtR14_undR14_iiqR14_fiqPCPCPCPCPCPCPCCPSRCPSRCPSRCPSRCPSRCPSRCPSRSPSR_svcSPSR_abtSPSR_undSPSR_iiqSPSR_

10、fiq如果异常中断处理程序中使用它自己的物理寄存器之外的其它寄存器,异常中断处理程序必须保存和恢复这些寄存器.在表4中各物理寄存器的名称(如R13_svc等)在ARM汇编语言中并没有被预定义.用户使用这些寄存器时,必须使用伪操作RN来定义这些名称.如可以通过下面操作定义寄存器名称R13_svc:R13_svc RN R13一. 进入和退出异常中断的过程1. ARM处理器对异常中断的相应过程ARM处理器对异常中断的响应过程如下:a. 保存处理器当前状态,中断屏蔽位以及各条件标志位.只是通过将当前程序状态寄存器CPSR的内容保存到将要执行的异常总段对应的SPSR寄存器中实现的.各异常中断有自己的物

11、理SPSR寄存器.b. 设置当前程序CPSR中相应的位.包括设置CPSR中的位,使处理器进入相应的执行模式;设置CPSR中的位,禁止IRQ:当进入FIQ模式时,禁止FIQ中断.c. 将寄存器LR_mode(R14)设置成返回地址,R14从R15中得到PC的备份.d. 将程序计数器值PC设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行.上述的处理器对异常中断的相应过程可以用如下的伪代码描述.e. 响应复位异常中断.当处理器的复位引脚有效时,处理器中止当前指令.当处理器的复位引脚变成无效时,处理器开始执行下面的操作.R14_svc = UNPREDICTABLE valueS

12、PSR_svc = UNPREDICTABLE valueCPSR4:0 = 0b10011 /进入特权模式CPSR5 = 0 /切换到ARM状态CPSR6 = 1 /禁止FIQ异常中断CPSR7 = 1 /禁止IRQ中断If high vectors configured then PC = 0xffff0000ElsePC = 0x00000000f. 响应未定义指令异常中断处理器相应未定义指令异常中断时的处理过程如下面的伪代码所示.R14_und = address of next instruction after the undefined instructionSPSR_und =

13、 CPSRCPSR4:0 = 0b11011 /进入未定义指令异常中断模式CPSR5 = 0 /切换到ARM状态CPSR6 = 1 /禁止FIQ异常中断CPSR7 = 1 /禁止IRQ中断If high vectors configured then PC = 0xffff0004ElsePC = 0x00000004g. 响应SWI异常中断处理器相应SWI异常中断时的处理过程如下面的伪代码所示.R14_svc = address of next instruction after the SWI instructionSPSR_svc = CPSRCPSR4:0 = 0b10011 /进入特

14、权模式CPSR5 = 0 /切换到ARM状态CPSR6 = 1 /禁止FIQ异常中断CPSR7 = 1 /禁止IRQ中断If high vectors configured then PC = 0xffff0008ElsePC = 0x00000008h. 响应指令预取中止异常中断.处理器相应指令预取中止异常会总段时的处理过程如下面的伪代码所示.R14_abt = address of the aborted instruction + 4SPSR_abt = CPSRCPSR4:0 = 0b10111 /进入指令预取中止模式CPSR5 = 0 /切换到ARM状态CPSR6 = 1 /禁止FIQ异常中断CPSR7 = 1 /禁止IRQ中断I

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号