ARM7体系结构概述.ppt

上传人:红**** 文档编号:92663514 上传时间:2023-06-11 格式:PPT 页数:92 大小:1.87MB
返回 下载 相关 举报
ARM7体系结构概述.ppt_第1页
第1页 / 共92页
ARM7体系结构概述.ppt_第2页
第2页 / 共92页
点击查看更多>>
资源描述

《ARM7体系结构概述.ppt》由会员分享,可在线阅读,更多相关《ARM7体系结构概述.ppt(92页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、ARM7 体系结构概述2.1 ARM简介 ARM体系结构ARM体系结构的特点,使其非常适用于嵌入式系统:低功耗:对于电池供电的设备,功耗无疑是重点;高代码密度:小的代码量可以减小存储成本;小面积:芯片内可以集成更多的外设,使系统硬件更紧凑简洁;方便的硬件调试技术:降低开发难度和成本。2.1 ARM简介 各ARM体系结构版本 ARM体系结构从最初开发到现在有了巨大的改进,并仍在完善和发展。为了清楚的表达每个ARM应用实例所使用的指令集,ARM公司定义了6种主要的ARM指令集体系结构版本,以版本号V1V6表示。其中V1V3已经停止使用,常用的ARM7为V4版本。2.1 ARM简介 各ARM体系结构

2、版本V4 不在为了与以前的版本兼容而支持26位体系结构,并明确了哪些指令会引起未定义指令异常发生,它相对V3版本作了以下的改进:增加半字加载/存储指令;字节和半字的加载和符号扩展指令;具有可以转换到 具有可以转换到Thumb Thumb状态的指令 状态的指令;增加使用用户模式寄存器的系统模式 系统模式。2.1 ARM简介 各ARM体系结构版本V5 在V4版本的基础上,对现在指令的定义进行了必要的修正,对V4版本的体系结构进行了扩展并并增加了指令,具体如下:改进了ARM/Thumb状态之间的切换效率;允许非T变量和T变量一样,使用相同的代码生成技术;增加计数前导零指令和软件断点指令;对乘法指令如

3、何设置标志作了严格的定义。2.1 ARM简介 ARM处理器核简介 ARM公司开发了很多系列的ARM处理器核,目前最新的系列已经是ARM11了,而ARM6核以及更早的系列已经很罕见了。目前应用比较广泛的系列是:ARM7 ARM9 ARM9E ARM10Cortex-M3XscaleARM112.1 ARM简介 ARM处理器核简介ARM7 该系列包括ARM7TDMI、ARM7TDMI-S、带有高速缓存处理器宏单元的ARM720T和扩充了Jazelle的ARM7EJ-S。该系列处理器提供Thumb 16位压缩指令集和EmbededICE软件调试方式,适用于更大规模的SoC设计中。ARM7系列广泛应用

4、于多媒体和嵌入式设备,包括Internet设备、网络和调制解调器设备,以及移动电话、PDA等无线设备。2.1 ARM简介 ARM处理器核简介ARM9 该系列包括ARM9TDMI、ARM920T、ARM926和带有高速缓存处理器宏单元的ARM940T。除了兼容ARM7系列,而且能够更加灵活的设计。PHILIPS最近推出的LPC3180就是基于ARM926的微处理器,即将推出的开发套件SmartARM3180支持Linux 2.4、WinCE4.2,还有PC104等工控机系列产品。ARM9系列主要应用于引擎管理、仪器仪表、安全系统和机顶盒等领域。2.1 ARM简介 ARM处理器核简介Cortex-

5、M3 该系列主要针对MCU市场,改进了代码密度,减少了中断延迟,并有更低的功耗,支持Thumb-2指令集。开发套件:Keil RealView(包含ULINK仿真器),支持ARM7、ARM9以及CortexM3,ADS将停止支持CortexM3,预计市场上第一颗基于CortexM3的MCU将于第四季度上市。第2章 目录q1.简介q2.ARM7TDMIq3.ARM7TDMI的模块和内部框图q4.体系结构直接支持的数据类型q5.处理器状态q6.处理器模式q7.内部寄存器q8.程序状态寄存器q9.异常q10.中断延迟q11.复位q12.存储器及存储器映射I/O2.2 ARM7TDMI 简介 ARM7

6、TDMI支持32位寻址范围,并弥补了ARM6不能在低于5V电源电压下工作的不足。ARM7TDMI的后缀意义为:支持高密度16位的Thumb指令集;支持片上调试;支持64位乘法;支持EmbededICE观察硬件;ARM7TDMI 的可综合(synthesizable)版本(软核),对应用工程师来说其编程模型与ARM7TDMI 一致;ARM7 T D M I-S2.2 ARM7TDMI 三级流水线正在执行的指令正在译码的指令正在预取的指令内核流水线 LDR R0,AddInstr STR R0,NextInstr SUB R1,R1,#1.ADD R1,R1,#1(1)(2)(4)(3)源程序第2

7、章 目录q1.简介q2.ARM7TDMIq3.ARM7TDMI的模块和内部框图q4.体系结构直接支持的数据类型q5.处理器状态q6.处理器模式q7.内部寄存器q8.程序状态寄存器q9.异常q10.中断延迟q11.复位q12.存储器及存储器映射I/O2.7 内部寄存器 R14寄存器与异常发生 异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序调用类似,都是由硬件完成的。区别在于有些异常有一个小常量的偏移。程序计数器R15(PC)寄存器R15为程序计数器(PC),它指向正在取指的地址。可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。如果R15使用的方式超出

8、了这些限制,那么结果将是不可预测的。2.7 内部寄存器 读R15的限制 正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条ARM指令的长度)。由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。内核流水线内核流水线 取指取指 译码译码 执行执行MOV MOVADD ADD 源程序源程序PCPC(R15)(R15)PCPCPC-4PC-4PC-8PC-8MOV R0,PC MOV R0,PC ADD ADDSUB SUB 2.7 内部寄存器 读R15的限制内核流水线内核流水线 取指取指 译码译码 执行执行 SUB SUB ADD ADD

