《北航《嵌入式系统》课件-第三章.ppt》由会员分享,可在线阅读,更多相关《北航《嵌入式系统》课件-第三章.ppt(122页珍藏版)》请在三一办公上搜索。
1、3,C H A P T E R,ARM7体系结构,第3章 目录,1.简介2.ARM7TDMI3.ARM7TDMI的模块和内部框图4.体系结构直接支持的数据类型5.处理器状态6.处理器模式7.内部寄存器8.程序状态寄存器,9.异常10.复位11.存储器及存储器映射I/O,第3章 目录,1.简介2.ARM7TDMI3.ARM7TDMI的模块和内部框图4.体系结构直接支持的数据类型5.处理器状态6.处理器模式7.内部寄存器8.程序状态寄存器,9.异常10.复位11.存储器及存储器映射I/O,3.1 ARM简介,ARM公司简介,ARM是Advanced RISC Machines的缩写,它是一家微处理
2、器行业的知名企业,该企业设计了大量高性能、廉价、耗能低的RISC(精简指令集)处理器。公司的特点是只设计芯片,而不生产。它将技术授权给世界上许多著名的半导体、软件和OEM厂商,并提供服务。,3.1 ARM简介,ARM公司简介,将技术授权给其它芯片厂商,形成各具特色的ARM芯片,3.1 ARM简介,微处理器是整个系统的核心,通常由3大部分组成:控制单元、算术逻辑单元和寄存器。,3.1 ARM简介,ARM处理器的应用当前主要应用于消费类电子领域;到目前为止,基于ARM技术的微处理器应用约占据了32位嵌入式微处理器75以上的市场份额全球80%的GSM/3G手机、99%的CDMA手机以及绝大多数PDA
3、产品均采用ARM体系的嵌入式处理器,“掌上计算”相关的所有领域皆为其所主宰。ARM技术正在逐步渗入到我们生活的各个方面。,3.1 ARM简介,ARM体系结构,ARM处理器为RISC芯片,其简单的结构使ARM内核非常小,这使得器件的功耗也非常低。它具有经典RISC的特点:,3.1 ARM简介,ARM体系结构,ARM体系结构的特点:,3.1 ARM简介,各ARM体系结构版本,ARM体系结构从最初开发到现在有了很大的改进,并仍在完善和发展。为了清楚的表达每个ARM应用实例所使用的指令集,ARM公司定义了6种主要的ARM指令集体系结构版本,以版本号V1V6表示。,3.1 ARM简介,各ARM体系结构版
4、本V1,该版本的ARM体系结构,只有26位的寻址空间,没有商业化,其特点为:基本的数据处理指令(不包括乘法);字节、字和半字加载/存储指令;具有分支指令,包括在子程序调用中使用的分支和链接指令;在操作系统调用中使用的软件中断指令。,3.1 ARM简介,各ARM体系结构版本V2,同样为26位寻址空间,现在已经废弃不再使用,它相对V1版本有以下改进:具有乘法和乘加指令;支持协处理器;快速中断模式中的两个以上的分组寄存器;具有原子性加载/存储指令SWP和SWPB。,3.1 ARM简介,各ARM体系结构版本V3,寻址范围扩展到32位(目前已废弃),具有独立的程序:具有乘法和乘加指令;支持协处理器;快速
5、中断模式中具有的两个以上的分组寄存器;具有原子性加载/存储指令SWP和SWPB。,3.1 ARM简介,各ARM体系结构版本V4,不在为了与以前的版本兼容而支持26位体系结构,并明确了哪些指令会引起未定义指令异常发生,它相对V3版本作了以下的改进:半字加载/存储指令;字节和半字的加载和符号扩展指令;具有可以转换到Thumb状态的指令(BX);增加了用户模式寄存器的新的特权处理器模式。,3.1 ARM简介,各ARM体系结构版本V5,在V4版本的基础上,对现在指令的定义进行了必要的修正,对V4版本的体系结构进行了扩展并并增加了指令,具体如下:改进了ARM/Thumb状态之间的切换效率;E-增强型DS
6、P指令集,包括全部算法操作和16位乘法操作;J-支持新的JAVA,提供字节代码执行的硬件和优化软件加速功能。,3.1 ARM简介,ARM处理器核简介,ARM公司开发了很多系列的ARM处理器核,目前最新的系列已经是ARM11了,而ARM6核以及更早的系列已经很罕见了。目前应用比较广泛的系列是:,ARM7,ARM9,ARM9E,ARM10,SecurCore,Xscale,ARM11,Cortex,3.1 ARM简介,3.1 ARM简介,3.1 ARM简介,3.1 ARM简介,3.1 ARM简介,3.1 ARM简介,第3章 目录,1.简介2.ARM7TDMI3.ARM7TDMI的模块和内部框图4.
7、体系结构直接支持的数据类型5.处理器状态6.处理器模式7.内部寄存器8.程序状态寄存器,9.异常10.复位11.存储器及存储器映射I/O,3.2 ARM7TDMI,简介,ARM7TDMI基于ARM体系结构V4版本,是目前低端的ARM核。具有广泛的应用,其最显著的应用为数字移动电话。,注意:“ARM核”并不是芯片,ARM核与其它部件如RAM、ROM、片内外设组合在一起才能构成现实的芯片。,3.2 ARM7TDMI,简介,ARM7TDMI支持32位寻址范围,并弥补了ARM6不能在低于5V电源电压下工作的不足。ARM7TDMI的后缀意义为:,3.2 ARM7TDMI,简介,ARM7TDMI处理器是A
8、RM通用32位微处理器家族的成员之一。它具有优异的性能,但功耗却很低,使用门的数量也很少。它属于精简指令集计算机(RISC),比复杂指令集计算机(CISC)要简单得多。这样的简化实现了:,高的指令吞吐量;出色的实时中断响应;小的、高性价比的处理器宏单元。,3.2 ARM7TDMI,三级流水线,ARM7TDMI处理器使用流水线来增加处理器指令流的速度。这样可使几个操作同时进行,并使处理和存储器系统连续操作,能提供0.9MIPS/MHz的指令执行速度。ARM7TDMI的流水线分3级,分别为:取指译码执行,3.2 ARM7TDMI,存储器访问,ARM7TDMI处理器使用了冯诺依曼(Von Neuma
9、nn)结构,指令和数据共用一条32位总线。只有装载、存储和交换指令可以对存储器中的数据进行访问。数据可以是字节(8位)、半字(16位)或者字(32位)。,第3章 目录,1.简介2.ARM7TDMI3.ARM7TDMI的模块和内部框图4.体系结构直接支持的数据类型5.处理器状态6.处理器模式7.内部寄存器8.程序状态寄存器,9.异常10.复位11.存储器及存储器映射I/O,3.3 系统内部结构图,ARM7TDMI处理器部件和主要信号路径的框图如图所示。它内部由处理器核、用于边界扫描的TAP控制器和在线仿真器ICE组成。双向数据总线D31:0被分割成单向输入和输出总线,以便于与外部存储器兼容。,3
10、.3 ARM7TDMI的模块和内核框图,ARM7TDMI模块,地址寄存器,寄存器组31*32位寄存器(6个状态寄存器),地址增量器,乘法器,桶形移位器,32位ALU,写数据寄存器,指令流水线读数据寄存器Thumb指令译码器,指令译码和逻辑控制,ADDR31:0,CLK,CLEN,CFGBIGEND,nIRQ,nFIQ,nRESET,ABORT,LOCK,WRITE,SIZE1:0,PROT1:0,TRANS1:0,DBG输出,DBG输入,CP控制,CP握手,WDATA31:0,RDATA31:0,扫描调试控制,A总线,B总线,ALU总线,增量器总线,PC总线,3.3 ARM7TDMI功能信号图
11、,ARM7TDMI,第3章 目录,1.简介2.ARM7TDMI3.ARM7TDMI的模块和内部框图4.体系结构直接支持的数据类型5.处理器状态6.处理器模式7.内部寄存器8.程序状态寄存器,9.异常10.复位11.存储器及存储器映射I/O,3.4 体系结构直接支持的数据类型,体系结构直接支持的数据类型,ARM处理器支持下列数据类型:字节 8位半字 16位(必须分配为占用两个字节)字 32位(必须分配为占用4各字节),体系结构直接支持的数据类型,注意:V4版本之后的ARM结构都支持这3种结构(包括V4版本),而以前的版本只支持字节和字;当数据类型定义为无符号型时,N位数据值使用正常的二进制格式表
12、示范围为02N-1的非负整数;当数据类型定义为有符号型时,N位数据值使用2的补码格式表示范围为-2N-1+2N-1-1的整数;,3.4 体系结构直接支持的数据类型,体系结构直接支持的数据类型,注意:所有数据操作,例如ADD,都以字为单位;装载和保存指令可以对字节、半字和字进行操作,当装载字节或半字时自动实现零扩展或符号扩展;ARM指令的长度刚好是1个字(分配为占用4个字节),Thumb指令的长度刚好是半字(占用2个字节)。,3.4 体系结构直接支持的数据类型,第3章 目录,1.简介2.ARM7TDMI3.ARM7TDMI的模块和内部框图4.体系结构直接支持的数据类型5.处理器状态6.处理器模式
13、7.内部寄存器8.程序状态寄存器,9.异常10.复位11.存储器及存储器映射I/O,3.5 处理器状态,处理器状态,ARM7TDMI处理器内核使用V4T版本的ARM结构,该结构包含32位ARM指令集和16位Thumb指令集。因此ARM7TDMI处理器有两种操作状态:ARM状态:32位,这种状态下执行的是字方式的ARM指令;Thumb状态:16位,这种状态下执行半字方式的ARM指令。,注意:两个状态之间的切换并不影响处理器模式或寄存器内容。,3.5 处理器状态,处理器状态,使用BX指令将ARM7TDMI内核的操作状态在ARM状态和Thumb状态之间进行切换(详见第4章),程序如下所示。,;从Ar
14、m状态切换到Thumb状态 LDR R0,=Lable+1 BX R0;从Thumb状态切换到ARM状态 LDR R0,=Lable BX R0,地址最低位为1,表示切换到Thumb状态,地址最低位为0,表示切换到ARM状态,跳转地址标号,第3章 目录,1.简介2.ARM7TDMI3.ARM7TDMI的模块和内部框图4.体系结构直接支持的数据类型5.处理器状态6.处理器模式7.内部寄存器8.程序状态寄存器,9.异常10.复位11.存储器及存储器映射I/O,3.6 处理器模式,处理器7种模式,3.6 处理器模式,特权模式,除用户模式外,其它模式均为特权模式。ARM内部寄存器和一些片内外设在硬件设
15、计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。,3.6 处理器模式,异常模式,这五种模式称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。,3.6 处理器模式,用户和系统模式,这两种模式都不能由异常进入,而且它们使用完全相同的寄存器组。系统模式是特权模式,不受用户模式的限制。操作系统在该模式下访问用户模式的寄存器就比较方便,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。,第
16、3章 目录,1.简介2.ARM7TDMI3.ARM7TDMI的模块和内部框图4.体系结构直接支持的数据类型5.处理器状态6.处理器模式7.内部寄存器8.程序状态寄存器,9.异常10.复位11.存储器及存储器映射I/O,3.7 内部寄存器,简介,在ARM7TDMI处理器内部有37个用户可见的寄存器。在不同的工作模式和处理器状态下,程序员可以访问的寄存器也不尽相同。,ARM状态各模式下的寄存器,ARM状态各模式下的寄存器,所有的37个寄存器,分成两大类:31个通用32位寄存器;6个状态寄存器。,ARM状态各模式下可以访问的寄存器,一般的通用寄存器,在汇编语言中寄存器R0R13为保存数据或地址值的通
17、用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。,一般的通用寄存器,其中R0R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。,一般的通用寄存器,寄存器R8R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器,一般的通用寄存器,寄存器R8R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。,一般的通用寄存器,寄存器R13、R14分别有6个分组的物理
18、寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。,堆栈指针寄存器R13(SP),寄存器R13常作为堆栈指针(SP)。在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都这样使用。但是在Thumb指令集中存在使用R13的指令。,链接寄存器R14(LR),R14为链接寄存器(LR),在结构上有两个特殊功能:在每种模式下,模式自身的R14版本用于保存子程序返回地址;当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。,3.7 内部寄存器,R14(LR)寄存器与子程序调用,MOV PC,LR,R14(地址A),1.程序A执行过
19、程中调用程序B;,操作流程,2.程序跳转至标号Lable,执行程序B。同时硬件将“BL Lable”指令的下一条指令所在地址存入R14(LR);,3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;,3.7 内部寄存器,R14寄存器与异常发生,异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序调用类似,都是由硬件完成的。区别在于有些异常有一个小常量的偏移。,3.7 内部寄存器,R14寄存器注意要点,当发生异常嵌套时,这些异常之间可能会发生冲突。例如:如果用户在用户模式下执行程序时发生了IRQ中断,用户模式寄存器不会被破坏。但是如果允许在IRQ模式下的中断处理程序重新使能I
20、RQ中断,并且发生了嵌套的IRQ中断时,外部中断处理程序保存在R14_irq中的任何值都将被嵌套中断的返回地址所覆盖。,3.7 内部寄存器,R14寄存器注意要点,a,return,地址A,1.执行用户模式下的程序;,2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;,3.IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;,未被破坏,R14_irq,3.7 内部寄存器,R14寄存器注意要点,a,地址A,1.执行用户模式下的程序;,2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_ir
21、q寄存器,用户模式下的R14没有被破坏;,3.IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;,未被破坏,a,return,地址B,4.如果在IRQ处理程序中打开IRQ中断,并且再次发生IRQ中断;,5.硬件将返回地址保存在R14_irq寄存器中,原来保存的返回地址将被覆盖,造成错误;,R14_irq 被破坏,6.在程序B返回到程序A,然后在返回到用户模式下被中断的程序时,发生错误,将不能正确返回;,return,return,解决办法是确保R14的对应版本在发生中断嵌套时不再保存任何有意义的值(将R14入栈),或者切换到其它处理器模式下。,
22、程序计数器R15(PC),寄存器R15为程序计数器(PC),它指向正在取指的地址。可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。如果R15使用的方式超出了这些限制,那么结果将是不可预测的。,3.7 内部寄存器,读R15的限制,正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条ARM指令的长度)。由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。,3.7 内部寄存器,读R15的限制,当使用STR或STM指令保存R15时,会有一个例外。这些指令可能将当前指令地址加8字节或加12字节保存(将来可能还有其它数字
23、)。偏移量是8还是12取决于具体的ARM芯片,但是对于一个确定的芯片,这个值是一个常量。所以最好避免使用STR和STM指令来保存R15,如果很难做到,那么应当在程序中计算出该芯片的偏移量。,3.7 内部寄存器,读R15的限制,计算偏移量(PC值和当前指令地址的差)程序代码:,SUBR1,PC,#4;R1=下面STR指令的地址STRPC,R0;保存STR指令地址+偏移量LDRR0,R0;然后重装SUBR0,R0,R1;计算偏移量,0,4,8,12,ARM状态,3.7 内部寄存器,写R15的限制,正常操作时,写入R15 的值被当作一个指令地址,程序从这个地址处继续执行(相当于执行一次无条件跳转)。
24、,3.7 内部寄存器,写R15的限制,由于ARM指令以字节为边界,因此写入R15的值最低两位通常为0b00。具体的规则取决于内核结构的版本:在ARM结构V3版及以下版本中,写入R15的值的最低两位被忽略,因此跳转地址由指令的实际目标地址(写入R15的值)和0 xFFFFFFFC相与得到;在ARM结构V4版及以上版本中,写入R15的值的最低两位为0,如果不是,结果将不可预测。,程序状态寄存器CPSR,寄存器CPSR为程序状态寄存器,在异常模式中,另外一个寄存器“程序状态保存寄存器(SPSR)”可以被访问。每种异常都有自己的SPSR,在进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPS
25、R。详细描述参看3.8小节。,3.7 内部寄存器,ARM状态和Thumb状态之间寄存器的关系,Thumb状态寄存器与ARM状态寄存器有如下的关系:Thumb状态R0R7与ARM状态R0R7相同;Thumb状态CPSR和SPSR与ARM状态CPSR和SPSR相同;Thumb状态SP映射到ARM状态R13;Thumb状态LR映射到ARM状态R14;Thumb状态PC映射到ARM状态PC(R15)。,Thumb状态寄存器在Arm状态寄存器上的映射,低寄存器,高寄存器,3.7 内部寄存器,在Thumb状态中访问高寄存器,在Thumb状态中,高寄存器(R8R15)不是标准寄存器集的一部分。汇编语言程序员
26、对它们的访问受到限制。可以使用MOV、CMP和ADD指令对高寄存器操作,详见第4章。,第3章 目录,1.简介2.ARM7TDMI3.ARM7TDMI的模块和内部框图4.体系结构直接支持的数据类型5.处理器状态6.处理器模式7.内部寄存器8.程序状态寄存器,9.异常10.复位11.存储器及存储器映射I/O,3.8 程序状态寄存器,简介,ARM7TDMI内核包含1个CPSR和5个供异常处理程序使用的SPSR。CPSR反映了当前处理器的状态,其包含:4个条件代码标志(负(N)、零(Z)、进位(C)和溢出(V));2个中断禁止位,分别控制一种类型的中断;5个对当前处理器模式进行编码的位;1个用于指示当
27、前执行指令(ARM还是Thumb)的位。,3.8 程序状态寄存器,简介,条件代码标志,保留,控制位,溢出标志 oVerflow,进位或借位扩展 Carry,零 Zero,负或小于 Negative,IRQ禁止 Interrupt,FIQ禁止 Fast,状态位 Thumb,模式位 Mode,N,Z,C,V,I,T,F,CPSR寄存器的格式,3.8 程序状态寄存器,简介,每个异常模式还带有一个程序状态保存寄存器(SPSR),它用于保存在异常发生之前的CPSR。CPSR和SPSR通过特殊指令(MRS、MSR)进行访问。,3.8 程序状态寄存器,条件代码标志,大多数“数值处理指令”可以选择是否影响条件
28、代码标志位。通常如果指令带S后缀,则该指令的执行会影响条件代码标志;但有一些指令的执行总是会影响条件代码标志。N、Z、C和V位都是条件代码标志。算术操作、逻辑操作、MSR或者LDM指令可以对这些位进行设置。所有ARM指令都可按条件来执行,而Thumb指令中只有分支指令可按条件执行。,3.8 程序状态寄存器,条件代码标志,各标志位的含义如下:N 运算结果的最高位反映在该标志位。对于有符号二进制补码,结果为负数时N=1,结果为正数或零时N=0;Z 指令结果为0时Z=1(通常表示比较结果“相等”),否则Z=0;,3.8 程序状态寄存器,条件代码标志,各标志位的含义如下:C 当进行加法运算(包括CMN
29、指令),并且最高位产生进位时C=1,否则C=0。当进行减法运算(包括CMP 指令),并且最高位产生借位时C=0,否则C=1。对于结合移位操作的非加法/减法指令,C为从最高位最后移出的值,其它指令C通常不变;V当进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V通常不变。,3.8 程序状态寄存器,控制位,CPSR的最低8位为控制位,当发生异常时,这些位被硬件改变。当处理器处于一个特权模式时,可用软件操作这些位。它们分别是:中断禁止位;T位;模式位。,3.8 程序状态寄存器,控制位,中断禁止位包括I和F位:当I位置位时,IRQ中断被禁止;当F位置位时,FIQ中断被禁止。T位反映
30、了正在操作的状态:当T位为1时,处理器正在Thumb状态下运行;当T位清零时,处理器正在ARM状态下运行。,3.8 程序状态寄存器,控制位,模式位包括M4、M3、M2、M1和M0,这些位决定处理器的操作模式。注意:不是所有模式位的组合都定义了有效的处理器模式,如果使用了错误的设置,将引起一个无法恢复的错误。,CPSR模式位设置表,3.8 程序状态寄存器,保留位,CPSR中的保留位被保留将来使用。为了提高程序的可移植性,当改变CPSR标志和控制位时,请不要改变这些保留位。另外,请确保程序的运行不受保留位的值影响,因为将来的处理器可能会将这些位设置为1或者0。,第3章 目录,1.简介2.ARM7T
31、DMI3.ARM7TDMI的模块和内部框图4.体系结构直接支持的数据类型5.处理器状态6.处理器模式7.内部寄存器8.程序状态寄存器,9.异常10.复位11.存储器及存储器映射I/O,3.9 异常,简介,只要正常的程序流被暂时中止,处理器就进入异常模式。例如响应一个来自外设的中断。在处理异常之前,ARM7TDMI内核保存当前的处理器状态(CPSR-SPSR),这样当处理程序结束时可以恢复执行原来的程序(SPSR-CPSR)。如果同时发生两个或更多异常,那么将按照固定的顺序来处理异常,详见“异常优先级”部分。,异常入口/出口汇总,注意:“MOVS PC,R14_svc”是指在管理模式执行MOVS
32、 PC,R14指令。“MOVS PC,R14_und”、“SUBS PC,R14_abt,#4”等指令也是类似的。,3.9 异常,异常的入口和出口处理,如果异常处理程序已经把返回地址拷贝到堆栈,那么可以使用一条多寄存器传送指令来恢复用户寄存器并实现返回。,SUB LR,LR,#4;计算返回地址STMFD SP!,R0-R3,LR;保存使用到的寄存器.LDMFD SP!,R0-R3,PC;中断返回,中断处理代码的开始部分和退出部分,如果异常处理程序已经把返回地址拷贝到堆栈,那么可以使用一条多寄存器传送指令来恢复用户寄存器并实现返回。,中断处理代码的开始部分和退出部分,3.9 异常,异常的入口和出
33、口处理,SUB LR,LR,#4;计算返回地址STMFD SP!,R0-R3,LR;保存使用到的寄存器.LDMFD SP!,R0-R3,PC;中断返回,注意:中断返回指令的寄存器列表(其中必须包括PC)后的“”符号表示这是一条特殊形式的指令。这条指令在从存储器中装载PC的同时(PC是最后恢复的),CPSR也得到恢复。这里使用的堆栈指针SP(R13)是属于异常模式的寄存器,每个异常模式有自己的堆栈指针。这个堆栈指针应必须在系统启动时初始化。,3.9 异常,进入异常,在异常发生后,ARM7TDMI内核会作以下工作:,1.在适当的LR中保存下一条指令的地址,当异常入口来自:ARM状态,那么ARM7T
34、DMI将当前指令地址加4或加8复制(取决于异常的类型)到LR中;为Thumb状态,那么ARM7TDMI将当前指令地址加2、4或加8(取决于异常的类型)复制到LR中;异常处理器程序不必确定状态。,3.9 异常,进入异常,在异常发生后,ARM7TDMI内核会作以下工作:,2.将CPSR复制到适当的SPSR中;3.将CPSR模式位强制设置为与异常类型相对应的值;4.强制PC从相关的异常向量处取指。,ARM7TDMI内核在中断异常时置位中断禁止标志,这样可以防止不受控制的异常嵌套。注:异常总是在ARM状态中进行处理。当处理器处于Thumb状态时发生了异常,在异常向量地址装入PC时,会自动切换到ARM状
35、态。,3.9 异常,进入异常,当异常结束时,异常处理程序必须:1.将LR(R14)中的值减去偏移量后存入PC,偏移量根据异常的类型而有所不同;2.将SPSR的值复制回CPSR;3.清零在入口置位的中断禁止标志。注:恢复CPSR的动作会将T、F和I位自动恢复为异常发生前的值。,3.9 异常,退出异常,图示进入异常过程,1.程序在系统模式下运行用户程序,假定当前处理器状态为Thumb状态、允许IRQ中断;,2.用户程序运行时发生IRQ中断,硬件完成以下动作:,置位I位(禁止IRQ中断)清零T位(进入ARM状态)设置MOD位,切换处理器模式至IRQ模式,将下一条指令的地址存入IRQ模式的LR寄存器,
36、将CPSR寄存器内容存入IRQ模式的SPSR寄存器,将跳转地址存入PC,实现跳转,BackAddr,JumpAddr,“?”表示对该位不关心,在异常处理结束后,异常处理程序完成以下动作:,图示退出异常过程,将SPSR寄存器的值复制回CPSR寄存器;,将LR寄存的值减去一个常量后复制到PC寄存器,跳转到被中断的用户程序。,BackAddr,JumpAddr,return,BackAddr-4,“?”表示对该位不关心,快速中断请求(FIQ)适用于对一个突发事件的快速响应,这得益于在ARM状态中,快中断模式有8个专用的寄存器可用来满足寄存器保护的需要(这可以加速上下文切换的速度)。不管异常入口是来自
37、ARM状态还是Thumb状态,FIQ处理程序都会通过执行下面的指令从中断返回:SUBS PC,R14_fiq,#4 在一个特权模式中,可以通过置位CPSR中的F位来禁止FIQ异常。,3.9 异常,快速中断请求,中断请求(IRQ)异常是一个由nIRQ输入端的低电平所产生的正常中断(在具体的芯片中,nIRQ由片内外设拉低,nIRQ是内核的一个信号,对用户不可见)。IRQ的优先级低于FIQ。对于FIQ序列它是被屏蔽的。任何时候在一个特权模式下,都可通过置位CPSR中的I 位来禁止IRQ。不管异常入口是来自ARM状态还是Thumb状态,IRQ处理程序都会通过执行下面的指令从中断返回:SUBS PC,R
38、14_irq,#4,3.9 异常,中断请求,中止发生在对存储器的访问不能完成时,中止包含两种类型:预取中止 发生在指令预取过程中数据中止 发生在对数据访问时,3.9 异常,中止,当发生预取中止时,ARM7TDMI内核将预取的指令标记为无效,但在指令到达流水线的执行阶段时才进入异常。如果指令在流水线中因为发生分支而没有被执行,中止将不会发生。在处理中止的原因之后,不管处于哪种处理器操作状态,处理程序都会执行下面的指令恢复PC和CPSR并重试被中止的指令:SUBS PC,R14_abt,#4,3.9 异常,中止预取指中止,当发生数据中止后,根据产生数据中止的指令类型作出不同的处理:,3.9 异常,
39、中止数据中止,数据转移指令(LDR、STR)回写到被修改的基址寄存器。中止处理程序必须注意这一点;交换指令(SWP)中止好像没有被执行过一样(中止必须发生在SWP指令进行读访问时);,在修复产生中止的原因后,不管处于哪种处理器操作状态,处理程序都必须执行下面的返回指令,重试被中止的指令:SUBS PC,R14_abt,#8,3.9 异常,中止数据中止,使用软件中断(SWI)指令可以进入管理模式,通常用于请求一个特定的管理函数。SWI处理程序通过执行下面的指令返回:MOVS PC,R14_svc 这个动作恢复了PC并返回到SWI之后的指令。SWI处理程序读取操作码以提取SWI函数编号。,3.9
40、异常,软件中断指令,当ARM7TDMI处理器遇到一条自己和系统内任何协处理器都无法处理的指令时,ARM7TDMI内核执行未定义指令陷阱。软件可使用这一机制通过模拟未定义的协处理器指令来扩展ARM指令集。注:ARM7TDMI处理器完全遵循ARM结构v4T,可以捕获所有分类未被定义的指令位格式。,3.9 异常,未定义的指令,在模拟处理了失败的指令后,陷阱程序执行下面的指令:MOVS PC,R14_svc 这个动作恢复了PC并返回到未定义指令之后的指令。,3.9 异常,未定义的指令,异常向量,注:表中的I和F表示不对该位有影响,保留原来的指。高向量地址:0 xFFFF00000 xFFFF001C
41、实现定义,当多个异常同时发生时,一个固定的优先级系统决定它们被处理的顺序:,3.9 异常,异常优先级,第3章 目录,1.简介2.ARM7TDMI3.ARM7TDMI的模块和内部框图4.体系结构直接支持的数据类型5.处理器状态6.处理器模式7.内部寄存器8.程序状态寄存器,9.异常10.复位11.存储器及存储器映射I/O,3.10 复位,复位,当nRESET信号被拉低时(一般外部复位引脚电平的变化和芯片的其它复位源会改变这个内核信号),ARM7TDMI处理器放弃正在执行的指令。在复位后,除PC和CPSR之外的所有寄存器的值都不确定。,3.10 复位,复位,当nRESET信号再次变为高电平时,AR
42、M处理器执行下列操作:1.强制CPSR中的M4:0变为b10011(管理模式);2.置位CPSR中的I和F位;3.清零CPSR中的T位;4.强制PC从地址0 x00开始对下一条指令进行取指;5.返回到ARM状态并恢复执行。,第3章 目录,1.简介2.ARM7TDMI3.ARM7TDMI的模块和内部框图4.体系结构直接支持的数据类型5.处理器状态6.处理器模式7.内部寄存器8.程序状态寄存器,9.异常10.复位11.存储器及存储器映射I/O,3.11 存储器及存储器映射I/O,简介,ARM7TDMI处理器采用冯诺依曼(Von Neumann)结构,指令和数据共用一条32位数据总线。只有装载、保存
43、和交换指令可访问存储器中的数据。,3.11 存储器及存储器映射I/O,简介,ARM7的规范仅定义了处理器核与存储系统之间的信号及时序(局部总线),而实际的芯片一般在外部总线与处理器核的局部总线之间有一个存储器管理部件将局部总线的信号和时序转换为现实的外部总线信号和时序。因此,外部总线的信号和时序与具体的芯片相关,不是ARM7的标准。具体到某个芯片的外部存储系统的设计需要参考其芯片的数据手册等资料。,存储器控制器,存储器,3.11 存储器及存储器映射I/O,简介,ARM7定义了局部总线的接口时序,各芯片厂商制定了自己的接口时序,ARM7局部总线,一般在两者之间加入存储器控制器,3.11 存储器及
44、存储器映射I/O,简介,ARM7TDMI处理器将存储器看作是一个从0开始的线性递增的字节集合:字节0到3保存第1个存储的字字节4到7保存第2个存储的字字节8到11保存第3个存储的字依此类推,字节,字节,字节,字节,地址A,A+1,A+2,A+3,字节,字节,字节,字节,字节,字节,字节,字节,字节,字节,字节,字节,0,4,8,3.11 存储器及存储器映射I/O,简介,ARM7TDMI处理器可以将存储器中的字以下列格式存储:大端格式(Big-endian)小端格式(Little-endian),3.11 存储器及存储器映射I/O,存储器格式,地址空间的规则:位于地址A的字包含的字节位于地址A,
45、A+1,A+2和A+3;位于地址A的半字包含的字节位于地址A和A+1;位于地址A+2的半字包含的字节位于地址A+2和A+3;位于地址A的字包含的半字位于地址A和A+2;,存储器系统有两种映射机制:小端存储器系统:在小端格式中,高位数字存放在高位字节中。因此存储器系统字节0连接到数据线70(低位对齐)。大端存储器系统:在大端格式中,高位数字存放在低位字节中。因此存储器系统字节0连接到数据线3124(高位对齐)。,3.11 存储器及存储器映射I/O,存储器格式,一个基于ARM内核的芯片可以只支持大端模式或小端模式,也可以两者都支持。通常,小端模式是ARM处理器的默认形式。在ARM指令集中不包含任何
46、直接选择大小端的指令,但是一个同时支持大小端模式的ARM芯片可以通过硬件配置(一般使用芯片的引脚来配置)来匹配存储器系统所使用的规则。,3.11 存储器及存储器映射I/O,存储器格式,注意:如果实际的存储器格式与芯片的存储器格式不符时,只有以字为单位的数据存取才正确,否则将出现不可预期的结果。,3.11 存储器及存储器映射I/O,地址空间,ARM结构使用单个平面的232个8位字节地址空间。字节地址按照无符号数排列,从0到2321。地址空间可以看作是包含230个32位字,或231个16位半字。如果地址向上或向下溢出地址空间,通常会发生翻转。注意:如果在取指操作时地址发生溢出,只要没有执行预取的无
47、效指令,就不会导致异常。,ARM结构通常希望所有的存储器访问都合理的对齐。具体来说就是字访问的地址通常是字对齐的,而半字访问使用的地址是半字对齐的。不按这种方式对齐的存储器访问称为非对齐的存储器访问。将一个非字(半字)对齐的地址写入ARM(Thumb)状态的PC(R15)寄存器,将引起非对齐的指令取指。在一个非字(半字)对齐的地址读写一个字(半字),将引起非对齐的数据访问:,3.11 存储器及存储器映射I/O,未对齐的存储器访问,许多ARM实现在前一条指令的执行尚未完成时将指令从存储器中取出。这个动作称为指令的预取。指令的预取并不是实际执行指令。芯片的生产厂商可以自由选择预取指令的数目。被预取
48、的指令可能得不到运行,可能的原因是:发生异常;发生跳转;,3.11 存储器及存储器映射I/O,指令的预取和自修改代码,当读取PC时,得到的指令地址比正在执行指令的地址落后两条指令:对于ARM指令,得到的地址是它自身地址+8;对于Thumb指令,得到的地址是它自身地址+4;,3.11 存储器及存储器映射I/O,指令的预取和自修改代码,基于ARM内核的芯片具有许多的外设,这些外设访问的标准方法是使用存储器映射的I/O,为外设的每个寄存器都分配一个地址。通常,从这些地址装载数据用于读入,向这些地址保存数据用于输出。有些地址的装载和保存用于外设的控制功能,而不是输入或输出功能。,3.11 存储器及存储器映射I/O,存储器映射的I/O,注意:存储器映射的I/O位置的操作不同于正常的存储器位置的操作。通常,存储器映射的I/O位置没有高速缓存和无缓冲区。,