




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统教案,武汉创维特信息技术有限公司,2019/7/21,2,提纲,1,3,2,ARM 异常中断处理概述,中断处理程序的安装,第六章 异常中断处理,异常的响应和退出,各种异常中断的处理,4,3,ARM异常中断处理概述,当正常的程序执行流程发生暂时的停止时,称之为异常,例如处理一个外部的中断请求。在处理异常之前,当前处理器的状态必须保留,这样当异常处理完成之后,当前程序可以继续执行。处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。 ARM体系结构中的异常,与8位/16位体系结构的中断有很大的相似之处,但异常与中断的概念并不完全等同。,ARM异常中断处理概述,4,ARM体系结构所支持的异常类型,ARM异常中断处理概述,5,异常向量表(Exception Vectors),ARM异常中断处理概述,6,异常优先级(Exception Priorities),ARM异常中断处理概述,7,对异常的响应,当一个异常出现以后,ARM微处理器会执行以下几步操作 将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。 将CPSR复制到相应的SPSR中。 根据异常类型,强制设置CPSR的运行模式位。 强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。,对异常的响应,8,异常响应伪代码,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。ARM微处理器对异常的响应过程用伪码可以描述为: R14_ = Return Link SPSR_ = CPSR CPSR4:0 = Exception Mode Number CPSR5 = 0 If = Reset or FIQ then CPSR6 = 1 CPSR7 = 1 PC = Exception Vector Address,对异常的响应,9,从异常返回,异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回: 将连接寄存器LR的值减去相应的偏移量后送到PC中。 将SPSR复制回CPSR中。 若在进入异常处理时设置了中断禁止位,要在此清除。 可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。,对异常的响应,10,中断处理程序的安装,一般在系统的启动代码中安装异常处理程序。大致可以分为两种情况: 0地址处存储器为ROM/FLASH 0地址处存储器为RAM,中断处理程序的安装,11,在ROM/FLASH中安装中断处理程序,在ROM/FLASH的异常中断向量表中,可以使用LDR指令直接向程序计数器PC中赋值,也可以直接使用跳转指令转到异常中断处理程序。 使用LDR指令: Vector_entry: LDR PC, Reset_Handle LDR PC, Undef_Handle LDR PC, SWI_Handle,中断处理程序的安装,12,在ROM/FLASH中安装中断处理程序,LDR PC, Prefetch_Handle LDR PC, Abort_Handle NOP LDR PC, IRQ_Handle LDR PC, FIQ_Handle Vector_table: Reset_Handle: .LONG Start_Boot Undef_Handle: .LONG Undef_Isr ,中断处理程序的安装,13,在ROM/FLASH中安装中断处理程序,使用跳转指令: Vector_entry: B Reset_Handle B Undef_Handle B SWI_Handle B Prefetch_Handle B Abort_Handle NOP B IRQ_Handle B FIQ_Handle,中断处理程序的安装,14,RAM中安装中断处理程序,当0地址处为RAM时,中断向量表必须使用数据读取指令直接指向PC中赋值的形式。而且必须把中断向量从ROM中复制到RAM地址的0地址处。 MOV r8, #0 ADR r9, Vector_Init_Block LDMIA r9!, r0-r7 STMIA r8!, r0-r7,中断处理程序的安装,15,在C程序中安装异常中断处理程序,中断向量表使用数据处理指令的情况 在中断向量vector处安装location处指向的处理程序 unsigned ist_handler( unsigned location, unsigned *vector) unsigned vec, oldvec; vec = (location (unsigned)vector 0x08) | 0xe59ff000; oldvec = *vector; *vector = vec; return oldvec; ,中断处理程序的安装,16,在C程序中安装异常中断处理程序,中断向量表使用跳转指令的情况 在中断向量vector处安装routine处理程序 unsigned ist_handler( unsigned routine, unsigned *vector) unsigned vec, oldvec; vec = (routine (vector 0x08)2); vec = 0xea000000 | vec; oldvec = *vector; *vector = vec; return oldvec; ,中断处理程序的安装,17,ABORT(中止),产生中止异常意味着对存储器的访问失败。ARM微处理器在存储器访问周期内检查是否发生中止异常。 中止异常包括两种类型: 指令预取中止:发生在指令预取时。 数据中止:发生在数据访问时。,各种异常中断的处理,18,指令预取异常中断的处理,系统中不包含MMU时,指令预取中止异常处理程序只是简单的报告错误,然后退出; 在使用MMU的系统中,则发生错误的指令触发虚拟地址失效,在该失效处理程序中重新读取该指令。指令预取异常是在有错误的指令被执行时才触发的。当异常发生时,Lr_abt寄存器没有被更新,它指向引起该指令的后面1条指令。 异常的返回地址应该是该有问题的指令,即Lr_abt4处。,各种异常中断的处理,19,数据访问异常中断的处理,系统中不包含MMU时,数据访问中止异常处理程序只是简单的报告错误,然后退出; 在使用MMU的系统中,数据访问中止异常处理程序要处理该数据访问异常。当异常发生时,Lr_abt寄存器已经被更新,它指向引起该异常的指令的后面2条指令。 异常的返回地址是引起数据访问中止异常中断的指令,即Lr_abt8处。,各种异常中断的处理,20,ABORT(中止)处理函数的退出,当确定了中止的原因后,Abort处理程序均可以执行以下指令从中止模式返回,无论是在ARM状态还是Thumb状态: SUBS PC, R14_abt, #4 ;指令预取中止 SUBS PC, R14_abt, #8 ;数据中止,各种异常中断的处理,21,FIQ(Fast Interrupt Request),FIQ异常是为了支持数据传输或者通道处理而设计的。 若将CPSR的F位置为1,则会禁止FIQ中断,若将CPSR的F位清零,处理器会在指令执行时检查FIQ的输入。注意只有在特权模式下才能改变F位的状态。 可由外部通过对处理器上的nFIQ引脚输入低电平产生FIQ。不管是在ARM状态还是在Thumb状态下进入FIQ模式,FIQ处理程序均可以执行以下指令从FIQ模式返回: SUBS PC,R14_fiq ,#4,各种异常中断的处理,22,IRQ(Interrupt Request),IRQ异常属于正常的中断请求,可通过对处理器的nIRQ引脚输入低电平产生,IRQ的优先级低于FIQ,当程序执行进入FIQ异常时,IRQ可能被屏蔽。 若将CPSR的I位置为1,则会禁止IRQ中断,若将CPSR的I位清零,处理器会在指令执行完之前检查IRQ的输入。注意只有在特权模式下才能改变I位的状态。 不管是在ARM状态还是在Thumb状态下进入IRQ模式,IRQ处理程序均可以执行以下指令从IRQ模式返回: SUBS PC , R14_irq , #4,各种异常中断的处理,23,IRQ/FIQ处理程序示例,STMFD sp!, r0-r12, lr 调用IRQ/FIQ处理程序 LDMFD sp!, r0-r12, lr SUBS pc, lr, #4,各种异常中断的处理,24,Undefined Instruction(未定义指令),当ARM处理器遇到不能处理的指令时,会产生未定义指令异常。采用这种机制,可以通过软件仿真扩展ARM或Thumb指令集。 处理器执行以下程序返回,无论是在ARM状态还是Thumb状态: MOVS PC, R14_und 以上指令恢复PC(从R14_und)和CPSR(从SPSR_und)的值,并返回到未定义指令后的下一条指令。,各种异常中断的处理,25,SWI(软件中断),软件中断指令(SWI)用于进入管理模式,常用于请求执行特定的管理功能。软件中断处理程序执行以下指令可以从SWI模式返回,无论是在ARM状态还是Thumb状态: MOVS PC , R14_svc 以上指令恢复PC(从R14_svc)和CPSR(从SPSR_svc) 的值,并返回到SWI的下一条指令。,各种异常中断的处理,26,SWI一级处理程序,STMFD sp!, r0-r12, lr LDR r0, lr, #-4 BIC r0, r0, #0xFF000000 在此调用二级处理程序 LDMFD sp!, r0-r12, lr,各种异常中断的处理,27,SWI二级处理程序,CMP r0, #maxSWI LDRLS pc, pc, r0, LSL #2 B SWIOutofRange SWI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 胆囊底部占位护理
- 直播平台内容审核与技术保障合作协议
- 夫妻债务重组与债务豁免共同协议
- 子女医疗费用减免及援助协议
- 新版gsp计算机试题及答案
- 股权回购型股权激励与风险投资合作协议书
- 心理学招聘面试题目及答案
- 创新型房改房上市收益分配与税务处理合同
- 股权收益权信托与私募基金合作框架协议
- 影视行业群众演员培训与就业合同
- 自愿放弃孩子协议书(2篇)
- 汉谟拉比法典中文版
- 2025届高考地理复习+情景类型题分析
- DLT 1529-2016 配电自动化终端设备检测规程
- 2018年四川省中职学校技能大赛建筑CAD赛项 样题
- 芯片封装可靠性评价与失效分析
- 2024年人工智能训练师(初级)职业鉴定理论考试题库及答案
- 质量环境职业健康安全管理体系三合一整合全套体系文件(管理手册+程序文件)
- 山东省青岛市崂山区2023-2024学年七年级下学期期末数学试题
- JT-T-969-2015路面裂缝贴缝胶
- 内科人卫一类模拟考试题(含答案)
评论
0/150
提交评论