9、MOV MOV程序代码程序代码PC-8PC-4PC地址地址注意:注意:执行一条 执行一条PC PC读取指令时,读取指令时,读取的值并不是该行指令的地 读取的值并不是该行指令的地址值。址值。0 x4000 ADD PC,PC,#4 0 x4004 0 x4008 0 x400C 思考与练习?假设CPU正在运行以下的程序,并正在执0 x4000处的指令(它的作用是将PC值加4后写入PC),请问指令执行后请问指令执行后PCPC值是什么?值是什么?正被执行正被译码PC指向指令执行结果PC=PC+42.7 内部寄存器 读R15的限制 当使用STR STR或STM STM指令保存R15时,会有一个例外。这

10、些指令可能将当前指令地址加8字节或加12字节保存(将来可能还有其它数字)。偏移量是8还是12取决于具体的ARM芯片,但是对于一个确定的芯片,这个值是一个常量。所以最好避免使用STR和STM指令来保存R15,如果很难做到,那么应当在程序中计算出该芯片的偏移量。2.7 内部寄存器 读R15的限制计算偏移量程序代码:SUB R1,PC,#4;R1=下面STR指令的地址STR PC,R0;保存STR指令地址+偏移量LDR R0,R0;然后重装SUB R0,R0,R1;计算偏移量2.7 内部寄存器 写R15的限制 正常操作时,写入R15 的值被当作一个指令地址,程序从这个地址处继续执行(相当于执行一次无

11、条件跳转)。2.7 内部寄存器 写R15的限制 由于ARM指令以字为边界,因此写入R15的值最低两位通常为0b00。具体的规则取决于内核结构的版本:在ARM结构V3版及以下版本中,写入R15的值的最低两位被忽略,因此跳转地址由指令的实际目标地址(写入R15的值)和0 xFFFFFFFC相与得到;在ARM结构V4版及以上版本中,写入R15的值的最低两位为0,如果不是,结果将不可预测。程序状态寄存器CPSR 寄存器CPSR为程序状态寄存器,在异常模式中,另外一个寄存器“程序状态保存寄存器(SPSR)”可以被访问。每种异常都有自己的SPSR,在因为异常事件而进入异常时它保存CPSR的当前值,异常退出

12、时可通过它恢复CPSR。详细描述参看2.8小节。2.7 内部寄存器 Thumb状态寄存器 Thumb状态寄存器集是ARM状态集的子集,程序员可以直接访问的寄存器为:8个通用寄存器R0R7;程序计数器(PC);堆栈指针(SP);链接寄存器(LR);有条件访问程序状态寄存器(CPSR)。Thumb状态各模式下的寄存器CPSR CPSR状态寄存器R15 PCR14_fiq R14_irq R14_und R14_abt R14_svc R14 LRR13_fiq R13_irq R13_und R13_abt R13_svc R13 SPR7 R7(v4,wr)R6 R6(v3)R5 R5(v2)R

