单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第二章 ARM处理器基础,一、ARM7处理器概述,二、ARM处理器的数据格式,三、处理器模式与内部寄存器,四、ARM的异常处理,五、本节附录,第二章 ARM处理器基础 一、ARM7处理器概述,1,一、ARM7处理器概述,ARM7TDMI是一个32位的微处理器核, 基于精简指令集(RISC)的原理设计而成的。处理器的译码结构相对简单;处理器内含集成元件的门数相对减少,功耗降低。,ARM7微处理器系列,特点:,1、,32位嵌入式RISC处理器;,2、,支持多种低功耗模式;,3、,支持片上调试功能,通过JTAG连接;,4、,实时中断处理系统;,5、,3级指令流水线,具有很高的指令吞吐量。,一、ARM7处理器概述ARM7TDMI是一个32位的微处理,2,1、,32位ARM指令集,兼容16位Thumb 指令集;,2、,不但支持32位,16位的数据类型,也支持8位数据类型;,3、,和51系列相似的中断向量结构;,4、,支持协处理器。,V4指令体系的特点:,1、32位ARM指令集,兼容16位Thumb 指令集;V4指,3,ARM7微处理器核功能框图,A31:0:地址总线。,D31:0:数据总线。,ABORT:存储器中止逻辑。,BIGEND:数据格式大端、小端控制逻辑。,MAS1:0:决定数据字长的控制逻辑。,nFIQ:快速中断请求逻辑。,nIRQ:通用中断请求逻辑。,DM4:0:处理器工作模式控制逻辑。,ARM7微处理器核功能框图 A31:0:地址总线。,4,流水线级数越多,说明单位时间内执行的条数就越多。,计算机在执行程序时的3个步骤:,第一步是,取指,:,即把指令从程序存储器中取出来。取指是在处理器内核和程序存储器之间进行的;,第二步是,译码,:,把读到内核的指令进行解释,也就是把二进制的指令变换成电路的动作;,第三步是,执行,:,即按照指令的要求把门电路的动作送到指定的目标地址。,1.1 三级流水线结构,流水线级数越多,说明单位时间内执行的条数就越多。1.1 三级,5,ARM处理器的取指、译码和执行3个步骤是同时进行的。,三级流水线结构的ARM7指令执行示意图,8位单片机以l2个时钟周期为一个机器周期,一个机器周期里完成对一条程序的取指、译码和执行三个步骤。,8位单片机指令执行示意图,ARM处理器的取指、译码和执行3个步骤是同时进行的。 三级流,6,对于3级流水线的指令执行过程,在做程序设计时要注意以下几点:,程序计算器R15(PC)总是指向取指的指令,而不是指向正在执行的指令或正在译码的指令。,对于ARM指令,因为每条指令占4个字节,所以有:,PC值 = 当前程序执行位置 + 4 + 4,对于Thumb指令,因为每条指令占2个字节,所以有:,PC值 = 当前程序执行位置 + 2 + 2,2. 程序发生中断或跳转时,执行完当前的指令后,程序执行地址将发生变化。,3. 在计算多个指令执行时间时,必须注意时间是重叠的,而不是衔接的。,对于3级流水线的指令执行过程,在做程序设计时要注意以下几点:,7,二、ARM处理器的数据格式,1.1 存储空间格式,ARM7TDMI处理器采用冯诺依曼(Von Neumann)结构,指令和数据共用一条32位数据总线,存储器中的内容即可以是指令代码也可以是数据。,ARM7TDMI处理器将存储器看作是一个从零开始的线性递增的字节集合,处理器的可寻址范围是0232-1个字节,共有4GB地址空间。,ARM7TDMI处理器采用存储器映像方式,互不冲突。,ARM7TDMI没有专门的I/O指令,对存储器的访问和对I/O端口的访问采用同样的指令,唯一区别的是它们的地址空间。,二、ARM处理器的数据格式 1.1 存储空间格式,8,LPC2000系列处理器把4GB的地址空间统一划分为若干个地址区间分配给片内Flash、片内RAM、片外存储器、VPB外设、AHB外设。,ARM体系结构的两种存储数据格式:,小端存储格式;,大端存储格式。,LPC2200地址映射,LPC2000系列处理器把4GB的地址空间统一划分为若干个地,9,1、小端存储格式(Little Endian),低字节的内容保存在低地址空间里,高字节的内容保存在高地址空间里的存储方式称为,小端存储格式,。,假设有一个32位的数据0xA9876543,它要保存到地址范围为0x0000 0x0003的存储区中。按小端存储格式存储 :,4个字节保存1个字内容,2个半字保存1个字内容,注意:处理器在半字、字进行操作的时候要注意地址对准的要求。,1、小端存储格式(Little Endian)低字节的内容,10,2、大端存储格式(Big Endian),字数据的高字节存储在低地址中,而字数据的低字节则存储在高地址中的存储方式称为,大端存储格式,。,假设一个32位的数据0xA9876543,保存到起始地址为0x0000的存储空间里,按大端存储格式对数据进行存储。,注意:大端存储格式是也要对准地址。,4个字节保存1个字内容,2个半字保存1个字内容,2、大端存储格式(Big Endian) 字数据的高字节存,11,3、两种存储格式的比较,1、,在两种存储格式下,对一个字或一个半字的内容存储,其存储结果是不同的;,2、,在这两种存储格式中,半字与字的存储地址没有发生变化;,3、,以ARM为内核的处理器都支持两种存储格式,具体设置见具体处理器的说明。,3、两种存储格式的比较1、在两种存储格式下,对一个字或一个半,12,1.2 ARM处理器的程序与数据存储,程序,是ARM处理器可以运行的指令代码;,数据,是指令在运行中用到的操作数或者变量。,1、程序存储,ARM处理器支持两种指令:,ARM汇编指令:,ARM汇编指令是32位长,ARM处理器在执行地址a的ARM汇编指令时,会从地址a + 4取下一条指令。,Thumb汇编指令:,Thumb汇编指令是16位长,ARM处理器在执行地址a的Thumb汇编指令时,会从地址a + 2取下一条指令。,ARM7TDMI内核的两种工作状态:,ARM状态,:此时执行32位字对齐的ARM汇编指令。,THUMB状态,:此时执行16位半字对齐的THUMB汇编指令。,1.2 ARM处理器的程序与数据存储 程序是ARM处理器可以,13,2、数据存储,ARM7处理器对数据操作(读或写)支持三种数据长度:字节(8位)、半字(16位)、字(32位)。,字节,:从地址0x0000处取一个字节数据,则取出来的内容为12;从地址0x0001处取一个字节数据,则取出来的内容为34;,半字,:从地址0x0000处取一个半字数据,则取出来的内容为3412;从地址0x0001处取一个半字数据,则取出来的内容为5634;,字,:从地址0x0000处取一个字数据,则取出来的内容为78563412;从地址0x0001处取一个字数据,则取出来的内容为9A785634。,注意:ARM7处理器在对数据操作时要边界对齐,要找到正确的地址。,2、数据存储字节:从地址0x0000处取一个字节数据,则取出,14,三、处理器模式与内部寄存器,1.1处理器模式,ARM7TDMI内核支持7种操作模式:,用户模式(usr),: 运行应用程序的普通模式;,快中断模式(fiq):,用来处理外设引发的快速中断;,中断模式(irq):,用来处理通用中断;,管理模式(svc),: 主要用于 SWI(软件中断)和 OS (操作系,统)。此模式有额外的特权,允许程序员进,一步控制处理器;,中止模式(abt),: 当数据或预取指失败时进入;,系统模式(sys),: 是操作系统的特权用户模式;,未定义模式(und),: 当未定义的指令被执行时进入。,三、处理器模式与内部寄存器 1.1处理器模式 ARM7TD,15,1.2内部寄存器,寄存器类别,寄存器在汇编中的名称,各模式实际访问的寄存器,用户 系统,管理,中止,未定义,中断,快中断,通用寄存器,程序计数器,R0,(,a1,),R0,R1,(,a2,),R1,R2,(,a3,),R2,R3,(,a4,),R3,R4,(,v1,),R4,R5,(,v2,),R5,R6,(,v3,),R6,R7,(,v4,),R7,R8,(,v5,),R8,R8_fiq,R9,(,SB,v6,),R9,R9_fiq,R10(SL,v7),R10,R10_fiq,R11(FP,v8),R11,R11_fiq,R12,(,IP,),R12,R12_fiq,R13,(,SP,),R13,R13_svc,R13_abt,R13_und,R13_irq,R13_fiq,R14,(,LR,),R14,R14_svc,R14_abt,R14_und,R14_irq,R14_fiq,R15,(,PC,),R15,状态寄存器,CPSR,CPSR,SPSR,无,SPSR_svc,SPSR_abt,SPSR_und,SPSR_irq,SPSR_fiq,ARM状态下的寄存器组织结构 (阴影部分的寄存器都是私有寄存器),1.2内部寄存器寄存器类别寄存器在汇编中的名称各模式实际访问,16,2、堆栈指针 R13,寄存器R13(也称为堆栈指针或SP)有6个分组的物理寄存器。,寄存器R13通常作为堆栈指针SP。,3、链接寄存器 R14,寄存器R14(也称为链接寄存器或LR)有6个分组的物理寄存器。,寄存器R14有三种用途:,1、当发生异常时,它被设置为该异常返回地址;,2、在执行分支和链接(BL)指令时,它用于保存子程序的返回地址;,3、而在其他时候,作为一个通用寄存器来对待。,1、一般通用寄存器 R0R12,寄存器R0R12为保存数据或地址值的一般通用寄存器。,寄存器R0R7为未分组的寄存器;,寄存器R8R12为分组寄存器。,4、程序计数器 R15,寄存器R15(也称为程序计数器或PC)总是用于特殊用途,它总是指向下一条要读取指令的地址。,5、CPSR和SPSR,所有模式共享一个程序状态寄存器CPSR。,2、堆栈指针 R133、链接寄存器 R141、一般通用寄存器,17,1.3 程序状态寄存器,ARM7TDMI包含1个当前程序状态寄存器(CPSR)和5个备份的程序状态寄存器(SPSR)。,程序状态寄存器包含如下内容:,04:设置处理器的运行模式;,5:指示当前处理器工作状态;,6、7:控制中断的允许和禁止;,2831:保存ALU当前操作的有关信息。,1.3 程序状态寄存器 ARM7TDMI包含1个当前程序状态,18,1、控制位,CPSR的低8位称为控制位。,对各控制位的定义如下:, T标志位,该位反映处理器的操作状态。, 中断禁止位,I和F是中断禁止位。, 操作模式位,MO,M1,M2,M3和M4(M4:0)是模式位,这些位决定了处理器的操作模式。,1、控制位 T标志位,19,2、条件码标志位,在ARM状态下,绝大多数指令都是有条件执行指令;在THUMB状态下,仅有分支指令是有条件执行指令。,各条件码标志位的具体含义,标志位,含义,N,运算结果的符号位。对于有符号二进制补码,结果为负时,N=1;结果为正或零时,N=0。,Z,Z=1表示运算的结果为零(通常表示比较结果“相等”);Z=0表示运算的结果不为零。,C,分4种情况设置C的值,- 加法运算 当运算结果产生进位时,C=1;否则C=0,- 减法运算 当运算产生借位时,C=0;否则C=1,- 包含移位操作的非加/减运算指令 C为移出值的最后一位,- 其他的非加/减运算指令 C的值通常不变,V,分2种情况设置V的值,- 加/减法运算指令 当发生有符号溢出时,V=1;否则,V=0,- 其他的非加/减运算指令 V的值通常不变,3、保留位,CPSR中和其余位为保留位。,2、条件码标志位各条件码标志位的具体含义 标志位含义N运算结,20,四、ARM的异常处理,1.1 进入/退出异常,1、进入异常,内核刚进入异常状态时,会依次采取以下动作:, 将原来执行的程序的下一条指令地址保存到链接寄存器(LR)中。, 复制CPSR到相应的SPSR进行保存。, 根据发生的异常类型改变CPSR的模式位的值。, 令程序计数器(PC)的值指向异常处理向量所指的下一条指令。, 这时也可能设置中断禁能标志,以防止不可估计的异常嵌套发生。,四、ARM的异常处理1.1 进入/退出异常,21,2、退出异常, 当完成异常处理,将退出该异常状态时,处理器应该进行如下动作:, 将SPSR内容复制到CPSR中。, 清除中断禁止标志。, 移出LR并减去相应的偏移量后赋值给PC。,退出异常处理采用的语句,异常或入口,LR保存值,返回指令,注释,BL(跳转指令),RA + 4,MOV PC,R14,RA(Run Addr)是指在进入异常前或程序发生跳转前执行的最后一条程序的物理地址。,SWI(软中断),RA + 4,MOVS PC,R14,未定义的指令,RA + 4,MOVS PC,R14,预取中止,RA + 4,SUBS PC,R14,#4,快中断,RA + 4,SUBS PC,R14,#4,中断,RA + 4,SUBS PC,R14,#4,数据中止,RA + 8,SUBS PC,R14,#8,复位,-,-,2、退出异常退出异常处理采用的语句 异常或入口LR保存值返回,22,以BL指令为例,下面解释为什么BL的返回指令是:MOV PC,R14。,例,:某段汇编指令, MOV R1,#1, BL next, ADD R1,#2, next,当处理器执行第条语句时,第条语句正在译码,PC指向第条语句的地址。第条语句是一个BL跳转指令,译码结果告诉处理器,程序的执行要发生跳转,所以指令预取被中断,即PC不会指向第条语句,仍保持指向第条语句的地址。“BL next”指令执行时,会将PC值(第条语句的地址)复制到LR中,然后跳转到next子程序运行,当子程序运行完,要想回到第条语句继续执行,只要在next子程序最后加上指令“MOV PC,R14”即可。,以BL指令为例,下面解释为什么BL的返回指令是:MOV P,23,1.2 六种异常模式,1、软件中断(SWI),执行软件中断指令将引发软件中断,并进入管理模式。,退出异常处理执行的语句:,MOV PC,R14,2、未定义指令(UDef),当内核遇到一个它不能执行的指令,立即调用一个未定义指令陷阱处理程序。,陷阱处理程序离开异常时执行的语句:,MOVS PC,R14,1.2 六种异常模式 MOV PC,R142、未定义指令,24,3、快速中断请求(FIQ),FIQ异常通常是用来支持数据传输和通道操作的;FIQ中断是由外部设备通过拉低nFIQ引脚触发的。,FIQ处理程序在离开中断处理时执行的语句:,SUBS PC,R14,#4 ;PC R14-4,FIQ异常可以通过设置CPSR中的F标志位来禁止(用户模式下除外)。,4、中断请求(IRQ),IRQ是支持普通中断操作的。当nIRQ上有低电平输入时将触发该中断。,退出IRQ中断处理时,采用的语句:,SUBS PC,R14,4;PC R14-4,IRQ也可以通过设备CPSR中的I标志来禁止(特权模式下)。,3、快速中断请求(FIQ) SUBS PC,R1,25,5、中止(Abort),Abort的产生,说明当前的处理器操作不能完成。该情况可以通过ABORT输入信号来告知处理器。,ABORT异常包括以下两种类型:,预取指异常,发生在预取指令时。,退出预取指异常处理程序。,SUBS PC, R14,4 ;PC R14-4,数据异常,发生在数据操作时。,通过以下中断处理程序退出语句:,SUBS PC, R14,8 ;PC R14-8,5、中止(Abort)ABORT异常包括以下两种类型:,26,1.3 异常中断向量与优先级,当异常发生时,PC会跳转到异常中断的向量地址处开始执行程序 。,地址,异常中断类型,入口时处理器的操作模式,0x0000 0000,复位,管理,0x0000 0004,未定义指令,未定义,0x0000 0008,SWI(软件中断),管理,0x0000 000C,中止(预取指),中止(取址),0x0000 0010,中止(数据),中止(数据),0x0000 0014,保留,保留,0x0000 0018,IRQ,IRQ,0x0000 001C,FIQ,FIQ,1.3 异常中断向量与优先级 当异常发生时,PC会跳转到异常,27,五、本节附录,1.1 ARM处理器系列,1、ARM7微处理器系列 :,ARM7系列微处理器为低功耗的32位RISC处理器,最适合于对价位和功耗要求比较严格的消费类应用。,2、ARM9微处理器系列:,ARM9系列微处理器在高性能和低功耗特性方面提供最佳的性能。,3、ARM9E微处理器系列 :,ARM9E系列微处理器为可综合处理器,使用单一的处理器内核提供了单片机、DSP、Java 应用系统的解决方案。,五、本节附录1.1 ARM处理器系列,28,4、ARM10E微处理器系列 :,ARM10E系列微处理器具有高性能、低功耗的特点。,5、SecurCore微处理器系列 :,SecurCore具有ARM体系结构的低功耗、高性能的特点外,还提供了对安全解决方案的支持。,6、StrongARM微处理器系列 :,Intel StrongARM 处理器是采用ARM体系结构且高度集成的32位RISC微处理器。,7、Xscale微处理器系列 :,Xscale微处理器是基于ARMv5TE体系结构的解决方案,是一款全性能、高性价比、低功耗的微处理器。,4、ARM10E微处理器系列 :,29,1.2,Thumb状态下的寄存器集,Thumb状态下,可直接访问的寄存器:,8个通用的寄存器R0R7;,程序计数器PC;,堆栈指针(SP);,链接寄存器(LR);, CPSR(有条件的访问)。,1.2 Thumb状态下的寄存器集 Thumb状态下,可直,30,Thumb状态下的寄存器集,寄存器类别,寄存器在汇编中的名称,各模式实际访问的寄存器,用户 系统,管理,中止,未定义,中断,快中断,通用寄存器、,程序计数器,R0(a1),R0,R1(a2),R1,R2(a3),R2,R3(a4),R3,R4(v1),R4,R5(v2),R5,R6(v3),R6,R7(v4),R7,SP,R13,R13_svc,R13_abt,R13_und,R13_irq,R13_fiq,LR,R14,R14_svc,R14_abt,R14_und,R14_irq,R14_fiq,PC,R15,状态,CPSR,CPSR,Thumb状态下的寄存器集 寄存器类别寄存器在汇编中的名称各,31,ARM状态寄存器与Thumb状态寄存器的关系:, Thumb状态的R0R7与ARM状态的R0R7相同;, Thumb状态的CPSR和SPSR与ARM状态的CPSR和SPSR相同;, Thumb状态的SP映射到ARM状态的SP(R13);, Thumb状态的LR映射到ARM状态的LR(R14);, Thumb状态的PC映射到ARM状态的PC(R15)。,ARM状态寄存器与Thumb状态寄存器的关系:,32,思考与练习,1、ARM7TDMI采用几级流水线?程序是如何执行的?这与普通的8位单片机有何不同?,2、ARM处理器支持哪两种存储格式?这两种存储格式在存储字内容上有区别吗?这两种存储格式在存储字节内容上有何区别?,3、存储单元中可以保存程序和数据。如果从存储单元取指令,那么我们应该注意什么?如果从存储单元取数据,我们又应该注意什么?,4、ARM7TDMI内核支持哪7种操作模式,这些操作模式各自用在什么场合?,5、SP、LR和PC分别使用了哪个寄存器?它们分别有什么作用?,6、ARM处理器有哪两种操作模式共用了所有的寄存器?有哪些寄存器在所有的模式下都是共用的?,7、CPSR寄存器中哪些位用来定义处理器状态?哪些位用来定义处理器模式?,8、描述一下如何禁止或打开IRQ中断,如何禁止和打开FIQ中断?,9、简述ARM异常中断的分类情况?,10、简单描述一下ARM处理器如何进入异常和退出异常?,11、请描述一下ARM7TDMI产生异常的条件分别是什么?每种异常产生后会从哪个地址取指令?各个异常的返回指令又是什么?,12、当多个异常同时产生时,ARM处理器会如何处理?,13、定义R0=0x12345678,假设使用存储指令STR将R0的值存放在0x4000单元中。如果存储器格式为大端格式,请写出在执行加载指令LDR将存储器0x4000单元的内容取出存放到R2寄存器操作后所得R2的值;如果存储器格式改为小端格式,所得的R2值又是多少?低地址0x4000单元的字节内容分别是多少?,13、在ARM微处理器中,ARM7TDMI中的“TDMI”是什么含义。,思考与练习1、ARM7TDMI采用几级流水线?程序是如何执行,33,