ARM与嵌入式技术培训课件第2章.ppt
《ARM与嵌入式技术培训课件第2章.ppt》由会员分享,可在线阅读,更多相关《ARM与嵌入式技术培训课件第2章.ppt(95页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2.10 异常简介 计算机通常用异常来处理在执行程序时发生的意外事件,如中断,存储器故障等,它需要停止程序的执行流程。当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行异常处理,异常中断处理完成后,程序返回。在ARM体系结构中,异常中断用来处理软件中断,未定义指令陷阱及系统复位功能和外部事件,这些“不正常”事件都被划归“异常”。2.10 异常简介 ARM异常按引起异常事件的不同可分为3类:(1)指令执行引起的直接异常 软件中断,未定义指令和预取指中止属于这一类。(2)指令执行引起的间接异常 数据中止属于这一类。(3)外部产生的与指令流无关的异常 复位,IRQ和FIQ属
2、于这一类。2.10 异常简介 例如响应一个来自外设的中断。在处理异常之前,ARM7TDMI内核保存当前的处理器状态,这样当处理程序结束时可以恢复执行原来的程序。异常入口/出口汇总异常或入口返回指令之前的状态备注ARM R14_xThumb R14_xBLMOV PC,R14PC+4PC+2 此处PC为BL,SWI,为定义的指令取指或预取指中止指令的地址SWIMOVS PC,R14_svcPC+4PC+2未定义的指令MOVS PC,R14_undPC+4PC+2预取指中止SUBS PC,R14_abt,#4PC+4PC+4快中断SUBS PC,R14_fiq,#4PC+4PC+4此处PC为由于F
3、IQ或IRQ占先而没有被执行的指令的地址中断SUBS PC,R14_irq,#4PC+4PC+4数据中止SUBS PC,R14_abt,#8PC+8PC+8此处PC为产生数据中止的装载或保存指令的地址。复位无复位时保存在R14_svc中的值不可预知。注意:“MOVS PC,R14_svc”是指在管理模式执行MOVS PC,R14指令。“MOVS PC,R14_und”、“SUBS PC,R14_abt,#4”等指令也是类似的。2.10 异常异常的入口和出口处理 如果异常处理程序已经把返回地址拷贝到堆栈,那么可以使用一条多寄存器传送指令来恢复用户寄存器并实现返回。SUB LR,LR,#4;计算返
4、回地址STMFD SP!,R0-R3,LR;保存使用到的寄存器.LDMFD SP!,R0-R3,PC;中断返回中断处理代码的开始部分和退出部分 如果异常处理程序已经把返回地址拷贝到堆栈,那么可以使用一条多寄存器传送指令来恢复用户寄存器并实现返回。中断处理代码的开始部分和退出部分2.10 异常异常的入口和出口处理SUB LR,LR,#4;计算返回地址STMFD SP!,R0-R3,LR;保存使用到的寄存器.LDMFD SP!,R0-R3,PC;中断返回注意:中断返回指令的寄存器列表(其中必须包括PC)后的“”符号表示这是一条特殊形式的指令。这条指令在从存储器中装载PC的同时(PC是最后恢复的),
5、CPSR也得到恢复。这里使用的堆栈指针SP(R13)是属于异常模式的寄存器,每个异常模式有自己的堆栈指针。这个堆栈指针应必须在系统启动时初始化。2.10 异常进入异常在异常发生后,ARM7TDMI内核会作以下工作:1.在适当的LR中保存下一条指令的地址,当异常入口来自:ARM状态,那么ARM7TDMI将当前指令地址加4或加8复制(取决于异常的类型)到LR中;为Thumb状态,那么ARM7TDMI将当前指令地址加4或加8(取决于异常的类型)复制到LR中;异常处理器程序不必确定状态。2.10 异常进入异常在异常发生后,ARM7TDMI内核会作以下工作:2.将CPSR复制到适当的SPSR中;3.将C
6、PSR模式位强制设置为与异常类型相对应的值;4.强制PC从相关的异常向量处取指。ARM7TDMI内核在中断异常时置位中断禁止标志,这样可以防止不受控制的异常嵌套。注:异常总是在ARM状态中进行处理。当处理器处于Thumb状态时发生了异常,在异常向量地址装入PC时,会自动切换到ARM状态。2.10 异常进入异常当异常结束时,异常处理程序必须:1.将LR中的值减去偏移量后存入PC,偏移量根据异常的类型而有所不同;2.将SPSR的值复制回CPSR;3.清零在入口置位的中断禁止标志。注:恢复CPSR的动作会将T、F和I位自动恢复为异常发生前的值。2.10 异常退出异常程序AIRQ服务程序系统模式IRQ
7、模式程序寄存器组图示进入异常过程1.程序在系统模式下运行用户程序,假定当前处理器状态为Thumb状态、允许IRQ中断;2.用户程序运行时发生IRQ中断,硬件完成以下动作:LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0.?MODTFI.N Z C V置位I位(禁止IRQ中断)清零T位(进入ARM状态)设置MOD位,切换处理器模式至IRQ模式将下一条指令的地址存入IRQ模式的LR寄存器将CPSR寄存器内容存入IRQ模式的SPSR寄存器将跳转地址存入PC,实现跳转IRQ0?1.?BackAddrJumpAddrJumpSYS1?0.?“?”表示对该位不关心在异常处理结束
8、后,异常处理程序完成以下动作:程序AIRQ服务程序系统模式IRQ模式程序寄存器组图示退出异常过程LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0.?MODTFI.N Z C V将SPSR寄存器的值复制回CPSR寄存器;将LR寄存的值减去一个常量后复制到PC寄存器,跳转到被中断的用户程序。IRQ0?1.?BackAddrJumpAddrreturnSYS1?0.?SYS1?0.?BackAddr-4Jump“?”表示对该位不关心 快速中断请求(FIQ)适用于对一个突发事件的快速响应,这得益于在ARM状态中,快中断模式有8个专用的寄存器可用来满足寄存器保护的需要(这可以
9、加速上下文切换的速度)。不管异常入口是来自ARM状态还是Thumb状态,FIQ处理程序都会通过执行下面的指令从中断返回:SUBS PC,R14_fiq,#4 在一个特权模式中,可以通过置位CPSR中的F位来禁止FIQ异常。2.10 异常快速中断请求(FIQ)中断请求(IRQ)异常是一个由nIRQ输入端的低电平所产生的正常中断(在具体的芯片中,nIRQ由片内外设拉低,nIRQ是内核的一个信号,对用户不可见)。IRQ的优先级低于FIQ。对于FIQ序列它是被屏蔽的。任何时候在一个特权模式下,都可通过置位CPSR中的I位来禁止IRQ。不管异常入口是来自ARM状态还是Thumb状态,IRQ处理程序都会通
10、过执行下面的指令从中断返回:SUBS PC,R14_irq,#42.10 异常中断请求(IRQ)中止表示当前对存储器的访问不能被完成。这是通过外部ABORT输入指示的(在具体的芯片中,ABORT 信号由片内存储器管理不见控制,ABORT 是内核的一个信号,对用户不可见)。处理器在存储器访问周期结束时检测中止异常。中止包含两种类型:预取中止 发生在指令预取过程中数据中止 发生在对数据访问时2.10 异常中止 当发生预取中止时,ARM7TDMI内核将预取的指令标记为无效,但在指令到达流水线的执行阶段时才进入异常。如果指令在流水线中因为发生分支而没有被执行,中止将不会发生。在处理中止的原因之后,不管
11、处于哪种处理器操作状态,处理程序都会执行下面的指令恢复PC和CPSR并重试被中止的指令:SUBS PC,R14_abt,#42.10 异常中止预取中止 当发生数据中止后,根据产生数据中止的指令类型作出不同的处理:2.10 异常中止数据中止(1)数据转移指令(LDR、STR)回写到被修改的基址寄存器。中止处理程序必须注意这一点;(2)交换指令(SWP)中止好像没有被执行过一样(中止必须发生在SWP指令进行读访问时);(3)块数据转移指令(LDM,STM)完成。当回写被设置时,基址寄存器被更新。在指示出现中止后,ARM7TDMI内核防止所有寄存器被覆盖。这意味着ARM7TDMI内核总是会保护被中止
12、的LDM指令中的R15(总是最后一个被转移的寄存器)。2.10 异常中止数据中止 当发生数据中止后,根据产生数据中止的指令类型作出不同的处理:在修复产生中止的原因后,不管处于哪种处理器操作状态,处理程序都必须执行下面的返回指令:SUBS PC,R14_abt,#8即在中止模式执行“SUBS PC,R14,#8”指令,这个动作恢复了PC和CPSR并重试被中止的指令。2.10 异常中止数据中止 使用软件中断(SWI)指令可以进入管理模式,通常用于请求一个特定的管理函数。SWI处理程序通过执行下面的指令返回:MOVS PC,R14_svc 即在管理模式执行“MOVS PC,R14”指令。这个动作恢复
13、了PC和CPSR并返回到SWI之后的指令。SWI处理程序读取操作码以提取SWI函数编号。2.10 异常软件中断指令(SWI)当ARM7TDMI处理器遇到一条自己和系统内任何协处理器都无法处理的指令时,ARM7TDMI内核执行未定义指令陷阱。软件可使用这一机制通过模拟未定义的协处理器指令来扩展ARM指令集。注:ARM7TDMI处理器完全遵循ARM结构v4T,可以捕获所有分类未被定义的指令位格式。2.10 异常未定义的指令 在模拟处理了失败的指令后,陷阱程序执行下面的指令:MOVS PC,R14_svc 即在未定义模式执行“MOVS PC,R14_svc”指令。这个动作恢复了PC和CPSR并返回到
14、未定义指令之后的指令。2.10 异常未定义的指令异常向量地址异常类型进入时的模式进入时I的状态进入时F的状态0 x0000 0000复位管理禁止禁止0 x0000 0004未定义指令未定义F0 x0000 0008软件中断管理禁止F0 x0000 000C中止(预取)中止F0 x0000 0010中止(数据)中止F0 x0000 0014保留保留0 x0000 0018IRQ中断禁止F0 x0000 001CFIQ快中断禁止禁止注:表中的I和F表示不对该位有影响,保留原来的指。当多个异常同时发生时,一个固定的优先级系统决定它们被处理的顺序:2.10 异常异常优先级异常类型优先级复位1(最高优先
15、级)数据中止2FIQ3IRQ4预取中止5未定义指令6SWI7(最低优先级)优先级降低 复位是优先级最高的异常中断,这是因为复位从确定的状态启动微处理器,使得所有其他未解决的异常都没有关系了。注意:有些异常不能一起发生:未定义的指令和SWI异常互斥。因为同一条指令不能既是未定义的,又能产生有效的软件中断;当FIQ使能,并且FIQ和数据中止异常同时发生时,ARM7TDMI内核首先进入数据中止处理程序,然后立即跳转到FIQ向量。在FIQ处理结束后返回到数据中止处理程序。数据中止的优先级必须高于FIQ以确保数据转移错误不会被漏过。2.10 异常异常优先级2.11 中断延迟最大中断延迟Tsyncmax,
16、请 求 通 过 同 步 器 的 最 长 时 间。Tsyncmax为2个处理器周期(由内核决定);当FIQ使能时,最坏情况是正在执行一条装载所有寄存器的指令“LDM”(它耗时最长),同时发生了FIQ和数据中止异常,在响应FIQ中断之前要先把正在执行的指令完成,然后先进入数据中止异常,再、马上跳转到FIQ异常入口,所以延迟时间包含:2.11 中断延迟最大中断延迟Tldm,最长的指令执行需要的时间(最长的指令是装载包括PC在内所有寄存器的LDM指令)。Tldm在零等待状态系统中的执行时间为20个周期。注意,是在零等待状态系统中。一般的基于ARM7核的芯片的存储器系统比内核速度慢,造成其不是零等待的;
17、Texc,数据中止入口的时间。Texc为3个周期(由内核决定);Tfiq,FIQ入口的时间。Tfiq为2个周期(由内核决定)。2.11 中断延迟最大中断延迟FIQ总的延迟时间=Tsyncmax+Tldm+Texc+Tfiq=27个周期 在40MHz处理器时钟时,最大延迟时间略少于0.7us。在此时间结束后,ARM7TDMI执行位于0 x1C处的指令。最大的IRQ延迟时间与之相似,但必须考虑到这样一种情况,当更高优先级的FIQ和IRQ同时申请时,IRQ要延迟到FIQ处理程序允许IRQ中断时才处理(可能需要对中断控制器进行相应的操作)。IRQ延迟时间也要相应增加。2.11 中断延迟最小中断延迟 F
18、IQ或IRQ的最小中断延迟是请求通过同步器的时间Tsyncmin加上Tfiq(共4个处理器周期)。2.12 复位复位 当nRESET信号被拉低时(一般外部复位引脚电平的变化和芯片的其它复位源会改变这个内核信号),ARM7TDMI处理器放弃正在执行的指令。在复位后,除PC和CPSR之外的所有寄存器的值都不确定。2.12 复位复位 当nRESET信号再次变为高电平时,ARM处理器执行下列操作:1.强制M4:0变为b10011(管理模式);2.置位CPSR中的I和F位;3.清零CPSR中的T位;4.强制PC从地址0 x00开始对下一条指令进行取指;5.返回到ARM状态并恢复执行。2.13 存储器及存
19、储器映射I/O简介 在现代SoC设计中,为了实现高性能,微处理器核必须连接一个容量大,速度高的存储器系统。如果存储器容量太小,就不能存储足够大的程序来使处理器全力处理;如果速度太慢,就不能为处理器快速得提供指令。但不能设计一个足够大又足够快的单一存储器,一般的解决方法是构建一个复合的存储器系统,这就是多级存储器。多级存储器包括一个容量小但速度快的从存储器Cache,能自动地保存处理器经常用到的指令和数据的拷贝,以及一个容量大但速度慢的主存储器。这2级存储器原理可扩展为多级存储器层次,如通常所谓的Cache,主存和硬盘构成3级存储层次。2.13 存储器及存储器映射I/O简介 ARM7TDMI处理
20、器采用冯诺曼(Von Neumann)结构,指令和数据共用一条32位数据总线。只有装载、保存和交换指令可访问存储器中的数据。ARM7的规范仅定义了处理器核与存储系统之间的信号及时序(局部总线),而现实的芯片一般在外部总线与处理器核的局部总线之间有一个存储器管理部件将局部总线的信号和时序转换为现实的外部总线信号和时序。因此,外部总线的信号和时序与具体的芯片相关,不是ARM7的标准。具体到某个芯片的外部存储系统的设计需要参考其芯片的数据手册或使用手册等资料。ARM7内核存储器控制器存储器2.13 存储器及存储器映射I/O简介ARM7定义了局部总线的接口时序各芯片厂商制定了自己的接口时序ARM7局部
21、总线一般在两者之间加入存储器控制器2.13 存储器及存储器映射I/O简介 ARM7TDMI处理器将存储器看作是一个从0开始的线性递增的字节集合:字节0到3保存第1个存储的字字节4到7保存第2个存储的字字节8到11保存第3个存储的字ARM7TDMI处理器可以将存储器中的字以下列格式存储大端格式小端格式2.13 存储器及存储器映射I/O地址空间 ARM结构使用单个平面的232个8位字节地址空间。字节地址按照无符号数排列,从0到2321。地址空间可以看作是包含230个32位字,或231个16位半字。如果地址向上或向下溢出地址空间,通常会发生翻转。注意:如果在取指操作时地址发生溢出,只要没有执行预取的
22、无效指令,就不会导致异常。2.13 存储器及存储器映射I/O地址空间跳转目标的计算方法:(当前指令的地址)+8+偏移量下一条指令位置的计算方法:(当前指令的地址)+4 2.13 存储器及存储器映射I/O存储器格式地址空间的规则:位于地址A的字包含的字节位于地址A,A+1,A+2和A+3;位于地址A的半字包含的字节位于地址A和A+1;位于地址A+2的半字包含的字节位于地址A+2和A+3;位于地址A的字包含的半字位于地址A和A+2;字节字节字节字节地址AA+1A+2A+3半字半字字存储器系统有两种映射机制:小端存储器系统:在小端格式中,高位数字存放在高位字节中。因此存储器系统字节0连接到数据线70
23、。大端存储器系统:在大端格式中,高位数字存放在低位字节中。因此存储器系统字节0连接到数据线3124。0 x12345678字数据的大小端存储方式2.13 存储器及存储器映射I/O存储器格式0 x12高位地址低位地址0 x340 x560 x78大端模式0 x78高位地址低位地址0 x560 x340 x12小端模式 一个基于ARM内核的芯片可以只支持大端模式或小端模式,也可以两者都支持。在ARM指令集中不包含任何直接选择大小端的指令,但是一个同时支持大小端模式的ARM芯片可以通过硬件配置(一般使用芯片的引脚来配置)来匹配存储器系统所使用的规则。2.13 存储器及存储器映射I/O存储器格式注意:
24、如果一个基于ARM芯片将存储器系统配置为其中一种存储器格式(如小端格式),而实际连接的存储器系统配置为相反的格式(如大端格式),那么只有以字为单位的数据存取(指令取指、数据装载和数据保存)才正确,否则将出现不可预期的结果。ARM结构通常期望所有的存储器访问都合理的对齐。具体来说就是字访问的地址通常是字对齐的,而半字访问使用的地址是半字对齐的。不按这种方式对齐的存储器访问称为非对齐的存储器访问。将 一 个 非 字(半 字)对 齐 的 地 址 写 入ARM(Thumb)状态的R15寄存器,将引起非对齐的指令取指。在一个非字(半字)对齐的地址读写一个字(半字),将引起非对齐的数据访问:2.13 存储
25、器及存储器映射I/O未对齐的存储器访问 许多ARM实现在前一条指令的执行尚未完成时将指令从存储器中取出。这个动作称为指令的预取。指令的预取并不是实际执行指令。被预取的指令可能得不到运行,可能的原因是:发生异常(当前指令执行完毕,所有预取的指令都被丢弃,指令的执行从异常向量开始);发生跳转(预取的在分支指令后的指令将被丢弃);2.13 存储器及存储器映射I/O指令的预取和自修改代码 当指令读取PC时,得到的指令地址比正在执行指令的地址落后两条指令:对于ARM指令,得到的地址是它自身地址+8;对于Thumb指令,得到的地址是它自身地址+4;虽然生产厂商可以选择预取指令的数目,但是仍然可以保证读取P
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 嵌入式 技术培训 课件
限制150内