项目12单片机嵌入式系统原理及应用(贾好来)ARM单片机结ppt课件_第1页
项目12单片机嵌入式系统原理及应用(贾好来)ARM单片机结ppt课件_第2页
项目12单片机嵌入式系统原理及应用(贾好来)ARM单片机结ppt课件_第3页
项目12单片机嵌入式系统原理及应用(贾好来)ARM单片机结ppt课件_第4页
项目12单片机嵌入式系统原理及应用(贾好来)ARM单片机结ppt课件_第5页
已阅读5页,还剩117页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第12章 ARM32位单片机的构造、编程和开发工具1112.1 ARM内核体系构造12.2 ARM编程模型12.3 ARM汇编指令12.4 ARM汇编程序设计12.5 ARM程序开发工具ADS2 本章内容12.1 ARM内核体系构造 ARM是一类微处置器,同时也是一个公司的名字。ARM公司于1990年11月在英国剑桥成立(原名Advanced RISC Machine),专门从事基于RISC技术的芯片设计、开发和授权。目前,ARM处置器(即采用ARM IP核的处置器)已普及工业控制、通讯系统、无线通讯、网络系统、消费类电子产品、成像和平安产品等各类产品市场。截止到2021年,基于ARM技术设计

2、的处置器曾经占据32位RISC微处置器约80%以上的市场份额,ARM技术正在逐渐渗入到我们生活的各方面。3ARM处置器是第一个为商业用途开发的RISC微处置器。ARM所采用的体系构造对于传统的RISC体系构造既有承继,又有舍弃和开展,即完全根据实践设计的需求仔细研讨,没有机械照搬。最初的ARM设计最关怀的是必需坚持设计的简单性。ARM的简单性在ARM的硬件组织和实现方面比指令集的构造方面表达的更明显。但是ARM仍保管一些CISC的特征,并且因此到达比纯粹的RISC更高的代码密度,使得ARM在开场时就获得了其功率效率和较小的核面积的优势。12.1.1 ARM体系构造版本4ARM微处置器内核中普遍

3、采用了流水线构造,随着ARM内核的开展,其流水线构造越来越复杂。常见的ARM处置器内核流水线如图12-1所示。图12-1 ARM处置器内核流水线任务表示图12.1.1 ARM体系构造版本5 迄今为止,ARM体系构造共定义了8个版本,版本号分别为v1v8,从版本v1到v8,ARM体系的指令集功能不断扩展。同时,各版本中还有一些变种,这些变种定义该版本指令集中不同的功能。ARM处置器系列中的各种处置器,实现技术各不一样,性能差别很大,运用场所也不同,但只需它们支持同一ARM体系版本,基于它们的运用软件将是兼容的。 需求留意,ARM的体系构造版本号并不是ARM核的版本号。12.1.1 ARM体系构造

4、版本6常见的ARM体系架构与ARM核的版本对应关系见表12-1 。 ARM核 体系结构ARM1ARMv1ARM2ARMv2ARM6, ARM600, ARM610, ARM7, ARM700, ARM710ARMv3StrongARM, ARM8, ARM810, ARM810 ARMv4ARM9E-S, ARM10TDM1, ARM1020EARMv5ARM1136J(F)-S, ARM1176JZ(F)-S, ARM11MPCoreARMv6ARMCortex-M, ARMCortex-R, ARMCortex-AARMv7表12-1常见的ARM体系架构与ARM核的版本对应关系12.1.1

5、 ARM体系构造版本7基于ARM的处置器内核简称ARM内核,内核并不是芯片,ARM内核与其他部件组合(如存储器、定时器和片内外设接口等)在一同才构成芯片。图12-2 ARM芯片内部主要模块表示图12.1.2 ARM内核8ARM芯片中只需处置器内核由ARM公司设计,其他外围模块由获得ARM公司处置器IP授权的芯片厂商自行设计。芯片厂商针对不同的运用领域,经过设计具有很强针对性的公用硬件加速器,根据外设搭配不同的接口电路等设计出适用于专业领域的SOC芯片,从而实现基于一样处置器内核芯片产品的差别化。 ARM处置器内核不但包括CPU,还包括高速缓存、MMU控制器、嵌入式跟踪宏单元、TCM接口、总线控

6、制逻辑、AHB接口、协处置器、中断控制器等电路模块。整个ARM处置器内核的中心是CPU。虽然随着ARM处置器内核的晋级,其CPU也不断改良,但其根本构造主要由32位ALU、31个32位通用存放器及6个形状存放器、32个8位乘法器、32个桶形移位存放器、指令译码及控制逻辑、指令流水线和数据/地址存放器组成。12.1.2 ARM内核9 图12-3ARM CPU根本组成模型12.1.2 ARM内核10ARM处置器是32位处置器,但兼容16位指令集和数据类型。从编程的角度看,ARM处置器有以下两种操作形状:ARM形状 32位,处置器执行的是字的ARM指令;Thumb形状 16位,处置器执行的是半字的T

7、humb指令。在程序执行过程中,处置器可以随时在这两种操作形状之间切换。值得留意的是,操作形状的切换并不影响处置器的任务方式或存放器的内容。ARM处置器复位后开场执行代码时,应该处于ARM形状。12.2 ARM编程模型12.2.1 处置器形状11ARM指令集和Thumb指令集均有切换处置器形状的指令,并可在两种操作形状之间切换。两个形状可以按以下方法切换:进入Thumb形状 当操作数存放器的形状位(最低位)为1时,执行BX指令就可以进展Thumb形状。假设处置器在Thumb形状发生异常(一切异常处置都在ARM形状下执行),那么当异常处置前往时自动切换到Thumb形状。进入ARM形状 操作数存放