13、4 R4(v1)R3 R3(a4)R2 R2(a3)R1 R1(a2)R0 R0(a1)通用寄存器和程序计数器快中断 中断 未定义 中止 管理 系统 用户各模式下实际访问的寄存器寄存器在汇编中的名称寄存器类别注意:括号内为ATPCS中寄存器的命名,可以使用RN汇编伪指令将寄存器定义多个名字。其中ADS1.2的汇编程序直接支持这些名称,但注意a1a4,v1v4必须用小写。Thumb状态下的通用寄存器CPSR CPSR状态寄存器R15 PCR14_fiq R14_irq R14_und R14_abt R14_svc R14 LRR13_fiq R13_irq R13_und R13_abt R1

14、3_svc R13 SPR7 R7(v4,wr)R6 R6(v3)R5 R5(v2)R4 R4(v1)R3 R3(a4)R2 R2(a3)R1 R1(a2)R0 R0(a1)通用寄存器和程序计数器快中断 中断 未定义 中止 管理 系统 用户各模式下实际访问的寄存器寄存器在汇编中的名称寄存器类别R7R6R5R4R3R2R1R0 在汇编语言中寄存器R0R7为保存数据或地址值的通用寄存器。对于任何处理器模式,它们中的每一个都对应于相同的32位物理寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊的用途,并且可用于任何使用通用寄存器的指令。Thumb状态下的堆栈指针寄存器(SP)CPSR CPSR

15、状态寄存器R15 PCR14_fiq R14_irq R14_und R14_abt R14_svc R14 LRR13_fiq R13_irq R13_und R13_abt R13_svc R13 SPR7 R7(v4,wr)R6 R6(v3)R5 R5(v2)R4 R4(v1)R3 R3(a4)R2 R2(a3)R1 R1(a2)R0 R0(a1)通用寄存器和程序计数器快中断 中断 未定义 中止 管理 系统 用户各模式下实际访问的寄存器寄存器在汇编中的名称寄存器类别 堆栈指针SP对应ARM状态的寄存器R13。每个异常模式都有其自身的SP分组版本,SP通常指向各异常模式所专用的堆栈。注意:

16、在发生异常时,处理器自动进入ARM状态。R13_fiq R13_irq R13_und R13_abt R13_svc R13Thumb状态下的链接寄存器R14(LR)CPSR CPSR状态寄存器R15 PCR14_fiq R14_irq R14_und R14_abt R14_svc R14 LRR13_fiq R13_irq R13_und R13_abt R13_svc R13 SPR7 R7(v4,wr)R6 R6(v3)R5 R5(v2)R4 R4(v1)R3 R3(a4)R2 R2(a3)R1 R1(a2)R0 R0(a1)通用寄存器和程序计数器快中断 中断 未定义 中止 管理 系

17、统 用户各模式下实际访问的寄存器寄存器在汇编中的名称寄存器类别 链接寄存器LR对应ARM状态寄存器R14,在结构上有两个特殊功能,详见“ARM状态下的链接寄存器LR”。注意:在发生异常时,处理器自动进入ARM状态。R14_fiq R14_irq R14_und R14_abt R14_svc R142.7 内部寄存器 ARM状态和Thumb状态之间寄存器的关系 Thumb状态寄存器与ARM状态寄存器有如下的关系:Thumb状态R0R7与ARM状态R0R7相同;Thumb状态CPSR与ARM状态CPSR相同;Thumb状态SP映射到ARM状态R13;Thumb状态LR映射到ARM状态R14;Th

18、umb状态PC映射到ARM状态PC(R15)。Thumb状态寄存器在Arm状态寄存器上的映射低寄存器高寄存器 R1 R2 R3 R4 R5 T humb R6 R7(C PSR)R1 R2 R3 R4 R5 A R M R6 R7 R8(C PSR)R9 R10 R11 R12 R0 R0 状态 状态堆栈指针(SP)连接寄存器(LR)程序计数器(PC)当前程序状态寄存器 堆栈指针(R13)连接寄存器(R14)程序计数器(R15)当前程序状态寄存器 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R0 堆栈指针(R13)连接寄存器(R14)程序计数器(R15)2.7

