第,8,章 总线,8.1,概述,,8.2 ARM,处理器,,8.3 Inter PXA 27X,介绍,,习题,8.1.1 PXA27X,概述,PXA27X,是一种高性能、低功耗,(,可达到,MIPS/mW),、功能强劲的,SOC,处理器,它采用,Intel,公司的,XScale,结构在,PXA27X,中包括了除浮点运算指令之外的全部,ARM V5TE,的指令集,同时还包括,Intel,公司的整数无线,MMX,指令这就使得该处理器的指令功能及对多媒体信号的处理能力十分强大8.1,概 述,,PXA270,有两种封装形式:,13 mm × 13 mm,的,FVBGA,和,23 mm × 23 mm,的,PBGA,前者有,356,条球状引线而后者有,360,条球状引线PXA27X,的结构框图如图,8.1,所示在图,8.1,中,实线框起来的各个部分组成了,PXA27X,芯片,实线框之外是芯片外接的部分由图,8.1,可以看到,在硬件上,PXA27X,包括如下部分:,PXA27X,内部集成有,4,个体的,SRAM,,每个体,64 KB,,,4,个体共,256 KB,PXA27X,内部有,LCD,控制器,可以支持显示分辨度达,800 × 600,像素的,LCD,显示。
该处理器集成有存储器控制器,(,见图,8.1,虚线框部分,),,该控制器提供了各种控制信号,用以支持芯片外部外接,SDRAM,、闪速存储器、,PC,卡等存储器件的工作在,PXA27X,外部最多可接,1 GB,的,SDRAM,、,384 MB,的闪速存储器图,8.1 PXA27X,处理器结构框图,,PXA27X,内部集成有,USB,主控制器,也集成有,USB,的客户控制器这样一来,在未来的工作中,,PXA27X,既可工作为主控制器,又可以作为系统中的客户接受其他,USB,主控制器的管理PXA27X,集成有电源管理模块,对芯片上电、睡眠、看门狗等多种功能实施管理PXA27X,有时钟管理模块,能对片内多种时钟进行管理在,PXA27X,中集成了多种外设接口,在图,8.1,的左侧可以看到,许多经常用到的外设,(,总线,),接口均已集成在芯片中同时,这些外设,(,总线,),接口引线中,有许多都是可以双重定义或多重定义的,既可以定义为某种外设的接口信号引线,当不用该外设时,这些引线又可以用作通用的输入,/,输出信号线,这就是图,8.1,中所标的通用,I/O(GPI/O),为测试芯片方便,,PXA27X,还集成有,JTAG,接口。
通过上面的描述,我们可以了解到,PXA27X,处理器的大致组成显然,其结构是比较复杂的,功能也非常强在本章后面的内容中,将对,PXA27X,的某些部分进行详细讲述,但不可能将所有内容全都说清楚,因为,PXA27X,所涉及的内容实在太多了8.1.2 Intel XScale,结构,当前,在厂家设计,SOC,时,都是将多个处理器的功能整合到,SOC,中,例如将,ARM,与,DSP,、,MCU,与,DSP,集成在,SOC,中集成电路加工技术使线条宽度达到几十纳米,使这种多个处理器的结合成为现实Intel XScale,结构的处理器就是这种理念的体现1,.,Intel XScale,结构处理器硬件,Intel XScale,结构处理器硬件结构框图如图,8.2,所示图,8.2 XScale,结构框图,,2,.,Intel XScale,硬件结构说明,由图,8.2,可以看到这种结构的处理器是由哪些部分构成的下面将简单说明硬件的各部分Intel XScale,是以,ARM,公司的,RISC,处理器,ARM V5TE,为基础的,再将功能监视单元,CP14,、配置寄存器,CP15,、乘法,/,累加器,CP0(,协处理器,),等,16,个协处理器整合进去,使得由,Intel XScale,为处理器核的,PXA27X,系列的处理器具有很强的处理能力。
在,Intel XScale,核中还集成了具有单指令多数据,(SIMD),结构的协处理器,能够完成整数的,MMX,指令及,SIMD,扩展指令,(SSE),,更有利于多媒体信号的处理 在,Intel XScale,中,有三部分高速缓存,Cache,及相应的存储器管理单元,无疑对提高,Intel XScale,的总体性能大为有利Intel XScale,具有对外的协处理器接口,还可以外接诸如,DSP,这样的处理器在,PXA270,中就可外接专门用于多媒体处理的单指令流多数据流,(SIMD),协处理器Intel XScale,中有对嵌入式系统非常重要的两类中断:一般中断,IRQ,和快速中断,FIQ, 在,Intel XScale,中还包括用于测试的,DEBUG,及,JTAG, 显然,在,Intel XScale,中还有超级流水线、分支预测等一系列提高性能的硬件措施考虑到读者将来主要是应用,SOC,芯片构成嵌入式系统而不是设计,SOC,芯片,对于,Intel XScale,更详细的内容不再说明8.2 ARM,处理器,8.2.1 ARM,处理器系列,,,ARM,处理器是由,ARM,公司设计的,这是一家专门设计,IP(,知识产权,),的供应商。
该公司既不生产芯片也不生产整机,只卖,IP,核但该公司所设计的,ARM,处理器是,32,位的,RISC,处理器,由于其性能高、功耗低、性价比高,已被全球各大半导体公司所使用1,.,ARM,体系结构,ARM,体系结构从诞生至今共有六个版本,从,V1,到,V6,显然,版本低的功能要差一些,版本愈高功能愈强ARM,公司依据不同的体系结构版本设计出多种,ARM,处理器这些处理器在功能上有一些差异,这就形成了,ARM,处理器的多种不同变种,主要的有如下几种:,1) T,变种,T,变种是指在,ARM,处理器中包含有,Thumb,指令集ARM,处理器指令的长度是固定的,所有的指令均为,32,位在其,T,变种中除,32,位指令外还包括指令长度为,16,位的,Thumb,指令集2) M,变种,M,变种在,ARM,指令集中包含有,4,条长乘法指令,这些指令能完成,32,位,× 32,位,= 64,位的乘法及,32,位,× 32,位,+ 64,位,= 64,位的乘加运算的功能3) E,变种,E,变种为增强,DSP(,数字信号处理器,),指令变种,在该变种的,ARM,指令集中包含一些典型的完成,DSP,算法的一些指令。
4) J,变种 该变种将,Java,加速器,Jazelle,加到,ARM,处理器中,可以大大提高,Java,程序的运行速度5) SIMD,变种 该变种将单指令流多数据流的系统结构思想加入到,ARM,处理器中,这可以有效地提高对多媒体信号,——,音频及视频信号的处理能力2,.,ARM/Thumb,体系结构命名,目前正在使用的,ARM/Thumb,体系结构版本如表,8.1,所示由表,8.1,可以看到,在,PXA27X,中所集成的,ARM v5TE,版本的处理器已经具有相当好的性能表,8.1 ARM,的体系结构版本,8.2.2 ARM,处理器的工作模式及寄存器,1,.,ARM,处理器的工作模式,ARM,处理器会运行在如下,7,种工作模式之下:,1),用户模式,usr,大多数应用程序都工作在用户模式之下,在此模式之下应用程序不能使用受操作系统保护的资源也就是说,用户模式具有较低的资源利用级别2),特权模式,svc,这是供操作系统使用的一种保护模式操作系统工作在特权模式之下,原则上允许它控制系统的所有资源3),数据中止模式,abt,该模式用于实现虚拟存储器或对存储器的保护4),未定义指令中止模式,und,这种模式用于对硬件协处理器软件仿真。
5),一般中断请求模式,irq,这种模式用于一般的外部中断请求,类似于前面,8086,的,INTR,6),快速中断请求模式,fiq,该模式支持高速数据传送或通道方式,其具有更高的优先级7),系统模式,sys,系统模式主要为操作系统任务所用,它与用户模式使用完全一样的寄存器但在该摸式下,任务可以使用系统的所有资源,在这种意义上讲它也属于特权模式2,.,ARM,处理器的内部寄存器,从本书前面的章节中已经看到,要学好、用好某种处理器,必须掌握好其内部寄存器这对后面的指令系统、编程及应用都很重要对于,ARM,处理器来说也是这样,读者必须认真理解该处理器的,37,个内部寄存器ARM,的内部寄存器如表,8.2,所示表,8.2,不同工作模式下的寄存器,在,ARM,处理器的,37,个寄存器中,包括,31,个通用寄存器和,6,个状态寄存器所有这些寄存器都是,32,位的 由表,8.2,可以看到,,ARM,处理器工作在不同模式之下,所使用的寄存器是不一样的一种模式对应一组寄存器,这一组寄存器包括通用寄存器,R0,~,R14,、程序计数器,PC,和一个或两个状态寄存器这些寄存器中,有一些是共用的,有一些则是不同模式所私有的。
1),通用寄存器 通用寄存器为,R0,~,R15,,它们又分为,3,类: ● 不分组寄存器,R0,~,R7,这,8,个,32,位的寄存器是为每一种,ARM,处理器运行模式所用,也就是说在每种模式下使用的同一个物理寄存器在使用中必须注意到,当中断或异常发生时,要进行模式切换,这时就需要保护这些寄存器的内容免遭破坏,以便在中断,(,异常,),返回时能接着中断,(,异常,),前的状态继续执行● 分组寄存器,R8,~,R14,这些寄存器在不同模式下访问的不是一个物理寄存器由表,8.2,可以看到,当在,fiq,模式时,使用的是与,R8,~,R14,对应的另外,7,个寄存器,R8_fiq,~,R14_fiq,在,fiq,模式下,原,R8,~,R14,不再使用在实际应用中,当响应,fiq,中断进入服务程序时,若服务程序不使用,R8,~,R14,,则它们的内容可不必保护由表,8.2,还可以看到,对于,R13,和,R14,来说,除了在,fiq,模式下使用,R13_fiq,和,R14_fiq,之外,在特权、中止、未定义及一般中断模式下,也分别对应自己的,R13,和,R14,这在编程使用,ARM,处理器时应予以注意,可以使用户保护现场,(,断点,),的操作更加简单。
另外,在使用中经常将,R13,用作堆栈指针,(,指示器,),当然,也可以用其他寄存器作为堆栈指针R14,称为连接寄存器,(,记为,LR),,它除了用作通用寄存器之外,还有两种特殊用途:,(1),每种模式自己的,R14,中存放当前子程序的返回地址,当子程序结束时,利用,R14,很容易返回主程序具体细节见本节后面的内容2),当异常发生时,可将该异常的特定的,R14,设置为此异常的返回地址,当该异常结束时,就很容易返回到异常发生时的程序● 程序计数器,(PC)R15,程序计数器在概念上与前面几章所描述的,80X86,的指令指针类似,但由于,ARM,的特点,它又有许多特殊的地方 在,ARM,中,指令长度均为,32,位,而地址都是按字节编址的因此,在这种情况下,,,由于,ARM,的指令都必须按,32,位字对齐,故,PC,的最低两位必须为,0,当,ARM,工作在,Thumb,状态下时,,PC,的最低位必须为,0,因为,Thumb,的指令全都是,16,位的当为改变程序执行顺序写入,PC,时,必须注意保证上述要求;否则将会产生不可预知的结果由于,ARM,采用流水线技术,当用指令读出,PC,值时,读出的,PC,值应是该指令的地址加,8,。
显然,在,Thumb,状态下,用指令读出,PC,值时,读出的,PC,值应是该指令的地址加,4,2),程序状态寄存器 程序状态寄存器有两种:当前程序状态寄存器,CPSR,和备份程序状态寄存器,SPSR,前者是所有模式所共用的,而后者则是在特定的异常模式下每个模式自己所特有的,由表,8.2,可以看得很清楚CPSR,和,SPSR,的格式是一样的,如图,8.3,所示为,CPSR,的格式图,8.3,程序状态寄存器格式,由图,8.3,可以看到,程序状态寄存器包括如下几部分: ● 条件标志位 图,8.3,中,,N,、,Z,、,C,、,V,四位称为条件标志位,与前面第,2,章中所描述的,8086,的对应标志位非常类似N,:负标志位当两数运算结果最高位为,1,时,,N=1,,表示运算结果为负数若结果最高位为,0,,则,N=0,,表示运算结果为一正数实际上它与,8086,的符号标志位,SF,没有什么区别Z,:零标志位它与,8086,的零标志位,ZF,是一样的,不再解释C,:进位标志该位与,8086,的进位标志位,CF,不太一样:当执行加法指令结果有进位时,C﹦1,;结果没有进位时,C﹦0,当执行减法指令结果有借位时,C﹦0,;结果没有借位时,C﹦1,。
V,:溢出标志位可与,8086,的溢出标志位,OF,一样理解 ●,Q,标志位 在,ARM,处理器的,E,系列,(,带有增强,DSP,指令,),或,v5,以上版本中,设置,Q,标志,用于标志执行增强,DSP,指令时是否发生溢出● 控制位 图,8.3,中最低,8,位为,CPSR,的控制位它们用于对,ARM,功能的控制,利用指令可以修改这些控制位a.,中断禁止位,其中,I,位与,80X86,中,IF,的功能是一样的,但定义相反在这里,当,I=0,时,允许,irq,中断;当,I=1,时,禁止,irq,中断与,I,位雷同,当,F=0,时,允许,fiq,中断;当,F=1,时,禁止,fiq,中断b. T,控制位,T,控制位用于控制,ARM,处理器执行,ARM,的,32,位指令和,Thumb,的,16,位指令之间进行切换当,T=0,时,,ARM,处理器执行,ARM,的,32,位指令; 当,T=1,时,,ARM,处理器执行,Thumb,的,16,位指令在,v5,及以上版本非,T,变种的,ARM,处理器中,,T,控制位的定义为: 当,T=0,时,,ARM,处理器执行,ARM,的,32,位指令; 当,T=1,时,执行下一条指令引起未定义异常。
c.,模式控制位,CPSR,中的,M0,~,M4,这,5,位用以控制,ARM,的运行模式,它们的不同编码可以规定,ARM,的模式具体的规定及在此模式下可以使用的寄存器如表,8.3,所示表,8.3,模式控制位及模式下可访问的寄存器,在表,8.3,中,用,0bxxxxx,表示,0b,之后为二进制编码 同时,表,8.3,中更加明确地指出了不同模式下可以访问的内部寄存器 ● 其他位 在,CPSR,中,除了上面定义的各位外,剩余的许多位尚未定义,留作今后扩展之用SPSR,的各位定义与,CPSR,相同,不需再作说明3,.,ARM,处理器的存储系统,1),寻址空间,ARM,的内存以字节编址,最大地址空间为,232,,用十六进制表示为从,0X00000000,到,0XFFFFFFFF,在,ARM,中,0X,后面的字符表示为十六进制数ARM,的地址空间也可以看做是,230,个,32,位的字单元或者是用,231,个,16,位的半字单元构成在前面的章节中已经说过,在,PC,中加上带符号的偏移量可以实现程序的转移在,ARM,中也是这样,执行转移指令可以实现程序的转移转移的目的地址为: 当前,(,转移,),指令的地址,+ 8 +,偏移量 在前面讲述,8086,段内相对转移时,目的地址是当前指令的地址加,2(,短转移,),或加,3(,近转移,),再加位移量。
在,ARM,中加,8,是因为其中有指令流水线而且,ARM,指令的长度都是,4,个字节2),内存存储格式 在,ARM,存储器中,数据在内存中的存放有两种格式:,(1),小端格式这种存储格式是一个,4,个字节的字或一个两个字节的半字,总是小地址存放低字节,大地址存放高字节其规则与前面的,80X86,是一样的例如,一个,32,位的字,0XA9876543,,存放在内存起始地址为,0X30000000,的顺序单元中,则最低字节,43,放入最小的,0X30000000,单元、,65,放入,0X30000001,单元,后面的字节依次存放2),大端格式大端格式与上述小端格式的存放顺序刚好相反,即小地址存放高字节,大地址存放低字节小端格式通常是,ARM,的缺省配置,通过硬件输入可以配置存储格式3) I/O,地址映射 如同前面提到的,,ARM,处理器采用内存与接口地址统一编址的方案也就是说,内存与接口共用一个,4 G,的地址空间,其中一部分分配给接口作为接口地址,其他部分用作内存地址用于内存的接口不能用,而用于接口的内存也不能用8.2.3 ARM,指令系统,ARM,是一种,RISC(,精减指令集计算机,),处理器,相对于,CISC(,复杂指令集计算机,),要简单一些。
但是,这是一种近几年才开发出来的高性能的,32,位处理器,其指令功能是很强的,相对也比较复杂本小节仅对,ARM,的指令系统进行一般性的介绍1,.,ARM,指令的一般格式,1),格式 一条典型的,ARM,指令的一般语法格式如下:,{}{},,,,,,,其中:,opcode,为操作码助记符,例如加法指令用,ADD,表示cond,为指令的执行条件码,详见下文S,用于决定该指令的执行是否影响,CPSR,Rd,表示目标寄存器Rn,表示保存第,1,个操作数的寄存器sthifter_oprand,表示第,2,个操作数的寄存器2),条件码 在,ARM,中定义的条件码与,8086,有许多类似的地方,读者可对照理解ARM,的条件码如表,8.4,所示图,8.4 ARM,的移位操作,,(a) LSL; (b) LSR; (c) ASR; (d) ROR; (e) RRX,表,8.4 ARM,处理器的条件码,,2,.寻址方式,有关寻址方式的概念前面第,3,章中已经说明,此处仅介绍,ARM,处理器的一些最基本的寻址方式1),寄存器寻址 操作数在寄存器中的寻址方式称为寄存器寻址例如:,ADD R1,,,R2,,,R3,;完成,R2+R3→R1,,2),立即寻址 操作数为立即数。
但,ARM,的立即数定义比较特殊,不是任意一个数都能定义为立即数只有一个,8,位数,循环右移偶数次,(0,、,2,、,4,、,6,…,30),,并且最多为循环右移,30,次,方可构成,32,位的二进制数 例如,,0XFF,、,0X104,、,0XFF0,、,0X3F0,、,0XFF00,、,0XF000000F,等是合法的而,0X101,、,0XFF1,等是非法的3),寄存器移位寻址 这种寻址方式是,ARM,处理器所特有的,在第,2,个寄存器操作数与第,1,个操作数进行某种运算之前,可先进行移位操作例如指令:,ADD R3,,,R2,,,R1,,,LSL #3,该指令是先将,R1,的内容逻辑左移,3,次,再与,R2,的内容相加,结果放在,R3,中ARM,处理器中的移位操作是针对,32,位的,概念上有些与,8086,一样,有些则不一样,具体说明如下:,LSL,——,逻揖左移;,LSR,——,逻揖右移;,ASR,——,算术右移;,ROR,——,循环右移;,RRX,——,大循环右移,即包括进位标志在内的循环右移图,8.4 ARM,的移位操作,,(a) LSL,;,(b) LSR,;,(c) ASR,;,(d) ROR,;,(e) RRX,,4),寄存器间接寻址 寄存器的内容作为操作数的地址。
例如指令:,LDR R0,,,[R3],该指令的操作就是以,R3,的内容作为操作数的地址,由该地址读一个,32,位的字放在,R0,中5),变址寻址 在此寻址方式中,操作数的地址是由寄存器的内容加上一个带符号的位移量来决定的,位移量的范围在,±4 KB,之间例如:,LDR R1,,,[R4,,,#8],该指令是从,R4,的内容加上,8,的内存地址开始,顺序取,4,个字节放在,R1,中6),多寄存器寻址 该寻址方式可用一条指令进行批量数据的传送例如:,LDMIA R0,,,{R5-R8},该指令能将,R0,的内容所指向的内存字到,R0,的内容,+12,所指向的内存字,(,共,4,个字,),顺序读出并存放在,R5,、,R6,、,R7,和,R8,中7),相对寻址 与,8086,一样,相对寻址用于转移指令,在这里还用于子程序调用该寻址方式以,PC,为基准,在其上加上带符号的位移量,从而改变了,PC,的内容,也就改变了程序的执行顺序,达到转移的目的位移量指出目的地址与现行指令之间的相对距离ARM,处理器在执行,BL,指令时要做两件事:,(1),将,BL,下一条指令的地址存入,R14(,即,LR),中。
2),将,PC,的内容加上指令中所带的经过运算的,24,位带符号的位移量,(,已变为,32,位,),构成新的,PC,的内容24,位带符号的位移量的运算是先将其符号位扩展为,32,位,再将扩展后的,32,位左移,2,位,这就是经过运算后的,32,位的位移量上述过程看起来似乎很复杂,但在实际编程中是非常简单的,在使用转移指令时,只需在指令中给出转移或调用的标号就可以了上述复杂的计算是由汇编程序来完成的,编程人员无须关心 但是,编程人员应当知道,在指令中包含的是,24,位的带符号,(,用补码表示,),的位移量,并且在计算目的地址时又符号扩展左移了,2,位因此,位移量相当于带符号的,26,的二进制数,这就规定了程序转移的范围大致在,-32 MB,到,+32 MB,之间 为了说明如何使用,BL,,用图,8.5,表示调用子程序的情况图,8.5,用,BL,指令调用子程序的过程,在图,8.5,中,利用一条横线代表一条指令当,ARM,执行,BL,指令时,它会自动将其下一条指令的地址保存在,R14,中然后,根据,24,位的位移量,程序转向,FUNCT11,去执行一个子程序在子程序结束时,可用指令,MOV PC,,,R14(,也可以用别的指令,),返回主程序。
3,.,ARM,的指令系统,1),内存访问指令 ● 语法格式,ARM,的访内指令有,4,种形式,它们的构造格式如下:,(1),零偏移格式:,{}{}{},,,,,(2),前索引偏移,在传送前将偏移量加到,Rn,中格式为:,{}{},,,<[Rn,,,Flexoffset]>{},,(3),相对偏移,标号地址必须在当前指令的,±4 KB,范围内格式为:,{}{},,,label,,(4),后索引偏移,在传送后将偏移量加到,Rn,中格式为:,{}{},,,<[Rn],,,Flexoffset>,上面格式中,可选后缀项,B,表示字节;可选后缀项,T,若存在,即使处理器在特权模式下,也将该指令看成是在用户模式之下;,Rd,为要加载或存储的内部寄存器;,Rn,为存储器的基地址;,Flexoffset,为偏移量;,label,为标号,表示相对偏移;!为可选后缀,有!后缀的指令将包括偏移量的地址写回,Rn,中● 指令列表,(1),用于字及字节操作的访内指令用于字及字节操作的访内指令如表,8.5,所示表,8.5,用于字及字节操作的访内指令,,(2),批量访内指令批量访内指令使用前面提到的多寄存器寻址,可以实现数据的批量写入内存和读出内存。
数据的堆栈操作也具有类似的情况,但是如前第,3,章所描述的,堆栈操作是先进后出的,这是堆栈操作指令的基本特征有关一般传送和堆栈操作指令如表,8.6,所示表,8.6,一般批量传送与堆栈传送对应表,上面的指令中所包括后缀的含义如下:,IA,——,事后递增方式;,IB,——,事先递增方式;,DA,——,事后递减方式;,DB,——,事先递减方式;,FD,——,满栈递减方式;,IB,——,空栈递减方式;,DA,——,满栈递增方式;,DB,——,空栈递增方式有关一般批量传送举例如下:,STMIA R9!,,{,R0,,,R1,,,R3,,,R5,} 该指令是以事后递增的方式将,R0,、,R1,、,R3,、,R5,这,4,个寄存器的内容放在,R9,的内容为地址的内存单元中,如图,8.6,所示图,8.6,指令,STMTA,的执行结果,在,ARM,处理器中,利用,R13,作为堆栈指针,堆栈可以是递增的也可以是递减的在以往的,CPU,中,,8086,是递减的而,MCS,—,51,是递增的,而,ARM,则具有这两种能力例如,将,R0,到,R7,这,8,个寄存器压栈和出栈可用下面的指令:,STMFD R13!,,,{R0-R7},,LDMFD R13!,,,{R0-R7},,2),数据处理指令,ARM,的数据处理指令包括:数据传送指令、算术运算指令和逻辑运算指令。
现将常用的指令列于表,8.7,中表,8.7 ARM,的数据处理指令,在这些数据处理指令中,许多与前面,8086,的指令类似,但又有自己的特点 指令,MOV,的语法格式为:,MOV {}{S},,,,其中:,{},具有可选条件,可有条件执行,也可以无条件执行;,,为目标寄存器;,,为第二操作数,非常灵活,可以是前面所提到的立即数、寄存器,也可以是经过移位的寄存器;,,{S},为可选项,若指令中有,S,,当指令中,Rd,为,R15,时,则将当前模式下的,SPSR,复制到,CPSR,中;若,Rd,不为,R15,,则指令执行将影响状态寄存器中的条件标志位,N,和,Z,,若有移位则有可能影响,C,标志位若指令中没有,S,,则不影响标志位举例如下,若在,irq,中断服务程序中最后出现指令:,MOVS PC, R14,该指令将,R14(LR),的内容复制到,PC,中,同时,将,SPSR_irq,的内容复制到,CPSR,中 对于本类中的其他指令不再详细介绍,仅举几条指令予以说明如下:,ADD R0,,,R1,,,R2,;,这条加法指令的功能很简单,即,R1+R2→R3, 下面的指令可以实现,R3R4R5,-,R6R7R8→R0R1R2,的,96,位整数减法运算,最后的结果放在,R0R1R2,中。
SUBS R2,,,R5,,,R8,,SBCS R1, R4,,,R7,,SBC R0,,,R3,,,R6,若要对操作数先取反再传送,可用数据取反传送指令:,MVN R4,,,R5,;将,R5,取反后送,R4,,3),乘法指令,ARM,的乘法指令包括,32,位乘法和,64,位乘法,有如表,8.8,所示的,6,条乘法指令ARM,的乘法指令同样非常灵活,功能很强32,位的,MLA,指令的语法格式为:,MLA {}{S},,,,,,,,,,该指令可以带条件,可以影响标志位,完成,Rm × Rs + Rn→Rd,64,位的,SMULL,指令的语法格式为,SMULL {}{S},,,,,,,,,,表,8.8 ARM,的乘法指令,同样,该指令可以带条件,可以影响标志位,完成,Rm×Rs=64,位积64,位积的高,32,位放,RdHi,,低,32,位放,RdLo,中 其他指令不再解释举例如下:,MUL R1,,,R2,,,R3,该指令完成,R2×R3→R1,UMULL R0,,,R1,,,R2,,,R3,该指令完成,R2×R3,,乘积高,32,位放,R1,,低,32,位放,R0,。
SMLALLES R6,,,R7,,,R8,,,R9,这是一条有条件执行的指令,实现,R8,与,R9,相乘得到,64,位的积,再加上,R7 R6,连到一起的,64,位,相加后的,64,位结果放在,R7 R6,中该指令执行结果还将影响标志位4),转移指令,ARM,的转移指令有如表,8.9,所示的,4,种B,及,BL,指令的语法格式为:,B{L}{},表,8.9 ARM,的转移指令,其中: 有,L,,规定将当前的,PC,值,(,该指令的下一条指令的地址,),保存在,R14(LR),寄存器中;无,L,则不保存此,PC,值该指令可带有前表,8.4,所列的条件,就构成了条件转移指令 指令中给出转移的目标地址,,,实际转移范围如前所述,大致在,±32 MB,之间 由于,BL,保存返回地址,因此它可以用于子程序调用BLX,指令有两种语法格式:,BLX {}Rm,,BLX label,执行上述指令,首先将该指令下一条指令的地址,(,返回地址,),存入,R14,;而后转移到由,Rm,所指定的绝对地址上或由,label,所决定的相对地址上去执行 值得注意的是:若,Rm,的最低有效位为,1(,即,bit0 = 1),,或者使用了,BLX label,形式的指令,则将,ARM,切换到,Thumb,指令集上去执行。
BX,指令可使程序产生转移,也可使,ARM,切换到,Thumb,指令集上去执行其格式为,BX {}Rm,该指令使,ARM,转移到,Rm,的内容所规定的地址上执行Rm,的最低位不用作地址,(32,位指令地址最低,2,位总为,0,;而,16,位指令地址最低位总为,0),当最低位为,1,时,则将,ARM,切换到,Thumb,指令集上去执行当,Rm,的最低位为,0,时,则其第,1,位,(,即,bit1),不能为,1,因为此时转移地址上执行的仍然是,32,位指令5) ARM,协处理器指令,ARM,支持,16,个协处理器,(CP,0,~,CP,15,),,在执行程序过程中,每一个协处理器只执行与自己有关的指令当协处理器不能执行属于该处理器的指令时,会产生未定义指令异常协处理器指令有,5,条,如表,8.10,所示表,8.10 ARM,的协处理器指令,指令,CDP,的语法格式为:,CDP{},,,,,,,,,,,,,,,{},其中:,,为指令执行的条件,也就是说该指令是可以带条件的,也可以无条件;,,为协处理器的编号;,,为协处理器将要执行的第,1,个操作码;,,为可选协处理器将要执行的第,2,个操作码;,,均为协处理器寄存器。
指令,MCR,的格式如下:,MCR{},,,,,,,,,,,,,,,{},格式中各部分的解释同上,其中,Rd,为,ARM,的寄存器,其内容将被传送到协处理器的寄存器中例如:,MCR p14,,,3,,,R7,,,c7,,,c11,,,6,该指令是将,ARM,的,R7,传送到协处理器,CP14,的寄存器,C7,和,C11,中,操作码,1,和,2,分别为,3,和,6,6),其他指令,ARM,处理器还有许多指令,下面将一些常用的指令列于表,8.11,中,并说明如下表,8.11 ARM,的一些其他指令,指令,MRS,的格式为,MRS {},,,,由指令格式可以看到,该指令可以有条件也可以无条件执行;,Rd,为目标寄存器;,PSR,可以是,CPSR,也可以是,SPSR,,由指令决定例如,指令,MRS R3,,,SPSR,该指令将当前模式下的,SPSR,的内容传送到寄存器,R3,中指令,MSR,的格式为,MSR {}_,,,,,MSR {}_,,,,其中:,{},为可选的条件项为,CPSR,或,SPSR,举例如下:,SWP R1,,,R2,,,[R3],该指令从,R3,的内容为地址的内存单元中读出数据放入,R1,中,同时将,R2,的内容存入该内存单元中。
软件中断指令,SWI,和断点中断指令,BKPT,的执行过程将在后面再作说明 以上对,ARM,处理器的主要指令做了最简单的介绍,以期使读者对指令系统能大致了解至于,16,位的,Thumb,指令,此处不再说明8.2.4 ARM,的异常中断处理,1) ARM,异常的种类 异常是由处理器内部或外部产生的引起处理器处理的一个事件在概念上,它与前面,80X86,中的异常非常类似ARM,支持,7,种异常,各种异常的类型以及处理这些异常的处理程序的起始地址如表,8.12,所示表,8.12 ARM,的异常及其处理程序的起始地址,在,ARM,中,可以配置上述异常的处理程序的起始地址,(,异常中断向量,),为正常地址或高向量地址ARM,的异常规定了不同的优先级,优先级序号小的优先级高,而序号大的优先级低2) ARM,处理器的异常中断响应过程 从应用的角度出发,我们认为异常,(,尤其是,irq,和,fiq),对将来的应用十分重要,下面将逐一加以说明● 复位 一旦复位启动,(,复位有效再变为无效,),,,ARM,处理器立刻停止执行指令,并开始执行下列操作:,R14,不确定,SPSR,不确定,CPSR[4:0] = 0b10011,——,即进入特权模式,CPSR[5] = 0,——,使,T=0,,进入,ARM,状态,CPSR[6] = 1,——,使,F=1,,禁止,fiq,中断,CPSR[7] = 1,——,使,I=1,,禁止,irq,中断,如果配置为正常地址,则,PC=0X00000000,;若为高向量地址,则,PC=0XFFFF0000,。
这样一来,一旦复位启动,ARM,,它永远都会从规定的配置地址开始执行● 未定义指令异常 当,ARM,执行未定义的指令,或者在执行协处理器指令时未能收到协处理器的响应时,均会产生未定义指令异常一旦异常发生,,ARM,将执行下面的一系列操作:,R14_und =,该未定义指令的下一条指令的地址,SPSR_und = CPSR,,CPSR[4:0] = 0b11011,——,即进入未定义模式,CPSR[5] = 0,——,使,T=0,,进入,ARM,状态,CPSR[6] =,不改变,CPSR[7] = 1,——,使,I=1,,禁止,irq,中断,如果配置为正常地址,则,PC = 0X00000004,;若为高向量地址,则,PC = 0XFFFF0004, 从上述过程可以看到,当执行一条未定义指令时,会产生未定义异常,响应中将其下一条指令的地址保存在,R14_und,中,并且将,CPSR,的内容放在,SPSR_und,中修改,CPSR,,进入未定义模式然后转向未定义异常处理程序的首地址,0X00000004(,或者,0XFFFF0004),其示意图如图,8.7,所示图,8.7,未定义异常响应、处理及返回过程,在,ARM,响应未定义异常时,处理器自动保护下一条指令的地址,(,即该未定义指令所对应的,PC,再加,4),和当时的,CPSR,。
在处理程序结束时,利用一条,MOVS PC,,,R14,指令便可以恢复,CPSR,并返回主程序执行● 软件中断指令,SWI,当,ARM,执行软件中断指令,SWI,时,,ARM,会自动完成如下操作:,R14_svc =,该未定义指令的下一条指令的地址,SPSR_svc = CPSR,,CPSR[4:0] = 0b10011,——,即进入特权模式,CPSR[5] = 0,——,使,T=0,,进入,ARM,状态,CPSR[6] =,不改变,CPSR[7] = 1,——,使,I=1,,禁止,irq,中断 如果配置为正常地址,则,PC = 0X00000008,;若为高向量地址,则,PC = 0XFFFF0008, 软件中断的响应、处理及返回过程可用图,8.8,来描述图,8.8 SWI,指令的响应、处理及返回过程,由图,8.8,可以看到,当,ARM,执行,SWI,指令时,首先将其下一条指令的地址,(,即,SWI,指令所对应的,PC,再加上,4),保存在,R14,中,并将当时的,CPSR,保存在,SPSR_svc,中修改,CPSR,的部分内容:进入特权模式、禁止,irq,、使工作于,ARM,状态,然后转向软件服务程序的首地址,0X00000008(,或,0XFFFF0008),,开始执行软件中断服务程序。
同样,在处理程序结束时,利用一条,MOVS PC, R14,指令便可以恢复,CPSR,并返回主程序执行● 预取中止异常 在指令预取时,若目标地址是非法的,则存储器系统发出标记信号,使所取指令无效,若,ARM,执行该无效指令就会产生预取中止异常当,ARM,执行断点中断指令时,也会发生预取中止异常ARM,响应预取中止异常的过程如下:,R14_abt =,该未定义指令的下一条指令的地址,(,中止指令的,PC+4),,SPSR_abt = CPSR,,CPSR[4:0] = 0b10111,——,即进入特权模式,CPSR[5] = 0,——,使,T = 0,,进入,ARM,状态,CPSR[6] =,不改变,CPSR[7] = 1,——,使,I = 1,,禁止,irq,中断 如果配置为正常地址,则,PC = 0X0000000C,;若为高向量地址,则,PC = 0XFFFF000C, 图,8.9,描述了预取中止异常响应处理及返回的过程图,8.9,预取中止异常的响应、处理及返回过程,在图,8.9,中,由处理程序返回时,若要回到预取中止指令,(,或,BKPT),上执行,就用,SUBS PC, R14, #4,指令。
因为在响应时,,R14,中保存的是,PC + 4,的值,(,指向预取中止指令的下一条指令,),,所以必须先将其值减,4,再送到,PC,中若要返回到预取中止指令的下一条指令,就用,MOVS PC, R14,指令,如图,8.9,中虚线所示● 数据中止异常 当执行存储器数据访问指令时,由存储器系统发出中止信号,使访问数据无效,则可产生数据中止异常其响应过程如下:,R14_abt =,该未定义指令的下一条指令的地址,+ 4(,或中止指令的,PC + 8),,SPSR_abt = CPSR,,CPSR[4:0] = 0b10111,——,即进入特权模式,CPSR[5] = 0,——,使,T=0,,进入,ARM,状态,,CPSR[6] =,不改变,CPSR[7] = 1,——,使,I = 1,,禁止,irq,中断 如果配置为正常地址,则,PC = 0X00000010,;若为高向量地址,则,PC = 0XFFFF0010, 图,8.10,描述了数据中止异常响应处理及返回的过程图,8.10,数据中止异常的响应、处理及返回过程,在图,8.10,中,由处理程序返回时,若要回到数据中止指令上执行,就用,SUBS PC, R14, #8,指令。
因为在响应时,,R14,中保存的是,PC + 8,的值,(,指向数据中止指令地址加,8),所以,若要返回到数据中止指令,则必须将,R14 -8,的值放,PC,若要使程序返回到数据中止指令的下一条指令,就用,SUBS PC, R14,,,#4,指令,如图,8.10,中虚线所示● 一般中断请求,irq,如同,80X86,一样,,ARM,是在一条指令结束时查询有无中断请 求,(irq,和,fiq),发生的对一般中断请求,irq,的响应过程执行如下操作:,R14_irq =,执行指令的下一条指令的地址,+ 4(,或中断发生时指令的,PC + 8),,SPSR_irq = CPSR,,CPSR[4:0] = 0b10010,——,即进入,irq,模式,CPSR[5] = 0,——,使,T=0,,进入,ARM,状态,CPSR[6] =,不改变,CPSR[7] = 1,——,使,I = 1,,禁止,irq,中断,如果配置为正常地址,则,PC = 0X00000018,;若为高向量地址,则,PC = 0XFFFF0018, 上述,irq,的响应过程及处理与返回的过程如图,8.11,所示由图,8.11,可以看到,在,ARM,响应,irq,时,在,R14(LR),中保存的是发生,irq,时正在执行指令的地址,也就是它所对应的,PC,再加,8,,这是由,ARM,的流水线结构所决定的,见图,8.11,箭头所示。
图,8.11 irq,的响应、处理及返回过程,中断响应过程中会对,irq,关中断,正如本书前面提到的,如果中断服务程序是允许嵌套的,则需要在服务程序中修改,CPSR[7],,使之为,0, 由图,8.11,还需注意到,中断返回必须返回到发生,irq,请求时那条指令的下一条指令上执行因此,返回指令必须做到这一点,故使用,SUBS PC, R14, #4,指令● 快速中断请求,fiq,,ARM,对快速中断请求,fiq,的响应与,irq,非常类似,但,fiq,的优先级比,irq,的优先级高ARM,对快速中断请求,fiq,的响应过程如下:,R14_fiq =,执行指令的下一条指令的地址,+ 4(,或中断发生时指令的,PC + 8),,SPSR_fiq = CPSRCPSR[4:0] = 0b10001,——,即进入,IRQ,模式,,CPSR[5] = 0,——,使,T=0,,进入,ARM,状态,CPSR[6] = 1,——,使,F=1,,禁止,fiq,中断,CPSR[7] = 1,——,使,I=1,,禁止,irq,中断 如果配置为正常地址,则,PC = 0X0000001C,;若为高向量地址,则,PC = 0XFFFF001C,。
ARM,对,fiq,的响应过程及处理与返回与,irq,十分相似,其示意图如图,8.12,所示图,8.12 fiq,的响应、处理及返回过程,值得再次强调的是,中断返回一定要回到发生中断时正执行指令的下一条指令上,只有这样才可能接着中断前的状态继续执行主程序 到此,我们对构成,PXA27X,的核心处理器,ARM,做了最简单的介绍,有关其他问题请读者参看其他相关资料8.3 Intel PXA27X,介绍,8.3.1 PXA27X,的结构,,由前面,PXA27X,的结构图,8.1,可以看到,其结构是比较复杂的一片,PXA27X,芯片主要包括如下一些功能部件及接口:,,,(1) Intel XScale,技术:,,①,Intel XScale,微结构;,,② 协处理器2),电源管理部件3),内部存储器4),中断控制器5),操作系统定时器6),脉冲宽度调制单元,(PWM),7),实时钟,(RTC),8),通用输入,/,输出接口,(GPIO),9),外部存储器控制器10) DMA,控制器11),串行接口:① 通同异步收,/,发器,(UART),;② 快速红外通信接口;③,I2C,串行总线接口;④,AC,’,97,立体声接口;⑤,I2S,音频编译码接口;⑥,USB,客户,(,从属,),端接口;⑦,USB,主控制器端接口;⑧ 同步串行接口,(SSP),。
12),液晶显示板,(LCD),控制器13) MM,卡、,SD,卡及,SDIO,卡控制器14),存储棒主控制器15),灵活的可变链路接口,(MSL),16),键盘接口17),通用用户鉴别模式接口18),快速捕获数字摄像头接口19),测试接口8.3.2 PXA27X,的内部存储器,从上一小节可以看到,,PXA27X,芯片结构复杂,包含有多种功能部件和接口由于篇幅的限制,从本小节开始,仅将其中的一部分予以说明,更多更详细的细节读者可参看,Intel,公司提供的技术资料1,.概述,1),内部存储器特性,PXA27X,的芯片内部集成有,256 KB,的内部,SRAM,这,256 KB,的存储器分成,4,个体,每个存储体为,64 KB,PXA27X,的这,4,个体的内部存储器可按体进行电源管理,从而达到最小的功率消耗2),内部存储器的结构框图,PXA27X,的内部存储器结构框图如图,8.13,所示 由图,8.13,可以看到,每一个存储体都有自己的存取请求队列当存储体正在被访问时,新的存取请求就放在队列中,一旦前面的存取结束,队列中的请求立刻得到执行若存取请求时存储体没有工作,则请求直接响应,无须排队。
图,8.13,中的系统总线是指,PXA27X,内部的系统总线,见前图,8.1,在,PXA27X,内部有非常复杂但功能又非常强大的电源管理在内部存储器中也设有电源管理模块,以达到最低的功耗PXA27X,有六种电源模式,它们是:正常,(,运行及强力运行,),、空闲、深度空闲、备用、睡眠、深度睡眠PXA27X,的电源管理包括整块芯片电源管理,也包括内部存储器的电源管理对于内部存储器的电源管理,可用表,8.13,来说明图,8.13 PXA27X,内部存储器结构,表,8.13,内部存储器的电源,,当,PXA27X,上电复位时,会将,PXA27X,电源管理的内部存储器模块及内部存储体均置为运行模式当,PXA27X,处理器进入睡眠状态时,内部存储器的每一个存储体的电源关断,存储体中存储的所有信息将丢失如果想保住信息,则需要事先将,PXA27X,电源管理模块中的寄存器,PSLR,的,[SL_RX],位置,1,若,PXA27X,处理器进入深度睡眠状态,则内部存储器的每一个存储体的电源均关断,存储体中存储的所有信息都将丢失2,.内部存储器地址,由于,256 KB,的内部,SRAM,存储器已经集成在,PXA27X,芯片内部,因此其地址是固定不变的。
表,8.14,给出了内部存储器各存储体的地址范围表,8.14 PXA27X,芯片内部存储器的地址分配,在表,8.14,中,除了给出内部存储器的地址外,还说明有一些地址将保留为后续的芯片所用8.3.3 PXA27X,的外部存储器控制器,PXA27X,可以在其芯片外部连接各种存储器,而且在它的内部集成了外部存储器的控制器,该控制器为使用者提供了所有的控制信号,这就使得使用者在附加外部存储器时,连接外部存储器非常容易,为用户提供了方便1,.概述,1),性能,PXA27X,的存储器控制器为我们提供了如下一些主要性能:,(1) 4,个区的,SDRAM,接口,每个区的容量一般为,64 MB,,最大为,256 MB,因此,最大可连接的外部,SDRAM,可达,1 GB,支持,SDRAM,,但工作电压为,1.8 V,,工作频率最高为,104 MHz,2),支持,6,个区的,SRAM,或闪速存储器,每个区的容量为,64 MB,同时,这,6,个区中的,4,个区还可以接同步闪速存储器3),支持,PC,卡存储器,设置有两个插座信号4),设置一个交替总线主控器来控制总线5),支持,DMA,传送2),控制器提供的信号 如前所述,外部存储器控制器提供了连接使用信号,这些信号主要有如下几类:,(1),外部存储器共享信号。
外部存储器共享信号如表,8.15,所示表,8.15,外部存储器共享信号,,(2),与,SRAM,和,SDRAM,有关的信号与,SRAM,和,SDRAM,有关的信号如表,8.16,所示3),杂项信号用于外部存储器的杂项信号如表,8.17,所示表,8.16,与,SRAM,和,SDRAM,有关的信号,表,8.17,杂 项 信 号,,(4),用于交替总线主控制器的信号用于交替总线主控制器的信号如表,8.18,所示5) PC,卡接口信号PC,卡接口信号如表,8.19,所示表,8.18,交替总线主控制器信号,表,8.19 PC,卡接口信号,,3),存储器控制器的配置图,PXA27X,存储器控制器的配置框图如图,8.14,所示 由图中可以看到,存储器控制器所提供的接。