8、器的形状位(最低位)为0时,执行BX指令就可以进展ARM形状。处置器进展异常处置时,把PC的值放入异常方式链接存放器中,从异常向量地址开场执行程序,系统自动进入ARM形状。 处置器形状的切换12ARM体系构造支持7种处置器方式:用户方式、快中断方式、中断方式、管理方式、中止方式、未定义方式和系统方式。详细参考表12-2。12.2.2 处置器方式处理器模式用途备注用户(usr)正常程序工作模式不能直接切换到其它模式快中断(fiq)处理高速中断,用于高速数据传输及通道处理FIQ异常响应时进入该模式中断(irq)用于通用中断处理IRQ异常响应时进入该模式管理(svc)操作系统使用的保护模式,系统复位

9、后的默认模式系统复位和软件中断响应时进入该模式中止(abt)用于支持虚拟内存和存储器保护数据或指令预取中止时进入该模式未定义(und)用于支持硬件协处理器的软件仿真未定义指令异常响应时进行该模式系统(sys)用于支持操作系统的特权任务等与用户类似,但具有可以直接切换到其它模式等特权13表12-2 处置器方式及其用途除用户方式外,其它方式为特权方式。ARM内部存放器和一些片内外设在硬件设计上只允许(或可选为只允许)特权方式下访问。此处,特权方式可以自在地切换处置器方式,而用户方式不能直接切换别的方式。有5种处置器方式称为异常方式,它们是:快中断方式、中断方式、管理方式、中止方式、未定义方式。它们

10、除了可以经过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处置器进入相应的方式。每种方式都有某些附加的存放器,以防止异常退出时用户方式的形状不可靠。系统方式与用户方式一样不能由异常进入,且运用与用户方式完全一样的存放器。然而系统方式是特权方式,不受用户方式的限制。有了系统方式,操作系统要访问用户方式的存放器就比较方便。同时,操作系统的一些特权义务可以运用这个方式,以访问一些受控的资源而不用担忧异常出现时的义务形状变得不可靠。14ARM处置器共有37个32位存放器:31个通用存放器 R0R15、R13_svc、R14_svc、R13_abt、R14_abt、R13_unt、R14_

11、unt、R13_irq、R14_irt和R8_frqR14_frq;6个形状存放器 CPSR、SPSR_svc、SPSR_abt、SPSR_unt、SPSR_irq和SPSR_fiq。这些存放器并不是在同一时间全都可以被访问,详细哪些存放器可编程访问,取决于处置器形状和详细的操作方式。12.2.3 存放器集15(1)通用存放器 (2)程序计数器(PC)(3)程序形状存放器(PSR)(4)条件码标志位 (5)控制位(6)ARM形状存放器与Thumb形状存放器之间的关系1612.2.3 存放器集12.2.3 存放器集通用存放器包括R0R15,可以分为两类:不分组存放器(R0R7)和分组存放器(R8

12、R14)。1不分组存放器(R0R7)。在处置器的一切方式下,不分组存放器中的每个都指向一个物理存放器,且未被系统用于特殊用途。因此,在中断或异常处置中进展方式切换时,由于不同的处置器方式均运用一样的物理存放器,能够会破坏存放器中的数据,进展程序设计时应引起留意。(1)通用存放器172分组存放器(R8R14)。分组存放器中的每一次所访问的物理存放器都与处置器当前的方式有关。假设要访问特定的物理存放器,那么要运用规定的物理存放器名字后缀。物理存放器名字方式如下:R13_R14_其中,是存放器后缀,分别运用usr、svc、fiq、irq、abt和und表示6种方式。18对于存放器R8R12,每个存放

13、器对应2个不同的物理存放器,当运用fiq方式时访问存放器R8_fiqR12_fiq;当运用除fiq方式外的其他方式时访问存放器R8 R12。对于存放器R13和R14,每个存放器对应6个不同的物理存放器。其中的一个物理存放器是用户方式和系统方式公用的,其他5个分别用于5种异常方式。存放器R13通常作为堆栈指针(SP),用于保管当前处置器任务方式下堆栈的栈顶地址。存放器R14作为链接存放器(LR),用于保管子程序的前往地址。当子程序折前往地址保管在堆栈中,R14也可作为通用存放器。处置器在不同方式时,允许每种方式都有自已的栈顶和链接存放器。19(2)程序计数器(PC)20PC作为程序计数器,用于保

14、管处置器要取的下一条指令的地址。R15作为程序计数器,用于保管处置器要取的下一条指令的地址。ARM形状下,一切的ARM指令都是32位长度的,指令以字对准保管;Thumb形状下,一切的Thumb指令都是16位长度的,指令以半字对准保管。由于ARM体系采用多级流水线技术,对于ARM指令集而言,PC总是指向当前指令之后两条指令的地址,即PC的值为当前指令的地址加8。(3)程序形状存放器(PSR)程序形状存放包括当前程序形状存放器(CPSR)和备份程序形状存放器(SPSR)。一切处置器方式下都可以访问当前程序形状存放器。CPSR包括条件标志位、中断制止位、当前处置器方式标志,以及其他一些相关的控制和形