19、 内部寄存器 在Thumb状态中访问高寄存器 在Thumb状态中,高寄存器(R8R15)不是标准寄存器集的一部分。汇编语言程序员对它们的访问受到限制,但可以将它们用于快速暂存。可以使用MOV、CMP和ADD指令对高寄存器操作,详见第4章。第2章 目录q1.简介q2.ARM7TDMIq3.ARM7TDMI的模块和内部框图q4.体系结构直接支持的数据类型q5.处理器状态q6.处理器模式q7.内部寄存器q8.程序状态寄存器q9.异常q10.中断延迟q11.复位q12.存储器及存储器映射I/O2.8 程序状态寄存器 简介 ARM7TDMI内核包含1个CPSR和5个供异常处理程序使用的SPSR。CPSR

20、反映了当前处理器的状态,其包含:4个条件代码标志(负(N)、零(Z)、进位(C)和溢出(V));2个中断禁止位,分别控制一种类型的中断;5个对当前处理器模式进行编码的位;1个用于指示当前执行指令(ARM还是Thumb)的位。N Z C V I M0 M1 M2 M3 M4 T F.31 30 29 28 27 26 8 7 6 5 4 3 2 1 02.8 程序状态寄存器 简介条件代码标志 保留 控制位溢出标志进位或借位扩展零负或小于IRQ禁止FIQ禁止状态位模式位N Z C V I M0 M1 M2 M3 M4 T FCPSR寄存器的格式2.8 程序状态寄存器 简介 每个异常模式还带有一个程

21、序状态保存寄存器(SPSR),它用于保存在异常事件发生之前的CPSR。CPSR和SPSR通过特殊指令进行访问。详细信息请参阅第3章。注意:如果通过程序修改CPSR寄存器中的模式位进入异常模式,那么硬件将不会把CPSR保存至SPSR中。2.8 程序状态寄存器 条件代码标志 大多数“数值处理指令”可以选择是否影响条件代码标志位。通常如果指令带S后缀,则该指令的执行会影响条件代码标志;但有一些指令的执行总是会影响条件代码标志。N、Z、C和V位都是条件代码标志。通过算术操作、逻辑操作、MSR或者LDM指令可以对这些位进行设置。所有ARM指令都可按条件来执行,而Thumb指令中只有分支指令可按条件执行。

22、2.8 程序状态寄存器 条件代码标志各标志位的含义如下:N 运算结果的最高位反映在该标志位。对于有符号二进制补码,结果为负数时N=1,结果为正数或零时N=0;Z 指令结果为0时Z=1(通常表示比较结果“相等”),否则Z=0;2.8 程序状态寄存器 条件代码标志各标志位的含义如下:C 当进行加法运算(包括CMN指令),并且最高位产生进位时C=1,否则C=0。当进行减法运算(包括CMP 指令),并且最高位产生借位时C=0,否则C=1。对于结合移位操作的非加法/减法指令,C为从最高位最后移出的值,其它指令C通常不变;V当进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V通常不变。

23、2.8 程序状态寄存器 控制位 CPSR的最低8位为控制位,当发生异常时,这些位被硬件改变。当处理器处于一个特权模式时,可用软件操作这些位。它们分别是:中断禁止位;T位;模式位。2.8 程序状态寄存器 控制位中断禁止位包括I和F位:当I位置位时,IRQ中断被禁止;当F位置位时,FIQ中断被禁止。T位反映了正在操作的状态:当T位置位时,处理器正在Thumb状态下运行;当T位清零时,处理器正在ARM状态下运行。2.8 程序状态寄存器 控制位模式位包括M4、M3、M2、M1和M0,这些位决定处理器的操作模式。注意:不是所有模式位的组合都定义了有效的处理器模式,如果使用了错误的设置,将引起一个无法恢复

24、的错误。CPSR模式位设置表2.8 程序状态寄存器 保留位 CPSR中的保留位被保留将来使用。为了提高程序的可移植性,当改变CPSR标志和控制位时,请不要改变这些保留位。另外,请确保您程序的运行不受保留位的值影响,因为将来的处理器可能会将这些位设置为1或者0。第2章 目录q1.简介q2.ARM7TDMIq3.ARM7TDMI的模块和内部框图q4.体系结构直接支持的数据类型q5.处理器状态q6.处理器模式q7.内部寄存器q8.程序状态寄存器q9.异常q10.中断延迟q11.复位q12.存储器及存储器映射I/O2.9 异常 简介 只要正常的程序流被暂时中止,处理器就进入异常模式。例如响应一个来自外

