单片机嵌入式系统原理及应用ch课件12.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《单片机嵌入式系统原理及应用ch课件12.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 嵌入式 系统 原理 应用 ch 课件 12
- 资源描述:
-
1、1 12 ARM是一类微处理器,同时也是一个公司的名字。ARM公司于1990年11月在英国剑桥成立(原名Advanced RISC Machine),专门从事基于RISC技术的芯片设计、开发和授权。目前,ARM处理器(即采用ARM IP核的处理器)已遍及工业控制、通信系统、无线通讯、网络系统、消费类电子产品、成像和安全产品等各类产品市场。截止到2012年,基于ARM技术设计的处理器已经占据32位RISC微处理器约80%以上的市场份额,ARM技术正在逐步渗入到我们生活的各方面。3 ARM处理器是第一个为商业用途开发的RISC微处理器。ARM所采用的体系结构对于传统的RISC体系结构既有继承,又有
2、舍弃和发展,即完全根据实际设计的需要仔细研究,没有机械照搬。最初的ARM设计最关心的是必须保持设计的简单性。ARM的简单性在ARM的硬件组织和实现方面比指令集的结构方面体现的更明显。但是ARM仍保留一些CISC的特征,并且因此达到比纯粹的RISC更高的代码密度,使得ARM在开始时就获得了其功率效率和较小的核面积的优势。4 ARM微处理器内核中普遍采用了流水线结构,随着ARM内核的发展,其流水线结构越来越复杂。常见的ARM处理器内核流水线如图12-1所示。图12-1 ARM处理器内核流水线工作示意图5 迄今为止,ARM体系结构共定义了8个版本,版本号分别为v1v8,从版本v1到v8,ARM体系的
3、指令集功能不断扩大。同时,各版本中还有一些变种,这些变种定义该版本指令集中不同的功能。ARM处理器系列中的各种处理器,实现技术各不相同,性能差别很大,应用场合也不同,但只要它们支持同一ARM体系版本,基于它们的应用软件将是兼容的。需要注意,ARM的体系结构版本号并不是ARM核的版本号。6 常见的ARM体系架构与ARM核的版本对应关系见表12-1。表12-1常见的ARM体系架构与ARM核的版本对应关系7 基于ARM的处理器内核简称ARM内核,内核并不是芯片,ARM内核与其他部件组合(如存储器、定时器和片内外设接口等)在一起才构成芯片。图12-2 ARM芯片内部主要模块示意图8ARM芯片中只有处理
4、器内核由ARM公司设计,其他外围模块由获得ARM公司处理器IP授权的芯片厂商自行设计。芯片厂商针对不同的应用领域,通过设计具有很强针对性的专用硬件加速器,根据外设搭配不同的接口电路等设计出适用于专业领域的SOC芯片,从而实现基于相同处理器内核芯片产品的差异化。ARM处理器内核不但包括CPU,还包括高速缓存、MMU控制器、嵌入式跟踪宏单元、TCM接口、总线控制逻辑、AHB接口、协处理器、中断控制器等电路模块。整个ARM处理器内核的核心是CPU。虽然随着ARM处理器内核的升级,其CPU也不断改进,但其基本结构主要由32位ALU、31个32位通用寄存器及6个状态寄存器、32个8位乘法器、32个桶形移
5、位寄存器、指令译码及控制逻辑、指令流水线和数据/地址寄存器组成。9 图12-3ARM CPU基本组成模型10 ARM处理器是32位处理器,但兼容16位指令集和数据类型。从编程的角度看,ARM处理器有以下两种操作状态:ARM状态 32位,处理器执行的是字的ARM指令;Thumb状态 16位,处理器执行的是半字的Thumb指令。在程序执行过程中,处理器可以随时在这两种操作状态之间切换。值得注意的是,操作状态的切换并不影响处理器的工作模式或寄存器的内容。ARM处理器复位后开始执行代码时,应该处于ARM状态。12.2 ARM编程模型12.2.1 处理器状态11 ARM指令集和Thumb指令集均有切换处
6、理器状态的指令,并可在两种操作状态之间切换。两个状态可以按以下方法切换:进入Thumb状态 当操作数寄存器的状态位(最低位)为1时,执行BX指令就可以进行Thumb状态。如果处理器在Thumb状态发生异常(所有异常处理都在ARM状态下执行),则当异常处理返回时自动切换到Thumb状态。进入ARM状态 操作数寄存器的状态位(最低位)为0时,执行BX指令就可以进行ARM状态。处理器进行异常处理时,把PC的值放入异常模式链接寄存器中,从异常向量地址开始执行程序,系统自动进入ARM状态。处理器状态的切换12 ARM体系结构支持7种处理器模式:用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模
7、式和系统模式。具体参考表12-2。12.2.2 处理器模式13表12-2 处理器模式及其用途 除用户模式外,其它模式为特权模式。ARM内部寄存器和一些片内外设在硬件设计上只允许(或可选为只允许)特权模式下访问。此处,特权模式可以自由地切换处理器模式,而用户模式不能直接切换别的模式。有5种处理器模式称为异常模式,它们是:快中断模式、中断模式、管理模式、中止模式、未定义模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种模式都有某些附加的寄存器,以避免异常退出时用户模式的状态不可靠。系统模式与用户模式一样不能由异常进入,且使用与用户模式完全相
8、同的寄存器。然而系统模式是特权模式,不受用户模式的限制。有了系统模式,操作系统要访问用户模式的寄存器就比较方便。同时,操作系统的一些特权任务可以使用这个模式,以访问一些受控的资源而不必担心异常出现时的任务状态变得不可靠。14 ARM处理器共有37个32位寄存器:31个通用寄存器 R0R15、R13_svc、R14_svc、R13_abt、R14_abt、R13_unt、R14_unt、R13_irq、R14_irt和R8_frqR14_frq;6个状态寄存器 CPSR、SPSR_svc、SPSR_abt、SPSR_unt、SPSR_irq和SPSR_fiq。这些寄存器并不是在同一时间全都可以被
9、访问,具体哪些寄存器可编程访问,取决于处理器状态和具体的操作模式。12.2.3 寄存器集15(1)通用寄存器(2)程序计数器(PC)(3)程序状态寄存器(PSR)(4)条件码标志位(5)控制位(6)ARM状态寄存器与Thumb状态寄存器之间的关系1612.2.3 寄存器集12.2.3 寄存器集通用寄存器包括R0R15,可以分为两类:不分组寄存器(R0R7)和分组寄存器(R8R14)。1)不分组寄存器(R0R7)。在处理器的所有模式下,不分组寄存器中的每个都指向一个物理寄存器,且未被系统用于特殊用途。因此,在中断或异常处理中进行模式切换时,由于不同的处理器模式均使用相同的物理寄存器,可能会破坏寄
10、存器中的数据,进行程序设计时应引起注意。(1)通用寄存器172)分组寄存器(R8R14)。分组寄存器中的每一次所访问的物理寄存器都与处理器当前的模式有关。若要访问特定的物理寄存器,则要使用规定的物理寄存器名字后缀。物理寄存器名字形式如下:R13_R14_其中,是寄存器后缀,分别使用usr、svc、fiq、irq、abt和und表示6种模式。18,每个寄存器对应2个不同的物理寄存器,当使用fiq模式时访问寄存器R8_fiqR12_fiq;当使用除fiq模式外的其他模式时访问寄存器R8 R12。,每个寄存器对应6个不同的物理寄存器。其中的一个物理寄存器是用户模式和系统模式公用的,其余5个分别用于5
11、种异常模式。寄存器R13通常作为堆栈指针(SP),用于保存当前处理器工作模式下堆栈的栈顶地址。作为链接寄存器(LR),用于保存子程序的返回地址。当子程序折返回地址保存在堆栈中,R14也可作为通用寄存器。处理器在不同模式时,允许每种模式都有自已的栈顶和链接寄存器。19(2)程序计数器(PC)20 PC作为程序计数器,用于保存处理器要取的下一条指令的地址。R15作为程序计数器,用于保存处理器要取的下一条指令的地址。ARM状态下,所有的ARM指令都是32位长度的,指令以字对准保存;Thumb状态下,所有的Thumb指令都是16位长度的,指令以半字对准保存。由于ARM体系采用多级流水线技术,对于ARM
12、指令集而言,PC总是指向当前指令之后两条指令的地址,即PC的值为当前指令的地址加8。(3)程序状态寄存器(PSR)程序状态寄存包括当前程序状态寄存器(CPSR)和备份程序状态寄存器(SPSR)。所有处理器模式下都可以访问当前程序状态寄存器。CPSR包括条件标志位、中断禁止位、当前处理器模式标志,以及其他一些相关的控制和状态位。在每一种异常工作模式下,都有一个备份状态寄存器。当异常发生时,SPSR用于保存CPSR的当前值,当从异常退出时,可用SPSR来恢复CPSR。用户模式和系统模式不属于异常模式,因此这两种模式没有SPSR,当在这两种情况下访问SPSR时,结果是未知的。CPSR和SPSR的格式
13、如图12-4所示。21图 12-4 CPSR/SPSR格式22(4)条件码标志位 N、Z、C和V均为条件码标志位。其内容可被算术或逻辑运算指令的结果所改变,并全由条件码标志位状态可以决定某条指令是否执行。标志N。当两个用补码表示的带符号数进行运算时,N=1表示结果为负数;N=0表示运算结果为正数或零。标志Z。Z=1表示指令运算结果为0;Z=0表示指令运算结果为非零。23 标志C。对于加法运算(包括比较指令CMN),C=1表示加法运算产生进位(即无符号数溢出),C=0表示加法运算未产生进位;对于减法运算(包括比较指令CMP),C=0表示减法运算产生借位(即无符号数溢出),C=1表示减法运算未产生
14、借位;对于包含移位操作的非加/减运算指令,C为移出值的最后一位;对于其他非加/减运算指令,C的值通常不改变。标志V。对于加法/减法指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出,V=0表示符号位未溢出;对于其他的非加/减运算指令,V的值通常不改变。24(5)控制位25CPSR的低8位,即I、F、T和M0M4称为控制位。当发生异常时这些位可以被改变。当处理器运行在特权模式时,这些位也可以由程序修改。中断禁止位I和F。I=1表示禁止IRQ中断,F=1表示禁止FIQ中断。T标志位。对于ARM体系结构v4及以上版本的T系列处理器,T=0表示程序运行于ARM状态,T=1表示
15、程序运行于Thumb状态;对于ARM体系结构v4及以上版本的非T系列处理器,T=0表示程序运行于ARM状态,T=1表示执行下一条指令以引起未定义的指令异常。注意:绝对不要强制改变CPSR寄存器中的T位。如果这样做,处理器则会进入一个无法预知的状态。运行模式位M0M4。这些模式位决定处理器的模式。见表12-4。不是所有模式位的组合都定义了有效的处理器模式,因此,请注意不要使用表中没有列出的组合。保留位。CPSR中的其他位为保留位,当改变CPSR中的条件码标专位或控制位时,不要改变保留位,在程序中也不要使用保留位来存储数据。保留位将用于ARM版本的扩展。2627表12-4 模式位的含义(6)ARM
16、状态寄存器与Thumb状态寄存器之间的关系28Thumb状态下的寄存器集是ARM状态下的寄存器集的子集。用户可以访问8个通用寄存器(R0R7)、PC、SP、LR、SPSR和CPSR。每种特权模式都有一组SP、LR、SPSR。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)。具体关系如图12-5所示。29图12-5 Thumb寄存器在ARM状态寄
17、存器上的映射 Thumb状态下,寄存器R8R15并不是标准寄存器集的一部分,但用户可以使用汇编语言程序有限制地访问这些寄存器,将其用作快速的寄存器。使用带特殊变量的MOV指令,数据可以在低寄存器(R0R7)和高寄存器(R8R15)之间进行传送;高寄存器的值可以使用CMP指令进行比较或使用ADD指令加上低寄存器的值。ARM处理器支持的数据类型有字节、半字和字。字节 字节的长度为8位(bit);半字 半字的长度为16位(bit),半字必须以2字节为边界对齐;字 字的长度为32位(bit)。字必须以4字节为边界对齐。这三种数据类型都支持无符号数和带符号数,当任意一种类型描述为unsigned时,N位
18、数值使用正常的二进制格式表示范围为 的非负整数;当任意一种类型描述为signed时,N位数值使用2的补码格式表示范围为 的整数。ARM指令的长度刚好是1个字(分配为占用4个字节)。Thumb指令的长度刚好一个半字(占用2个字节)。所有数据操作都以字为单位。加载和存储指令可以以字节、半字和字进行操作,当加载字节或半字时自动实现零扩展或符号扩展。12.2.4 体系结构直接支持的数据类型300 21N11221NN12.2.5 存储器及存储器映射I/OARM处理器采用冯诺依曼结构,指令和数据共用一条32位数据总线,只有加载、存储和交换指令可访问存储器中的数据。ARM公司的规范仅定义了内核与存储系统之
19、间的信号及时序(局部总线),而现实的芯片一般在外部总线与内核的局部总线之间有一个存储器管理部件将局部总线的信号和时序转换为现实的外部总线信号和时序。因此,外部总信的信号和时序与具体的芯片有关,不是ARM的标准。具体到某个芯片的外部存储系统的设计,需要参考其芯片的数据手册或使用手册等资料。311.地址空间 2.存储器格式 3.指令的预取和自修改代码 4.存储器映射的I/O 1.地址空间 ARM体系结构使用单个平面的232个8位字节地址空间,对存储器能支持的最大寻址空间为4G(232)。ARM体系统结构将存储器看成从0 x00000000地址开始的以字节为单位的线性组合。每个字数据占4个字节单位,
20、每个半字数据占2个字节单位。字节地址按照无符号数排列,从0到232-1。地址空间可以看作是包含230个32位字,地址以字为单位进行分配,也就是将地址除以4。地址为A的字包含4个字节,地址分别为A、A+1、A+2和A+3。在ARM体系结构v4及以上版本中,地址空间还可被看包含231个16位半字。地址按照半字进行分配。地址为A的半字包含2个字节,地址分别为A和A+1。322.存储器格式 地址空间的规则要求地址A:位于地址A的字包含的字节位于地址A、A+1、A+2和A+3。位于地址A的半字包含的字节位于地址A、A+1。位于地址A+2的半字包含的字节位于地址A+2和A+3。位于地址A的字包含的字节位于
21、地址A和A+3。33小端格式(little-ednian)在小端格式中,一个字当中最低地址的字节被看作是最低位字节,最高地址的字节被看作是最高位字节。因此,存储器系统字节0连接到数据线,如图12-6所示。34图12-6 字内字节的小端地址大端格式(big-endian)在大端格式中,ARM处理器将最高位字节保存在最低地址字节,将最低位字节保存在最高地址字节。因此,存储器系统字节0连接到数据线3124,如图12-7所示。35图12-7 字内字节的大端地址 一个具体的的基于ARM的芯片可能只支持小端存储器系统,也可能只支持大端存储器系统,还可能两者都支持,但默认格式通常为小端格式。ARM指令集不包
22、含任何直接选择大、小端的指令。但是,一个同时支持大、小端的基于ARM的芯片,可以在硬件上配置(一般使用芯片的引脚来配置)来匹配存储器系统所使用的规则。如果芯片有一个标准系统控制协处理器,则系统控制协处理器的寄存器1的Bit7可用于改变配置输入。36 如果一个基于ARM的芯片将存储系统配置为其中一种存储器格式(如小端),而实际连接的存储器系统配置为相反的格式(如大端),那么只有以字为单位的指令取指、数据加载和数据存储能够可靠实现。勘察的存储器访问将出现不可预测的结果。当标准系统控制协处理器连接到支持大、小端的ARM处理器时,协处理器寄存器1的Bit7在复位时清零。这表示ARM处理器在复位后立即配
23、置为小端存储器系统。如果它连接到一个大端存储器系统,那么复位处理程序要尽早做的事情之一就是切换到大端存储器系统,并必须在任何可能的字节或半字数据访问发生或Thumb指令执行之前执行。373.指令的预取和自修改代码 许多ARM处理器实现在前一条指令的执行尚未完成时将指令从存储器取出。这个动作称为指令的预取。指令的预取并不是实际执行指令。如有下面两种典型的情况时,指令就可不被执行:当异常发生时,当前指令执行完毕,所有预取的指令都被丢弃,指令的执行从异常向量开始。当发生跳转时,预取的在分支指令后的指令将被丢弃。ARM处理器可以自由选择预取的指令比当前执行点提前多少(即半导体厂商在设计具体的芯片时可以
24、自由选择预取的指令比当前执行点提前多少),甚至可以动态改变预取指令的数目。最初的ARM处理器实现在当前执行的指令之前预取两条指令,不过现在可以选择多于或少于两条指令。38 注意:当指令读取PC时,它得到的指令地址比它自身地址落后了两条地址:对于ARM指令,得到的地址是它自身地址+8;对于Thumb指令,得到的地址是它自身地址+4。最初的ARM处理器实现在PC读取的两指令偏移量和两指令预取之间存在关联。但这一关联不是结构上的。一个预取不同数目指令的ARM处理器实现仍能保证读取PC所得的地址比它自身地址落后两条指令。同自由选择多少条预取指令一样,ARM处理器实现可选择沿着哪条可能的执行路径进行预取
25、指。例如,在一条分支指令之后,它可选择预取分支指令之后的指令或者是转移目标地址的指令。这称为“转移预测”。39自修改代码 所有形式的指令预取都有一个潜在的问题,即存储器中的指令可能在它被预取之后,被执行之前发生改变。如果发生这种情况,对存储器中的指令进行修改通常并不妨碍已取指的指令备份执行完毕。40 例如:在下面的代码序列中,STR指令使用ADD指令的备份取代了它后面的SUB指令:LDR r0,AddInstr STR r0,NextInstr NextInstr SUB r1,r1,#1 AddInstr ADD r1,r1,#1 当代码第一次执行时,STR指令之后执行的指令通常是SUB指令
展开阅读全文