15、状位。在每一种异常任务方式下,都有一个备份形状存放器。当异常发生时,SPSR用于保管CPSR的当前值,当从异常退出时,可用SPSR来恢复CPSR。用户方式和系统方式不属于异常方式,因此这两种方式没有SPSR,当在这两种情况下访问SPSR时,结果是未知的。CPSR和SPSR的格式如图12-4所示。21图 12-4 CPSR/SPSR格式22(4)条件码标志位 N、Z、C和V均为条件码标志位。其内容可被算术或逻辑运算指令的结果所改动,并全由条件码标志位形状可以决议某条指令能否执行。标志N。当两个用补码表示的带符号数进展运算时,N=1表示结果为负数;N=0表示运算结果为正数或零。标志Z。Z=1表示指

16、令运算结果为0;Z=0表示指令运算结果为非零。23标志C。对于加法运算(包括比较指令CMN),C=1表示加法运算产生进位(即无符号数溢出),C=0表示加法运算未产生进位;对于减法运算(包括比较指令CMP),C=0表示减法运算产生借位(即无符号数溢出),C=1表示减法运算未产生借位;对于包含移位操作的非加/减运算指令,C为移出值的最后一位;对于其他非加/减运算指令,C的值通常不改动。标志V。对于加法/减法指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出,V=0表示符号位未溢出;对于其他的非加/减运算指令,V的值通常不改动。24(5) 控制位25CPSR的低8位,即I、

17、F、T和M0M4称为控制位。当发生异常时这些位可以被改动。当处置器运转在特权方式时,这些位也可以由程序修正。中断制止位I和F。I=1表示制止IRQ中断,F=1表示制止FIQ中断。T标志位。对于ARM体系构造v4及以上版本的T系列处置器,T=0表示程序运转于ARM形状,T=1表示程序运转于Thumb形状;对于ARM体系构造v4及以上版本的非T系列处置器,T=0表示程序运转于ARM形状,T=1表示执行下一条指令以引起未定义的指令异常。留意:绝对不要强迫改动CPSR存放器中的T位。假设这样做,处置器那么会进入一个无法预知的形状。运转方式位M0M4。这些方式位决议处置器的方式。见表12-4。不是一切方

18、式位的组合都定义了有效的处置器方式,因此,请留意不要运用表中没有列出的组合。保管位。CPSR中的其他位为保管位,当改动CPSR中的条件码标专位或控制位时,不要改动保管位,在程序中也不要运用保管位来存储数据。保管位将用于ARM版本的扩展。26M4:0处理器模式可访问的Thumb状态寄存器可访问的ARM状态寄存器10000用户R0R7,SP,LR,PC,CPSRR0R14, PC,CPSR10001快中断R0R7,SP_fiq,LR_fiq,PC,CPSR,SPSR_fiqR0R7,R8_fiqR14_fiq,PC,CPSR,SPSR_fiq10010中断R0R7,SP_fiq,LR_fiq,PC

19、,CPSR,SPSR_fiqR0R7,SP_svc,LR_svc,PC,CPSR,SPSR_svcR0R12,R13_fiq,R14_fiq,PC,CPSR,SPSR_fiq10011管理R0R12,R13_svc,R14_svc,PC,CPSR,SPSR_svc10111中止R0R7,SP_abt,LR_abt,PC,CPSR,SPSR_abtR0R12,R13_abt,R14_abt,PC,CPSR,SPSR_abt11011未定义R0R7,SP_und,LR_und,PC,CPSR,SPSR_undR0R12,R13_und,R14_und,PC,CPSR,SPSR_und11111系统

20、R0R7,SP,LR,PC,CPSR,SPSRR0R14, PC,CPSR27表12-4 方式位的含义(6)ARM形状存放器与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。Thum

21、b形状PC映射到ARM形状PC(R15)。详细关系如图12-5所示。29图12-5 Thumb存放器在ARM形状存放器上的映射 Thumb形状下,存放器R8R15并不是规范存放器集的一部分,但用户可以运用汇编言语程序有限制地访问这些存放器,将其用作快速的存放器。运用带特殊变量的MOV指令,数据可以在低存放器(R0R7)和高存放器(R8R15)之间进展传送;高存放器的值可以运用CMP指令进展比较或运用ADD指令加上低存放器的值。 ARM处置器支持的数据类型有字节 、半字和字。字节 字节的长度为8位(bit);半字 半字的长度为16位(bit),半字必需以2字节为边境对齐;字 字的长度为32位(b

22、it)。字必需以4字节为边境对齐。这三种数据类型都支持无符号数和带符号数,当恣意一种类型描画为unsigned时,N位数值运用正常的二进制格式表示范围为 的非负整数;当恣意一种类型描画为signed时,N位数值运用2的补码格式表示范围为 的整数。ARM指令的长度刚好是1个字(分配为占用4个字节)。Thumb指令的长度刚好一个半字(占用2个字节)。一切数据操作都以字为单位。加载和存储指令可以以字节、半字和字进展操作,当加载字节或半字时自动实现零扩展或符号扩展。12.2.4 体系构造直接支持的数据类型3012.2.5 存储器及存储器映射I/OARM处置器采用冯诺依曼构造,指令和数据共用一条32位数

23、据总线,只需加载、存储和交换指令可访问存储器中的数据。ARM公司的规范仅定义了内核与存储系统之间的信号及时序(部分总线),而现实的芯片普通在外部总线与内核的部分总线之间有一个存储器管理部件将部分总线的信号和时序转换为现实的外部总线信号和时序。因此,外部总信的信号和时序与详细的芯片有关,不是ARM的规范。详细到某个芯片的外部存储系统的设计,需求参考其芯片的数据手册或运用手册等资料。311.地址空间 2.存储器格式 3.指令的预取和自修正代码 4.存储器映射的I/O 1.地址空间ARM体系构造运用单个平面的232个8位字节地址空间,对存储器能支持的最大寻址空间为4G(232)。ARM体系统构造将存