25、设的中断。在处理异常之前,ARM7TDMI内核保存当前的处理器状态,这样当处理程序结束时可以恢复执行原来的程序。如果同时发生两个或更多异常,那么将按照固定的顺序来处理异常,详见“异常优先级”部分。2.9 异常 异常的入口和出口处理 如果异常处理程序已经把返回地址拷贝到堆栈,那么可以使用一条多寄存器传送指令来恢复用户寄存器并实现返回。SUB LR,LR,#4;计算返回地址STMFD SP!,R0-R3,LR;保存使用到的寄存器.LDMFD SP!,R0-R3,PC;中断返回中断处理代码的开始部分和退出部分 如果异常处理程序已经把返回地址拷贝到堆栈,那么可以使用一条多寄存器传送指令来恢复用户寄存器

26、并实现返回。中断处理代码的开始部分和退出部分2.9 异常 异常的入口和出口处理SUB LR,LR,#4;计算返回地址STMFD SP!,R0-R3,LR;保存使用到的寄存器.LDMFD SP!,R0-R3,PC;中断返回注意:中断返回指令的寄存器列表(其中必须包括PC)后的“”符号表示这是一条特殊形式的指令。这条指令在从存储器中装载PC的同时(PC是最后恢复的),CPSR也得到恢复。这里使用的堆栈指针SP(R13)是属于异常模式的寄存器,每个异常模式有自己的堆栈指针。这个堆栈指针应必须在系统启动时初始化。2.9 异常 进入异常在异常发生后,ARM7TDMI内核会作以下工作:1.在适当的LR中保

27、存下一条指令的地址,当异常入口来自:ARM状态,那么ARM7TDMI将下一条指令地址复制到LR中;为ARM或Thumb状态,那么ARM7TDMI将当前指令地址加4或加8(取决于异常的类型)复制到LR中;异常处理器程序不必确定状态。2.9 异常 进入异常在异常发生后,ARM7TDMI内核会作以下工作:2.将CPSR复制到适当的SPSR中;3.将CPSR模式位强制设置为与异常类型相对应的值;4.强制PC从相关的异常向量处取指。ARM7TDMI内核在中断异常时置位中断禁止标志,这样可以防止不受控制的异常嵌套。注:异常总是在ARM状态中进行处理。当处理器处于Thumb状态时发生了异常,在异常向量地址装

28、入PC时,会自动切换到ARM状态。2.9 异常 进入异常当异常结束时,异常处理程序必须:1.将LR中的值减去偏移量后存入PC,偏移量根据异常的类型而有所不同;2.将SPSR的值复制回CPSR;3.清零在入口置位的中断禁止标志。注:恢复CPSR的动作会将T、F和I位自动恢复为异常发生前的值。2.9 异常 退出异常程序A IRQ服务程序系统模式 IRQ模式程序 寄存器组图示进入异常过程1.程序在系统模式下运行用户程序,假定当前处理器状态为Thumb状态、允许IRQ中断;2.用户程序运行时发生IRQ中断,硬件完成以下动作:LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS 1?0

29、.?MOD T F I.N Z C V置位I位(禁止IRQ中断)清零T位(进入ARM状态)设置MOD位,切换处理器模式至IRQ模式将下一条指令的地址存入IRQ模式的LR寄存器将CPSR寄存器内容存入IRQ模式的SPSR寄存器将跳转地址存入PC,实现跳转IRQ 0?1.?BackAddrJumpAddrJumpSYS 1?0.?“?”表示对该位不关心在异常处理结束后,异常处理程序完成以下动作:程序A IRQ服务程序系统模式 IRQ模式程序 寄存器组图示退出异常过程LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS 1?0.?MOD T F I.N Z C V将SPSR寄存器的

30、值复制回CPSR寄存器;将LR寄存的值减去一个常量后复制到PC寄存器,跳转到被中断的用户程序。IRQ 0?1.?BackAddrJumpAddrreturnSYS 1?0.?SYS 1?0.?BackAddr-4Jump“?”表示对该位不关心 FIQ和IRQ中断请求由ARM内核的nFIQ和nIRQ信号线输入,当信号线上出现有效触发电平时,产生相应的FIQ或IRQ中断,ARM核进入相应的异常模式。2.9 异常 FIQ和IRQ中断请求 快速中断请求(FIQ)适用于对一个突发事件的快速响应,这得益于在ARM状态中,快中断模式有8个专用的寄存器可用来满足寄存器保护的需要(这可以加速上下文切换的速度)。

31、2.9 异常 快速中断请求 与其它模式相比,它有更多的自有寄存器,可以减少程序中堆栈的操作,提高处理速度。不管异常入口是来自ARM状态还是Thumb状态,FIQ处理程序都会通过执行下面的指令从中断返回:SUBS PC,R14_fiq,#4 在一个特权模式中,可以通过置位CPSR中的F位来禁止FIQ异常。2.9 异常 快速中断请求 中断请求(IRQ)异常是一个由nIRQ输入端的低电平所产生的正常中断(在具体的芯片中,nIRQ由片内外设拉低,nIRQ是内核的一个信号,对用户不可见)。IRQ的优先级低于FIQ。对于FIQ序列它是被屏蔽的。任何时候在一个特权模式下,都可通过置位CPSR中的I 位来禁止

32、IRQ。不管异常入口是来自ARM状态还是Thumb状态,FIQ处理程序都会通过执行下面的指令从中断返回:SUBS PC,R14_irq,#42.9 异常 中断请求指令A指令B指令C正常程序流代码2.9 异常 IRQ与FIQ的返回地址处理中断发生时正 正在执行 在执行的指令中断发生时PC PC指向的指令void _irq _irq INT_Express()服务代码/SUBS pc,r14,#4 SUBS pc,r14,#4C语言中断服务程序 中止发生在对存储器的访问不能完成时。例如试图访问一个保留地址或未分配区域的地址,ARM处理器将产生中止异常。中止包含两种类型:预取中止 发生在指令预取过程

33、中数据中止 发生在对数据访问时2.9 异常 中止例如:LPC2000微控制器会发生中止异常的区域:FlashSRAMBoot BlockVPB地址空间AHB1.特定的ARM器件所没有的存储器映射区域;2.AHB外设空间中未分配的区域;3.VPB外设空间中未分配的区域。2.9 异常 中止231 当发生预取中止时,ARM7TDMI内核将预取的指令标记为无效,但在指令到达流水线的执行阶段时才进入异常。如果指令在流水线中因为发生分支而没有被执行,中止将不会发生。在处理中止的原因之后,不管处于哪种处理器操作状态,处理程序都会执行下面的指令恢复PC和CPSR并重试被中止的指令:SUBS PC,R14_ab

34、t,#42.9 异常 中止预取指中止指令流水线指令C指令B指令A存储器无效区域取指译码执行指令C指令B指令A取指译码执行存储器程序 存储器第N次取指2.9 异常 中止预取指中止第N+1次取指指令流水线指令C指令B指令A存储器无效区域取指译码执行指令C指令B指令A无效指令指令C指令B取指译码执行存储器程序 存储器2.9 异常 中止预取指中止第N+2次取指指令流水线指令C指令B指令A存储器无效区域取指译码执行指令C指令B指令A无效指令指令C指令B取指译码执行无效指令无效指令指令C存储器程序 存储器2.9 异常 中止预取指中止指令流水线指令C指令B指令A存储器无效区域取指译码执行指令C指令B指令A无

35、效指令指令C指令B取指译码执行无效指令无效指令指令C无效指令无效指令无效指令存储器程序 存储器 第N+3次取指,此时流水线的执行级执行了无效指令,发生预取指中止。如果指令C为跳转指令则可以避免预取指中止的发生。2.9 异常 中止预取指中止 当发生数据中止后,根据产生数据中止的指令类型作出不同的处理。2.9 异常 中止数据中止 在修复产生中止的原因后,不管处于哪种处理器操作状态,处理程序都必须执行下面的返回指令:SUBS PC,R14_abt,#8 使用软件中断(SWI)指令可以进入管理模式,通常用于请求一个特定的管理函数。SWI处理程序通过执行下面的指令返回:MOVS PC,R14_svc 这

36、个动作恢复了PC和CPSR并返回到SWI之后的指令。SWI处理程序读取操作码以提取SWI函数编号。2.9 异常 软件中断指令用户程序 服务程序用户模式 管理模式程序SWI指令return2.9 异常 软件中断指令Jump实现操作系统的系统调用11.执行用户程序中的软件中断指令,产生软件中断异常,通常用于系统调用;2.执行异常处理程序,并返回。2 当ARM7TDMI处理器遇到一条自己和系统内任何协处理器都无法处理的指令时,ARM7TDMI内核执行未定义指令陷阱。软件可使用这一机制通过模拟未定义的协处理器指令来扩展ARM指令集。注:ARM7TDMI处理器完全遵循ARM结构v4T,可以捕获所有分类未