24、储器看成从0 x00000000地址开场的以字节为单位的线性组合。每个字数据占4个字节单位,每个半字数据占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

25、、A+1。位于地址A+2的半字包含的字节位于地址A+2和A+3。位于地址A的字包含的字节位于地址A和A+3。33小端格式(little-ednian)在小端格式中,一个字当中最低地址的字节被看作是最低位字节,最高地址的字节被看作是最高位字节。因此,存储器系统字节0衔接到数据线,如图12-6所示。34图12-6 字内字节的小端地址大端格式(big-endian)在大端格式中,ARM处置器将最高位字节保管在最低地址字节,将最低位字节保管在最高地址字节。因此,存储器系统字节0衔接到数据线3124,如图12-7所示。35图12-7 字内字节的大端地址一个详细的的基于ARM的芯片能够只支持小端存储器系统

26、,也能够只支持大端存储器系统,还能够两者都支持,但默许格式通常为小端格式。ARM指令集不包含任何直接选择大、小端的指令。但是,一个同时支持大、小端的基于ARM的芯片,可以在硬件上配置(普通运用芯片的引脚来配置)来匹配存储器系统所运用的规那么。假设芯片有一个规范系统控制协处置器,那么系统控制协处置器的存放器1的Bit7可用于改动配置输入。36假设一个基于ARM的芯片将存储系统配置为其中一种存储器格式(如小端),而实践衔接的存储器系统配置为相反的格式(如大端),那么只需以字为单位的指令取指、数据加载和数据存储可以可靠实现。勘察的存储器访问将出现不可预测的结果。当规范系统控制协处置器衔接到支持大、小

27、端的ARM处置器时,协处置器存放器1的Bit7在复位时清零。这表示ARM处置器在复位后立刻配置为小端存储器系统。假设它衔接到一个大端存储器系统,那么复位处置程序要尽早做的事情之一就是切换到大端存储器系统,并必需在任何能够的字节或半字数据访问发生或Thumb指令执行之前执行。373.指令的预取和自修正代码许多ARM处置器实如今前一条指令的执行尚未完成时将指令从存储器取出。这个动作称为指令的预取。指令的预取并不是实践执行指令。如有下面两种典型的情况时,指令就可不被执行:当异常发生时,当前指令执行终了,一切预取的指令都被丢弃,指令的执行从异常向量开场。当发生跳转时,预取的在分支指令后的指令将被丢弃。

28、ARM处置器可以自在选择预取的指令比当前执行点提早多少(即半导体厂商在设计详细的芯片时可以自在选择预取的指令比当前执行点提早多少),甚至可以动态改动预取指令的数目。最初的ARM处置器实如今当前执行的指令之前预取两条指令,不过如今可以选择多于或少于两条指令。38留意:当指令读取PC时,它得到的指令地址比它本身地址落后了两条地址:对于ARM指令,得到的地址是它本身地址+8;对于Thumb指令,得到的地址是它本身地址+4。最初的ARM处置器实如今PC读取的两指令偏移量和两指令预取之间存在关联。但这一关联不是构造上的。一个预取不同数目指令的ARM处置器实现仍能保证读取PC所得的地址比它本身地址落后两条

29、指令。同自在选择多少条预取指令一样,ARM处置器实现可选择沿着哪条能够的执行途径进展预取指。例如,在一条分支指令之后,它可选择预取分支指令之后的指令或者是转移目的地址的指令。这称为“转移预测。39自修正代码一切方式的指令预取都有一个潜在的问题,即存储器中的指令能够在它被预取之后,被执行之前发生改动。假设发生这种情况,对存储器中的指令进展修正通常并不妨碍已取指的指令备份执行终了。40例如:在下面的代码序列中,STR指令运用ADD指令的备份取代了它后面的SUB指令: LDR r0, AddInstr STR r0, NextInstr NextInstr SUB r1, r1, #1 AddIns

30、tr ADD r1, r1, #1 当代码第一次执行时,STR指令之后执行的指令通常是SUB指令,由于SUB指令在存储器中的指令发生改动之前曾经被预取了,ADD指令不会被执行,除非第二次执行该代码序列。41ARM处置器不能保证上面所述的方式执行,因此:当代码第一次执行时,在STR指令之后有能够立刻产生一个中断。假设这样,曾经预取的SUB指令将被丢弃。当中断处置程序前往时,位于NextInstr处的指令被再次预取,而这次那么执行ADD指令。因此,虽然SUB指令通常最有能够被执行,但也有能够执行ADD指令。假设指令被再次执行,ARM处置器或存储器系统允许预取指令的备份,并运用这些备份而不是重新预取

31、。假设发生这种情况,在代码序列按照第二及以下能够执行时,SUB指令能够被执行。发生这种情况的主要缘由是存储器系统包含独立的指令和数据缓存。但是,也存在其它能够性。例如,一些分支预测的硬件保管了分支后的指令。总之,该当尽能够防止运用涉及自修正代码的编程技术。然而在许多系统中,几乎不能够完全防止自修正代码的运用。例如,任何一个允许将程序装入存储器然后执行的系统都运用自修正代码。42指令存储器屏障(IMB)每个ARM处置器实现都定义了一系列的操作,使自修正代码序列可以可靠地执行。这一串代码称为指令存储器屏障(IMB),它通常同时取决于ARM处置器的实现和存储器系统的实现。IMB序列必需在新的指令曾经