37、被定义的指令位格式。2.9 异常 未定义的指令2.9 异常 未定义的指令用户程序 服务程序用户模式 未定义模式程序未定义指令returnJump解释无法执行的指令,并完成其功能11.执行用户程序时遇到无法执行的指令,产生未定义指令异常;3.异常处理程序执行结束后返回。32.在服务程序中取出无法执行指令,完成其功能;2 在模拟处理了失败的指令后,陷阱程序执行下面的指令:MOVS PC,R14_und 这个动作恢复了PC和CPSR并返回到未定义指令之后的指令。2.9 异常 未定义的指令异常向量注:表中的I和F表示不对该位有影响,保留原来的值。CODE32 AREA vectors,CODE,REA

38、DONLY ENTRYReset LDR PC,ResetAddr LDR PC,UndefinedAddr.DCD 0 xb9205f80 LDR PC,PC,#-0 xff0 LDR PC,FIQ_AddrResetAddr DCD ResetInitUndefinedAddr DCD Undefined.Nouse DCD 0IRQ_Addr DCD IRQ_HandlerFIQ_Addr DCD FIQ_Handler异常向量表:CODE32 AREA vectors,CODE,READONLY ENTRYReset LDR PC,ResetAddr LDR PC,UndefinedA

39、ddr.DCD 0 xb9205f80 LDR PC,PC,#-0 xff0 LDR PC,FIQ_AddrResetAddr DCD ResetInitUndefinedAddr DCD Undefined.Nouse DCD 0IRQ_Addr DCD IRQ_HandlerFIQ_Addr DCD FIQ_Handler异常向量表:取出跳转地址后向服务程序跳转 CODE32 AREA vectors,CODE,READONLY ENTRYReset LDR PC,ResetAddr LDR PC,UndefinedAddr.DCD 0 xb9205f80 LDR PC,PC,#-0 xf

40、f0 LDR PC,FIQ_AddrResetAddr DCD ResetInitUndefinedAddr DCD Undefined.Nouse DCD 0IRQ_Addr DCD IRQ_HandlerFIQ_Addr DCD FIQ_Handler异常向量表:ResetInit 复位服务程序Undefine 未定义服务程序IRQ_Handler IRQ中断服务程序FIQ_Handler FIQ中断服务程序 当多个异常同时发生时,一个固定的优先级系统决定它们被处理的顺序:2.9 异常 异常优先级优先级降低注意:未定义的指令和SWI异常互斥。因为同一条指令不能既是未定义的,又能产生有效的软

41、件中断;当FIQ使能,并且FIQ和数据中止异常同时发生时,ARM7TDMI内核首先进入数据中止处理程序,然后立即跳转到FIQ向量。在FIQ处理结束后返回到数据中止处理程序。数据中止的优先级必须高于FIQ以确保数据转移错误不会被漏过。2.9 异常 异常优先级第2章 目录q1.简介q2.ARM7TDMIq3.ARM7TDMI的模块和内部框图q4.体系结构直接支持的数据类型q5.处理器状态q6.处理器模式q7.内部寄存器q8.程序状态寄存器q9.异常q10.中断延迟q11.复位q12.存储器及存储器映射I/O2.11 复位 复位 当nRESET信号被拉低时(一般外部复位引脚电平的变化和芯片的其它复位

42、源会改变这个内核信号),ARM7TDMI处理器放弃正在执行的指令。在复位后,除PC和CPSR之外的所有寄存器的值都不确定。2.11 复位 复位 当nRESET信号再次变为高电平时,ARM处理器执行下列操作:1.强制M4:0变为b10011(管理模式);2.置位CPSR中的I和F位;3.清零CPSR中的T位;4.强制PC从地址0 x00开始对下一条指令进行取指。第2章 目录q1.简介q2.ARM7TDMIq3.ARM7TDMI的模块和内部框图q4.体系结构直接支持的数据类型q5.处理器状态q6.处理器模式q7.内部寄存器q8.程序状态寄存器q9.异常q10.中断延迟q11.复位q12.存储器及存

43、储器映射I/O2.12 存储器及存储器映射I/O 简介 ARM7TDMI处 理 器 采 用 冯 诺 依 曼(Von Neumann)结构,指令和数据共用一条32位数据总线。只有装载、保存和交换指令可访问存储器中的数据。2.12 存储器及存储器映射I/O 简介 ARM7的规范仅定义了处理器核与存储系统之间的信号及时序(局部总线),而现实的芯片一般在外部总线与处理器核的局部总线之间有一个存储器管理部件将局部总线的信号和时序转换为现实的外部总线信号和时序。因此,外部总线的信号和时序与具体的芯片相关,不是ARM7的标准。具体到某个芯片的外部存储系统的设计需要参考其芯片的数据手册或使用手册等资料。ARM

44、7内核存储器控制器存储器2.12 存储器及存储器映射I/O 简介ARM7定义了局部总线的接口时序各芯片厂商制定了自己的接口时序ARM7局部总线一般在两者之间加入存储器控制器存储器系统有两种映射机制:小端存储器系统:在小端格式中,数据的高字节存放在高地址中。因此存储器系统字节0连接到数据线70。大端存储器系统:在大端格式中,数据的高字节存放在低地址中。因此存储器系统字节0连接到数据线3124。0 x87654321字数据的大小端存储方式2.12 存储器及存储器映射I/O 存储器格式0 x78高地址 低地址0 x56 0 x34 0 x12大端模式0 x12高地址 低地址0 x34 0 x56 0

45、 x78小端模式 一个基于ARM内核的芯片可以只支持大端模式或小端模式,也可以两者都支持。在ARM指令集中不包含任何直接选择大小端的指令,但是一个同时支持大小端模式的ARM芯片可以通过硬件配置(一般使用芯片的引脚来配置)来匹配存储器系统所使用的规则。2.12 存储器及存储器映射I/O 存储器格式注意:如果实际的存储器格式与芯片的存储器格式不符时,只有以字为单位的数据存取才正确,否则将出现不可预期的结果。ARM结构通常希望所有的存储器访问都合理的对齐。具体来说就是字访问的地址通常是字对齐的,而半字访问使用的地址是半字对齐的。不按这种方式对齐的存储器访问称为非对齐的存储器访问。将 一 个 非 字(

46、半 字)对 齐 的 地 址 写 入ARM(Thumb)状态的R15寄存器,将引起非对齐的指令取指。在一个非字(半字)对齐的地址读写一个字(半字),将引起非对齐的数据访问:2.12 存储器及存储器映射I/O 非对齐的存储器访问 基于ARM内核的芯片具有许多的外设,这些外设访问的标准方法是使用存储器映射的I/O,为外设的每个寄存器都分配一个地址。通常,从这些地址装载数据用于读入,向这些地址保存数据用于输出。有些地址的装载和保存用于外设的控制功能,而不是输入或输出功能。2.12 存储器及存储器映射I/O 存储器映射的I/O注意:存储器映射的I/O位置的操作不同于正常的存储器位置的操作。通常,存储器映

47、射的I/O位置没有高速缓存和无缓冲区。2.12 存储器及存储器映射I/O 存储器映射的I/O存储器区memory外设区域地址空间0 x000000000 xE0000000ARM核操作外设操作存储器存储器控制器2.12 存储器及存储器映射I/O 使用C语言如何访问存储器和外设uint32 IOStatus;IOStatus=IO0PIN;.#define IO0PIN(*(volatile unsigned long*)0 xE0028000).电脑打铃器硬件框图CPULPC2132键盘输入输出接口2005年11月1 11:00 星期六 下次动作:1-2 11:10液晶显示任务1键盘检测任务4输出控制任务3信息显示任务2键盘处理用户模式USR系统模式SYS管理模式SVCIRQ模式IRQFIQ模式FIQ中止模式未定义abt/undThumb 状态ARM 状态任务1按键检测任务2按键处理任务3信息显示任务4输出控制IRQ2按键中断IRQ3秒中断系统调用1关闭IRQ系统调用2打开IRQ系统调用系统调用n任务切换IRQ1系统节拍FIQ1掉电处理While(1)电脑打铃器程序分布示意图其它代码操作系统内核 思考与练习?1.我们已经学习了ARM的模式和状态等知识,请考虑如何将原有的程序移植到ARM上运行,模式和状态要如何选择?

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

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