32、保管到存储器之后而尚未执行时执行。例如,在程序被加载之后并且在转移到它的入口之前。任何不以这种方式运用IMB的自修正代码序列都能够会执行不确定的动作。根据IMB所执行确实定的操作顺序取决于ARM处置器和存储器的实现,建议在软件设计时使IMB序列作为一个调用程序来交换与系统相关的模块,而不是直接插入到需求的地方。这样易于移植到其它ARM处置器和存储器系统。43另外,在许多实现当中,IMB序列包含了只能在特权方式下运用的操作,例如,规范系统控制协处置器提供的缓存清零和无效操作。为了允许用户方式程序运用IMB序列,引荐将其作为一个操作系统调用程序,由SWI指令调用。在SWI指令运用24位立刻数的系统

33、中指定所要求的系统效力,经过下面的指令即可恳求IMB序列:SWI 0 xF00000这是一个无参数调用,不前往结果,该当运用与带原型的C函数调用一样的调用商定: void IMB(void);区别在于运用SWI指令而不是BL指令调用。44有些实现可对已保管的新指令运用地址范围的知识来减少IMB执行的时间。因此,还可执行另外一个操作系统调用程序。该调用程序只根据指定的地址范围执行IMB。在SWI指令运用24位立刻数的系统中指定所要求的系统效力,经过下面的指令来恳求: SWI 0 xF00001该当运用与带原型的C函数调用类似的调用商定:void IMBRange(unsigned long st

34、art_addr, unsigned long end_addr) ;此处地址范围从start_addr(包含)到end_addr(不包含)。45留意:当运用规范的ARM过程调用规范时,start_addr在R0中传送,而edd_addr那么在R1中传送。对于某些ARM处置器实现来说,即使运用小地址范围,IMB执行的时间也能够非常长(数千个时钟周期)。对于自修正代码的小规模运用,这样很能够遭到较大损失。因此,建议自修正代码只用于不可防止或有足够的执行时间的情况。464.存储器映射的I/O执行ARM体系统构造I/O功能的规范是运用存储器映射的I/O。加载或存储I/O值时,运用提供应I/O功能的特

35、殊存储器地址。通常,从存储器映射的I/O地址加载用于输入,而存储到存储器映射的I/O地址那么用于输出。加载和存储都可用于执行控制功能,用于取代它们正常的输入或输出功能。存储器映射的I/O位置的动作通常不同于正常的存储器位置的动作。例如,正常存储器位置的两次延续加载,每次都会前往一样的值,除非中间插入了保管的操作。对于存储器映射的I/O位置,第二次加载前往的值可以不同于第一次前往的值。由于第一次加载的副作用(例如从缓冲区移走已加载的值)或是由于插入另一个存储器映射I/O位置的加载和存储的副作用。47(1)从存储器映射的I/O取指在前面章节中讲到,不同ARM处置器的实现(可以了解为不同的芯片)在存

36、储器取指时会有相当大的区别。因此,建议存储器映射的I/O位置只用于数据的加载和存储,而不用于取指。任何依赖于从存储器映射I/O位置取指的系统设计都能够难于移植到未来的ARM实现。48(2)对存储器映射I/O的数据访问一个指令序列在执行时,会在不同的点访问数据存储器,产生加载和存储访问的时序。假设这些加载和存储访问的是正常的存储器位置,那么它们在访问一样的存储器位置时只是执行交互操作。结果,对不同存储器位置的加载和存储可以按照不同于指令的顺序执行,但不会改动最终的结果。这种改动存储器访问顺序的自在可被存储器系统用来提高性能(例如,经过运用高速缓存和写缓冲器)。49对同一存储器位置的访问还拥有其它

37、可用于提升性能的特性从一样的位置延续加载(没有产生存储)产生一样的结果。从一个位置执行多加载操作,将前往最后保管到该位置的值。对某个数据规格的多次访问,有时可合并成单个的更大规模的访问。例如,分别存储一个字所包含的两个半字可合并成存储单个字。50访问存储器映射的I/O位置时不能进展优化,它们的时间顺序绝对不能改动假设存储器字、半字或字节访问的对象是存储器映射的I/O位置,那么一次访问会产生副作用,使后续访问改动成一个不同的地址。假设是这样,那么不同时间顺序的访问将会使代码序列产生不同的最终结果。因此,当访问存储器映射的I/O位置时不能进展优化,它们的时间顺序绝对不能改动。51存储器访问的数据规

38、格都不会改动对于存储器映射的I/O,另外还有很重要的一点,那就是每次存储器访问的数据规格都不会改动。例如,在访问存储器映射的I/O时,一个指定从4个延续字节地址读出数据的代码序列决不能合并成单个字的读取,否那么会使代码序列的最终执行结果不同于期望的结果。类似地,将字的访问分解成多个字节的访问能够会导致存储器映射I/O设备无法按照预期进展操作。52访问存储器映射的I/O时的要求限制存储器映射I/O位置的存储器属性。例如,在规范存储器系统构造中,存储器位置必需是无高速缓存和无缓冲区的。限制访问存储器映射I/O位置的规格或对齐方式。例如,假设一个ARM实现带有16位外部数据总线,它可以制止对存储器映

39、射I/O运用32位访问,由于32位访问无法在单个总线周期内执行。要求额外的外部硬件。例如,带16位外部数据总线的ARM实现可以允许对存储器映射的I/O运用32位访问,但要求外部硬件将两个16位总线访问合并成对I/O设备的单个32位访问。53假设数据存储器访问序列包含一些符合要求的访问和一些不符合要求的访问,那么:对于符合要求的访问,其数据规格和数目都被维护,没有相互合并或没有与不符合要示的访问以任何方式合并。不符合要求的访问可以相互合并。符合要求的访问彼此的时间的顺序被维护,但它们相以于那些不符合要求的访问的时间顺序不能保证。5412.2.6 异常只需正常的程序流被暂时中止,处置器就进入异常方

40、式。当发生异常时,处置器在处置异常之前,必需先保管当前的形状。当异常处置完成后,需求将处置器的形状恢复四处置异常之前,之后当前程序方可继续执行。ARM处置器允许多个异常同时发生,它们将会按固定的优先级进展处置。本小节内容:1.ARM支持的异常类型2. 异常优化级与异常嵌套3.异常向量4.异常呼应和前往过程5.中断延迟6.复位551.ARM支持的异常类型56ARM体系构造支持的异常类型有7种,如表12-5所示, 分为如下3类:指令执行引起的直接异常 软件中断、未定义指令和指令预取 中止都属于这一类;指令执行引起的间接中断 数据中止属于这一类;外部产生的与指令流无关的异常 复位、IRQ和FIQ属于

41、这一类。表12-5 ARM体系构造支持的异常类型57异常类型具体功能复位(Reset)复位电平有效时,产生复位异常,ARM处理器立刻停止执行当前指令,程序跳转到复位异常处理程序处执行指令未定义指令(Undefined)当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机制进行软件仿真扩展ARM或Thumb指令集软件中断(SWI)该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作。可使用该异常机制实现系统功能调用,用于请求特定的管理功能指令预取中止(Prefetch Abort)当处理器预取指令的地址不存在或该地址不允许当前指令访问时,存储器会向处理器发出

42、中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。当预取指令未被执行,如指令流水线中发生了跳转,则预取指令异常不会发生数据中止(Data Abort)当处理器数据访问指令的地址不存在或该地址不当前指令访问,则会产生数据中止异常。发生数据中止时,系统的响应与指令的类型有关外部中断请求(IRQ)当处理器的外部中断请求引脚nIRQ有效时,且CPSR中的1位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务快速中断请求(FIQ)当处理器的快速中断请求引脚nFIQ有效时,且CPSR中的F位为0时,产生FIQ异常。FIQ异常是为了支持数据传输或者通道处理而设计的当多个异常同时发生时,系统

43、根据固定的优化级处置异常的处置次序。异常优先级按以下顺序陈列了优先权,复位优先级最高,未定义指令和SWI优先级最低。2. 异常优化级与异常嵌套5859(1)复位从确定的形状启动处置器,使得一切其他未处理的异常都和当前处置器运转的形状不再有关,因此具有最高优先级。(2)未定义指令和SWI都依托指令的特殊译码产生,由于两者是互斥的指令编码,因此不能同时发生。60(3)中断优先级判决最复杂的情况是FIQ、IRQ和第三个非复位的异常同时发生时:由于FIQ比IRQ优先级高并将IRQ屏蔽,所以IRQ被忽略,直到FIQ处置程序明确地将IRQ运用或前往到用户代码为止;假设第三个异常是数据中止,那是由于进入数据

44、中止异常并未将FIQ屏蔽,所以处置器将在进入数据中止处置程序后立刻进入FIQ处置程序。数据中止将在FIQ处置程序前往时对其进展处置;假设第三个异常不是数据中止,将立刻进入FIQ处置程序。当FIQ和IRQ两者都完成时,程序将前往到产生第三个异常的指令,在余下一切的情况下异常将重现并进展相应的处置。3.异常向量61异常向量异常类型进入模式0 x00000000复位管理模式0 x00000004未定义指令未定义模式0 x00000008软件中断管理模式0 x0000000C指令预取中止中止模式0 x00000010数据中止中止模式0 x00000014保留保留0 x00000018IRQIRQ0 x

45、0000001CFIQFIQ表12-6 ARM异常向量62普通来说,在异常向量处将包含一条跳转指令,跳转到异常处置程序。但由于 FIQ占据最高向量地址,它可以立刻执行。当ARM处置器发生异常时,程序计数器PC被强迫设置为对应的异常向量,从而转到异常处置程序,当异常处置程序完成后,前往到主程序继续执行。异常发生后,除了复位异常立刻中止当前指令之外,其他异常都是在处置器完成当前指令后再执行异常处置程序。ARM处置器对异常中断的呼应过程如下所述:1) 保管处置器当前形状、中断屏蔽位以及条件标志位。这是经过将当前程序形状存放器CPSR的内容保管到将要执行的异常中断对应的SPSR存放器中实现的;2) 设

46、置当前程序形状存放器CPSR中相应的位。包括:设置CPSR中的位,使处置器进入相应的方式;设置CPSR中的位,制止IRQ中断,当进入FIQ方式时,制止FIQ中断;3) 将存放器LR_mode设置成前往地址;4.异常呼应和前往过程634) 将程序计数器值(PC)设置成该异常中断的异常向量地址,从而跳转到相应的异常中断处置程序处执行。异常处置完成后必需前往到原来程序处继续执行,为到达这一目的,需求执行四个根本操作:恢复原来被维护的用户存放器;恢复被中断的程序的处置器形状,即将SPSR_mode存放器内容复制到CPSR中;前往到发生异常中断的指令的下一条指令处执行,即将LR_mode存放器的内容复制

47、到程序计数器PC中;去除CPSR中的中断制止标志I和F,开放外部中断和快速中断。64 (1)最大中断延迟 当FIQ使能时,最坏情况下FIQ的延迟时间包含:1)Tsynemax(恳求经过同步器的最长时间)。Tsynemax为4个处置器周期(由内核决议); 2)Tldm(最长指令的完成时间)。最长的指令是加载包括PC在内一切存放器的LDM指令。Tldm在零等待形状系统中的执行时间为20个处置器周期; 3)Texc(数据中止异常进入时间)。Texc为3个处置器周期; 4)Tfiq(FIQ进入时间)。Tfiq为2个处置器周期(由内核决议)。5.中断延迟65总的延迟时间是29个处置器周期,在系统运用40

48、MHz处置器时钟时,略微超越0.7ms。当在时间终了后,处置器执行在0 x1C处的指令。 (2)最小中断延迟FIQ或IRQ的最小中断延迟是恳求经过同步器的时间加上Tfiq (共6个处置器周期)。66当nRESET信号被拉低时(普通外部复位引脚电平的变化和芯片的其它复位源会改动这个内核信号),内核中止正在执行的指令,并且地址总线继续添加。 当nRESET信号再次变为高电平常,ARM处置器执行以下操作: 1) 强迫M4:0变为b10011(管理方式); 2) 置位CPSR中的I和F位; 3) 清零CPSR中的T位; 4) 强迫PC从地址0 x00开场对下一条指令进展取指; 5) 前往到ARM形状并

49、恢复执行。 在复位后,除PC和CPSR之外的一切存放器的值都不确定。6.复位67ARM处置器是基于精简指令集计算机(RISC)原理设计的,指令集和相关译码机制较为简单。ARM体系构造具有32位ARM指令集和16位Thumb指令集,ARM指令集效率高,但是代码密度低;而Thumb指令集具有较高的代码密度,却依然坚持ARM的大多数性能上的优势,它是ARM指令集的子集。一切的ARM指令都是可以有条件执行的,而Thumb指令仅有一条指令具备条件执行功能。ARM程序和Thumb程序可相互调用,相互之间形状切换开销几乎为零。6812.3 ARM编程指令 寻址方式是根据指令中给出的地址码字段来实现寻觅真实操

50、作地址的方式。ARM处置器有8种根本寻址方式。 1) 存放器寻址; 2) 立刻寻址; 3) 存放器移位寻址; 4) 存放器间接寻址; 5) 基址寻址; 6) 多存放器直接寻址; 7) 堆栈寻址; 8) 相对寻址。12.3.1 ARM处置器寻址方式691. 32位ARM指令集(1)分支指令;(2)数据处置指令;(3)加载和存储指令;(4)协处置指令;(5)杂项指令12.3.2 指令集70ARM指令集提供了两条产生异常的指令,经过这两条指令可以用软件的方法实现异常。 软件中断指令(SWI); 断点中断指令(BKPT)。2. 16位Thumb指令集(1)分支指令分支指令又称转移指令,用于实现程序流程

51、的转移,这类指令可用来改动程序的执行流程或调用子程序。在ARM程序中可运用专门的分支指令,也可以经过直接向程序计数器(PC)写入转移地址值的方法实现程序流程的转移。经过向程序计数器(PC)写入转移地址值,便可以在4GB的地址空间中恣意转移;假设在转移之前结合运用ARM的MOV LR, PC等指令,那么可保管未来的前往地址值,从而实如今4GB地址空间中的子程序调用。71分支指令除了允许数据处置或加载指令经过PC来改动控制流以外,还提供了一个24位的符号偏移,可实现最大32MB向前或向生的地址空间转移。转移和链接(BL)选项在跳转后将指令地址保管在R14(LR)当中。这样经过将LR复制得到PC可实

52、现子程序的前往。另外,有的分支指令可在指令集之间进展切换。此时,分支指令执行完成后,处置器继续执行Thumb指令集的指令。这样就允许ARM代码调用Thumb子程序,而ARM子程序也可前往到Thumb调用程序。Thumb指令集中类似的指令可实现对应的Thumb ARM的切换。72(2)数据处置指令数据处置指令分为数据传送指令、算术/逻辑运算指令、比较指令、乘法指令等几种类型。数据传送指令用于存放器之间进展数据的传输。算术运算指令完成根本的加、减运算。逻辑运算指令完成常用的逻辑运算,算术/逻辑运算指令要将运算结果保管在目的存放器中,并且需求更新CPSR中的标志位。比较指令不保管运算结果,只更新CP

53、SR中的标志。数据传送指令 算术/逻辑运算指令比较指令 乘法指令73数据传送指令主要用于将一个存放器中的数据传送到另一个存放器中,或者将一个立刻数传送到存放器中,这类指令通常用来对存放器初始化。数据传送指令包括数据直接传送指令和数据取反传送指令。74算术/逻辑运算指令算术/逻辑运算指令一共有12条,它们运用一样的指令格式。它们最多运用两个源操作数来执行算术或逻辑操作,并将结果写入目的存放器。也选择根据结果更新条件代码标志。两个源操作数中,其中一个一定是存放器,另一个有两种根本方式:立刻数或是存放器,可选择移位。假设操作数是一个移位存放器,移位计数可以是一个立刻数或另一个存放器的值。可以指定4种

54、移位的类型。每一条算术/逻辑运算指令都可以执行算术/逻辑和移位操作。这样就可轻松实现各种不同的分支指令。75比较指令比较指令通常用于将一个存放器与一个32位的值进展减法运算,根据结果更新CPSR中的标志位。对于比较指令,不需求运用S后缀即可改动标志位的值。需求留意的是,其运算结果不保管,因此不影响其他存放器的内容。比较指令更新标志位后,其他指令能够经过条件发送来改动程序的执行顺序。比较指令源操作数的格式与算术/逻辑指令一样,包括移位操作的功能。76乘法指令乘法指令是将一对存放器的内容相乘,然后根据指令类型把结果累加到其他的存放器。ARM处置器支持的乘法指令与乘加指令共有6条。根据运算结果可分为

55、32位运算和64位运算两类。64位乘法又称为长整型乘法指令,由于结果太长,不能放在一个32位的存放器中,所以把结果存放在两个32位的存放器Rdlo和Rdhi中。Rdlo存放低32位,Rdhi存放高32位。与前述的数据处置指令不同,指令中的一切源操作数和目的存放器都必需为通用存放器,不能为立刻数或被移位了的存放器。同时,目的存放器Rd和操作数Rm必需是不同的存放器。77(3)加载和存储指令ARM指令系统中的加载和存储指令,用于在ARM存放器和存储器之间传送数据。加载指令用于将存储器中的数据传送到存放器,存储指令那么将存放器中的数据传送到存储器中。处置器对存储器的访问只能经过加载和存储指令实现。A

56、RM指令系统中有3种加载和存储指令:加载和存贮存放器指令、加载和存储多个存放器指令和交换存放器和存储器指令。加载和存贮存放器指令在ARM存放器和存储器之间提供灵敏的单数据项传送方式 。支持的数据项类型为字节(8位)、半字(16位)和字(32位)。78加载和存贮存放器指令加载存放器指令可将一个32位字、一个16位半字或一个8位字节从存储器装入存放器。字节和半字在加载时自动实现零扩展和符号扩展。存贮存放器指令可以将一个32位字、一个16位半字或一个8位字节从存放器保管到存储器。加载和存贮存放器指令有3种主要的寻址方式,这3种方式都运用指令指定的基址存放器和偏移量:79在偏移寻址方式中,将基址存放器

57、值加上或减去一个偏移量得到存储器地址;在前变址寻址方式中,存储器地址的构成方式与偏移寻址方式一样,但存储器地址会回写到基址存放器;在后变址寻址方式中,存储器地址为基址存放器的值。基址存放器的值加上或减去偏移量的结果写入基址存放器。在每种情况下,偏移量都可以是一个立刻数或是一个变址存放器的值。基于存放器的偏移量也可运用移位操作来调整。80加载和存储多个存放器指令加载多个存放器(LDM)和存储多个存放器(STM)指令可以对恣意数目的通用存放器执行块转移。支持以下4种寻址方式:前递增、后递增、前递减、后递减。基地址由一个存放器值指定,它在转移后可选择更新。由于子程序前往地址和PC值位于通用存放器当中

58、,运用LDM和STM可构成非常高效的子程序入口和出口:子程序入口处的单个STM指令可将存放器内容和前往地址压入堆栈,在处置中更新堆栈指针;子程序出口处的单个LDM指令可将存放器内容从堆栈恢复,将前往地址装入PC并更新堆栈指针;81交换存放器和存储器指令交换指令(SWP)执行以下操作:从存放器指定的存储器位置装入一个值;将存放器内容保管到同一个存储器位置;将步骤1装入的值写入一个存放器。假设步骤1和3指定同一个存放器,那么存储器和存放器的内容就实现了互换。交换指令执行一个特殊的、不可分割的总线操作。该操作允许信号量的原子更新,并支持32位字和8位字节信号量。82(4)协处置器指令数据处置指令。启

59、动一个协处置器公用的内部操作;数据传送指令。将数据在协处置器和存储器之间进展传送。传送的地址由ARM处置器计算;存放器传送指令。允许协处置器传送到ARM存放器,或将ARM存放器值传送到协处置器。83(5)杂项指令包括形状存放器分支指令和异常产生指令。形状存放器分支指令将CPSR或SPSR的内容转移到一个通用存放器,或者反过来将通用存放器的内容写入CPSR或SPSR存放器。写CPSR会:设定条件代码标志的值;设定中断使能位的值;设定处置器方式84产生异常的指令85软件中断指令(SWI)。SWI指令导致产生软件中断异常,它通常用于向操作系统恳求调用OS定义的效力。SWI指令导致处置器进入管理方式(

60、特权方式)。这样一个非特权义务就能对特权的功能进展访问,但是只能以OS所允许的方式访问。断点中断指令(BKPT)。BKPT指令产生软件断点中断,用于调试程序。2. 16位Thumb指令集86分支指令数据处置指令 加载和存储指令 异常产生指令 Thumb在32位构造上实现了16位的指令集,这样可提供比16位构造更高的性能和比32位构造更高的代码密度。Thumb指令集不是一个完好的指令集,它仅仅是最通用的ARM指令的子集,不能期望处置器只执行Thumb指令而不支持ARM指令。Thumb指令长度为16位,每条指令都对应一条32位ARM指令。分支指令87与ARM分支指令不同,Thumb分支指令B、BX

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论