Presentation is loading. Please wait.

Presentation is loading. Please wait.

嵌入式体系结构与应用 第二章-ARM处理器.

Similar presentations


Presentation on theme: "嵌入式体系结构与应用 第二章-ARM处理器."— Presentation transcript:

1 嵌入式体系结构与应用 第二章-ARM处理器

2 了解ARM处理器 ARM指令集体系结构版本 ARM微处理器系列 ARM微处理器后缀含义

3 ARM处理器 ARM简介 ARM内核系列介绍 ARM内核相关技术简介

4 附注- ARM技术名词链接 RISC 、 流水线 Thumb指令集 JTAG Jazelle MMU、MPU Cache、TCM
AMBA、AHB、APB

5 ARM简介 ARM-Advanced RISC Machines
1985年4月26日 诞生于剑桥 Acorn公司,名字源于Acorn Risc Machine 1990年11月 ARM公司成立 ARM公司为IP供应商,本身不生产芯片

6 ARM简介 ARM处理器具有 体积小、 低功耗、低成本、高性能的特点。 2011年,ARM在移动设备市场的占有率已超过90%。
体积小、 低功耗、低成本、高性能的特点。 2011年,ARM在移动设备市场的占有率已超过90%。 2011年,ARM v8架构诞生,支持64位指令集。 2014年,AMD 基于64-bit ARM Cortex-A57内核的服务器处理器Opteron A1100诞生! 扩展ARM的发展方向

7 ARM与RISC技术 ARM-并非纯RISC机 其RISC特性:
指令简单,定长,单周期 流水线技术 大量通用寄存器 LOAD/STORE指令结构 ARM-并非纯RISC机 其RISC特性: 流水线,定长32位指令,大量通用寄存器,Load/Store结构,硬布线CU; 非RISC特性: 不是所有指令都是单周期,例如多寄存器加载/存储指令。 内嵌桶形移位寄存器,可在算术/逻辑指令中预先对操作数进行移位操作。 支持双指令集,32位ARM和16位Thumb。 条件执行指令; 执行效率 传输效率 兼顾代码量与执行效率 执行效率

8 ARM指令集 体系结构版本 指令集 版本 内核实现范例 V1 ARM1 V2 ARM2、3 V3 ARM6、ARM7 V4
ARM7TDMI、StrongARM、ARM9T V5 ARM9E、ARM10E、XScale V6 ARM11 V7 Cortex系列 V8 64位处理器 目前仍在使用的ARM架构版本 ARM V8 最新架构,2011年10月提出,目前主要面向服务器,消费类和企业级约2014面世

9 ARM指令集版本-V1 只在原型机ARM1出现过。其基本性能如下: 26位寻址空间,64MB 基本的数据处理指令(无乘法)
字节、半字和字的Load /Store 指令 转移指令,包括子程序调用及链接指令 软件中断SWI指令(操作系统使用)

10 ARM指令集版本-V2 ARM2和ARM3架构采用的V2,对V1进行了扩充 增加了以下功能: 增加乘法和乘加指令 片上Cache
支持协处理器CP15操作指令 快速中断模式FIQ 原语操作-SWP/SWPB的寄存器交换指令

11 ARM指令集版本-V3 V3 架构对ARM体系结构作了较大的改动: 把寻址空间增至32位(4GB)
增加了当前程序状态寄存器CPSR和存储程序状态寄存器SPSR以便对异常的处理 支持MMU-存储器管理 增加了中止ABT 和 未定义UDF2种新的特权处理模式

12 ARM指令集版本-V4 对V3进行扩充,增加特性如下: 符号化半字及符号化字节的存取指令 THUMBTM -35% 代码压缩
THUMB与ARM之间的切换指令BX 完善了软件中断SWI指令的功能 处理器引进特权方式-系统SYS模式 不再兼容26位体系结构,并规定了哪些指令将作为未定义指令 ARM v4T指令集架构 ARM7系列 ARM9系列 ARM7TDMI ARM920T

13 ARM指令集版本-V5 新增特性有: ARM状态和Thumb状态之间进行转换转移BLX指令
支持数字信号处理DSP类指令--后缀E JazelleTM- Java性能优化,可提高8倍 --后缀J ARMv5E ARM9E系列 ARM10E系列 Intel Xcale ARM926EJ ARM966EJ ARM1020E ARM1022E PXA2xx

14 ARM指令集版本-V6 V6版新架构在低功耗的同时,面向消费类电子强化了图形处理性能,追加有效进行多媒体处理的SIMD功能。新增功能:
8级流水线 增强的Cache结构,支持实地址Cache TrustZone – 硬件支持的安全技术 Thumb-2指令集- 16位和32位指令的混合指令集 Media扩充-音/视频性能优化,可提高4倍 MultiCore – 更好的支持多核结构

15 ARM指令集版本-V7 用于高端、对实时性有要求的嵌入式系统 全新ARMv7架构,命名为Cortex,针对不同的应用,分为三个系列:
嵌入式处理器类型 典型应用 应用处理器 PAD、智能手机 实时控制处理器 汽车ABS系统,交换机,航空系统 微处理器 智能家电控制器 ARM指令集版本-V7 全新ARMv7架构,命名为Cortex,针对不同的应用,分为三个系列: Cortex-A (Application) 用于高性能的开放应用平台,如平板电脑、智能手机 Cortex-R(Real-time) 用于高端、对实时性有要求的嵌入式系统 Cortex-M (MCU) 用于对成本敏感、深度嵌入的嵌入式系统 Cortex-A8、A9、A15 Cortex-R4 Cortex-M3

16 ARM指令集版本-V8 V8版-64位新架构,主要特点: 64位通用寄存器、SP(栈顶指针)和PC(程序计数器)
Cortex-A53、A57 V8版-64位新架构,主要特点: 64位通用寄存器、SP(栈顶指针)和PC(程序计数器) 64位数据处理和虚拟存储器寻址 支持两种状态AArch64和AArch32,可在A32指令集模型和A64指令集模型之间切换,以保持兼容性 A64是AArch64执行状态的全新32位固定长度指令集 A64除支持64位操作数外,还增加了一些向量处理、浮点处理指令。 A32是在原有32位指令集的基础上有所增强;

17 ARM指令集版本-V8 A32是在原有32位指令集的基础上有所增强;

18 ARM内核---架构版本---技术示意图

19 ARM微处理器系列 ARM7系列 ARM9系列 ARM9E系列 ARM10E系列 ARM11系列 Secur Core系列
Xscale架构系列 Cortex-A/M/R ARM提供的IP ARM微处理器内核 ARM微处理器核

20 ARM微处理器系列 ARM公司出售的IP包括两种: ARM内核 ARM核
ARM7TDMI,ARM9TDMI,AM9E-S,ARM10TDMI ARM核 =ARM内核+MMU+AMBA+Cache+协处理器 ARM7x0T,ARM9x0T,ARM9x6E-S,ARM1020E

21 ARM处理器内核与核 ARM7内核-ARM7TDMI ARM7核-ARM720T

22 ARM {x}{y}{z}{T}{D}{M}{I}{E}{J}{F}{-S}
常见处理器举例 ARM920 ARM1020 ARM1156 xyz 是数字编号 x: 系列编号,ARM7/ARM9/ARM11… y: 内部存储管理MMU和保护单元MPU z: 片内高速缓存情况

23 ARM {x}{y}{z}{T}{D}{M}{I}{E}{J}{F}{-S}
常见处理器举例 ARM926EJ-S ARM1176JZ-S T --支持16bit Thumb指令集 D --片上调试 JTAG M --支持快速乘法 I – 嵌入式跟踪宏单元 Embedded ICE E -- 增强型DSP指令集 J --Java硬件加速器-Jazelle F -- 向量浮点运算单元 S – 提供可综合的VHDL文件 Z – 安全处理技术 TrustZone ARMv4 ARMv5 ARMv6

24 T-Thumb 16位指令集 ARM处理器命名后缀说明 与ARM指令集相比: 完成相同的操作,Thumb指令需要更多 指令密度比ARM指令高
需要时间多 需要空间少 代表性架构版本及内核 ARM v4T 以后,均有 经典内核:ARM920T(v4T) 处理器: Samsung S3c2410/2440

25 Back ARM指令集与Thumb指令集比较 指令长度 32位 16位 内核指令 58条 30条 条件执行 大多数指令 只有分支指令
ARM(cpsr T = 0) Thumb (cpsr T =1) 指令长度 32位 16位 内核指令 58条 30条 条件执行 大多数指令 只有分支指令 数据处理指令 访问桶型移位器和ALU 独立的桶型移位器和ALU指令 程序状态寄存器 特权模式下可以读/写 不能直接访问 寄存器使用 15个通用寄存器+PC 8个通用寄存器+PC

26 D- Debug 片上调试JTAG ARM处理器命名后缀说明 JTAG – 边界扫描测试接口标准 传输协议和接口
芯片对外的JTAG信号5个:TMS(测试模式选择)、TCK(时钟)、TDI(数据输入)、TDO(数据输出信号)、nTRST(复位) 能够直接向ARM内部总线写入数据 调试ARM,向宿主机返回当前处理器的内部总线、寄存器的状态

27 M-长乘法指令 ARM处理器命名后缀说明 ARM指令集V3版以后加入了两条指令 MUL-32位×32位 长乘指令
代表性架构版本及内核 ARM v4T 以后,均有 经典内核:ARM7TDMI(v4T) 处理器:Samsung S3c44B0 M-长乘法指令 ARM指令集V3版以后加入了两条指令 MUL-32位×32位 长乘指令 MLA-32位×32位+32位 长乘加指令 长乘法指令在V4版以后成为系统标准部分 说明:ARM7TDMI后的内核都具备TDMI四种特性,无论是否标明

28 E-Enhanced DSP 指令集 ARM处理器命名后缀说明 LDRD-双字取指令 实现饱和的带符号数的加/减法操作指令 双字数据操作指令
SDTD-双字存指令 MCRR/MRRC-协处理器寄存器传输指令 PLD-Cache预取指令 代表性架构版本及内核 ARM v5E 以后出现 经典内核:Intel Xscale 处理器: PXA2xx

29 J- Jazelle硬件Java加速器 ARM处理器命名后缀说明 从硬件的角度,能够解释执行部分Java字节流形式代码
要支持完整J2ME,需要外加一个Java虚拟机(JVM)的修订版本(SUN 授权) 提高J2ME程序(如:游戏)的执行速度。 代表性架构版本及内核 ARM v5E 以后出新的扩展功能 经典内核:ARM1176JZF-S 处理器:Samsung S3c6410

30 ARM处理器系列-ARM7 s3c44B0 ARMv4T架构 ARMv5TEJ架构 ARM7TMDI是目前仍在使用的32位ARM嵌入式处理器之一,属低端ARM处理器内核。主要性能:工艺0.13um(新近)、电压3.3V(内部1.2v)、时钟0~66MHZ、功耗87mW。

31 ARM处理器系列-ARM7 ARM7系列是32位嵌入式RISC处理器,属低端ARM处理器内核,具有以下特点:
具有嵌入式ICE-RT逻辑,调试方便 极低的功耗(100mW左右),适合便携式产品。 3级流水线结构 兼容16位Thumb指令集 指令系统与ARM9、ARM10E系列兼容 主频通常为20~100MHZ,最高可达130Mhz

32 ARM技术小注-流水线 ARM7系列三级流水线:取指、译码、执行 ARM9系列五级流水线: 取指、译码、执行 +存储访问+回写 处理一条指令
时间(时钟周期) 指令1 T2 T3 T4 T1 指令2 指令3 取指 译码 执行 取指 译码 执行 取指 译码 执行

33 ARM处理器系列-ARM9(ARMv4T) ARM9编程结构 ARM9系列在相同的工艺下,其性能是ARM7的2倍,具有以下特点:
5级整数流水线,工作频率一般为200MHz左右; 支持32位ARM指令集和16位Thumb指令集; 支持32位的高速AMBA总线接口; 全性能的MMU 哈佛结构,分离的数据Cache和指令Cache,具有更高的指令和数据处理能力。 MPU ARM9编程结构

34 ARM技术小注 - AMBA AMBA(Advanced Microcontroller Bus  Architecture)提供一种特殊的机制,可将RISC处理器集成在其它IP芯核和外设中。2.0版AMBA标准定义了三组总线: AHB(AMBA高性能总线) 应用于高性能、高时钟频率的系统模块,它构成了高性能的系统骨干总线 APB(AMBA外设总线) 是本地二级总线,通过桥和AHB相连。它主要是为了满足不需要高性能流水线接口或不需要高带宽接口的设备的互连。

35 AMBA总线结构示意 S3c2410处理器结构框图

36 ARM技术小注 – 存储管理 ARM内核支持的硬件存储管理方式有三种情况: a.无硬件保护,主要面向MCU类型应用
b. MPU – 存储器保护单元 对内存划分区域,规定不同的访问限制,当违反限制时,产生异常。 根据权限规定进行保护,不支持存储映射机制。 c. MMU – 存储器管理单元 硬件支持虚拟地址与物理地址的映射转换,并进行访问权限管理。复杂嵌入式操作系统,如Linux必须要求MMU的支持。

37 ARM处理器系列-ARM9E(ARMv5) ARM9编程结构 与ARM9T系列相比,增加以下功能:
ARM9E系列为综合型处理器,使用单一的处理器内核提供了微处理器、DSP、Java应用系统的解决方案。 与ARM9T系列相比,增加以下功能: 支持DSP指令集,适合于需要高速数字信号处理的场合; 最高主频可达300MHz; 支持VFP9浮点处理协处理器 ARM9编程结构

38 ARM技术小注 – Cache与TCM ARM内核支持的硬件存储管理方式有三种情况: Cache – 高速缓存 TCM – 紧密耦合存储器
介于CPU和主存储器之间的一种高速缓冲存储器,硬件实现各种机制,对CPU和程序员透明。 带来的问题:程序的调入时间/是否调入不可知,数据的准确回写时间不可知,难以满足实时系统要求。 TCM – 紧密耦合存储器 高速SRAM,属于内存的一部分,位置像Cache一样,集成到处理器中,既可以加速存储访问,又能够准确获知存储操作的时间,用于满足实时性要求高、速度要求快的应用。

39 ARM处理器系列-ARM10E (ARMv5E架构)
具有以下特点: 支持DSP指令集,适合于需要高速数字信号处理的场合; 6级整数流水线;工作频率一般为400MHz左右; 支持32位ARM指令集和16位Thumb指令集; 支持64位的高速AMBA AHB总线接口和内部总线; 支持VFP浮点处理协处理器; 内嵌并行读/写操作部件; 全性能的MMU 支持数据Cache和指令Cache,具有更高的指令和数据处理能力。

40 ARM处理器系列-ARM11(ARMv6) ARM11系列。 在0.13um工艺下, ARM11T的运行频率高达500~1000Mhz
S3c6410 ARM1176JZF-s内核 ARM11系列。 在0.13um工艺下, ARM11T的运行频率高达500~1000Mhz ARM11包含一个64位端口、4种状态的跳转目标地址缓存 新的ARM11支持SIMD指令,可使某些算法速度提高2~3倍

41 ARM处理器系列-SecurCore SecurCore系列处理器主要针对安全要求高的设备,为智能卡及其他安全IC开发商提供独特的32位系统设计,具有特定的反伪造方法,有助于防止对硬件和软件的盗版。

42 ARM处理器系列-StrongARM与Xscale
Strong ARM- ARMv4架构,Intel,5级流水线 Xsacle是Intel推出的StrongARM后续产品,基于ARMv5TE所设计的处理器,具有协处理器接口,可以直接扩展DSP处理器,是目前常见的一款ARM处理器。 已于2006年,出售给Marvell公司

43 ARM9处理器编程结构 ARM9 哈佛结构 流水线技术 ARM与Thumb 存储器模式 运行模式 内部寄存器组 异常处理 ARM9TDMI
ARM920T - s3C2410/s3c2440 ARM9E-S ARM926EJ-S - s3C2416

44 1、哈佛结构 2410 处 理 器 结 构 框 图 2、MMU 3、AMBA架构 4、集成外设 Back

45 冯.诺伊曼与哈佛结构-冯.诺伊曼结构 数据和程序存放到同一个存储器中,使用同一存储器端口进行数据和指令的读取。 ARM7采用

46 冯.诺伊曼与哈佛结构-哈佛结构 数据和程序存放到两个独立的存储器中,使用两个不同的存储器端口进行数据和指令的读取。 ARM9采用

47 流水线结构 ARM7采用的三级流水线结构 译码 取指 执行add 执行sub 执行cmp 时间 Add Sub Cmp

48 流水线结构 ARM9采用五级流水线结构 I-Cache和D-Cache分离的哈佛结构 增加数据写回的专门数据通路和寄存器 减少冲突
执行阶段细化为三个阶段:运算/计算地址,访问存储器和回写结果; 减少LOAD指令的执行时间 执行周期: 移位/运算; 计算物理地址 访问存储器周期: 读/写存储器; 或缓冲一拍

49 ARM与Thumb指令集区别 ARM/thumb比较表 Thumb指令为16位,ARM指令为32位。
CODE16 CMP R0,#0 BEQ next MOV R1,#1 next MOV R2,#2 Thumb指令为16位,ARM指令为32位。 Thumb指令为二地址,ARM指令一般为三地址。 Thumb指令集相比ARM指令集,没有协处理器指令,没有长乘和长乘加指令。 Thumb指令除跳转指令外,不带条件码字段,ARM指令大多带有条件码字段。 指令执行时,由CPSR的T位确定当前是否为Thumb指令。 ARM程序 CODE32 CMP R0,#0 MOVNE R1,#1 MOVEQ R2,#2 ARM/thumb比较表

50 ARM与Thumb工作状态 ARM工作状态--执行ARM指令 Thumb工作状态--执行Thumb指令 工作状态切换:
分为显式切换和隐式切换两种方式 ① 执行BX或者BLX指令 ②Thumb状态下,发生异常,返回ARM状态 显式 隐式 BX/BLX ARM状态 Thumb 状态 异常 程序演示

51 ARM9的存储器模式-数据类型 ARM9处理器对于字,半字,字节的长度定义 由于ARM9为32位处理器,存储字长为32位。
边界对齐 ARM920T强制边界对准 目的:提高访存速度 数据:根据类型对准 指令: ARM指令按4字节对准 Thumb指令按2字节对准 ARM9的存储器模式-数据类型 ARM9处理器对于字,半字,字节的长度定义 由于ARM9为32位处理器,存储字长为32位。 字-Word:32位; 半字-HalfWord:16位; 字节-Byte:8位; 每连续的四个字节存放一个字 边界对准问题 端序问题

52 ARM9存储器模式 ARM9支持两种存储端序,分别是: 大端对齐(Big-Endian )
构成一个字的四个字节,最高字节存放在地址最低的存储字节中,而最低字节存放在地址最高的存储字节中。 小端对齐(Little-Endian ) 构成一个字的四个字节,最高字节存放在地址最高的存储字节中,而最低字节存放在地址最低的存储字节中。 都是以最低地址作为 字/半字的地址

53 ARM9存储器模式 ARM9支持两种存储端序,分别是: 大端对齐(Big-Endian )
端序影响 ARM9支持两种存储端序,分别是: 大端对齐(Big-Endian ) 构成一个字的四个字节,最高字节存放在地址最低的存储字节中,而最低字节存放在地址最高的存储字节中。 小端对齐(Little-Endian ) 构成一个字的四个字节,最高字节存放在地址最高的存储字节中,而最低字节存放在地址最低的存储字节中。 存(STR)取(LDR)指令的实际操作方式 eg. LDR R1,[R0] 都是以最低地址作为 字/半字的地址 最低地址 12H 34H 56H 78H 最高地址 字节/半字操作的特殊功能寄存器的引用地址 因边界对准,仍然占用4个字节地址 引用习惯:引用低位 eg.以操作单字节的UART发送数据寄存器UTXH0为例 0x 小端 大端 0x

54 ARM9存储器模式 端序控制 ------------------- ♣ 920T处理器 内核BIGEND信号电平状态决定:
高电平- 采用大端对准 低电平-采用小端对准 ♣ 通过协处理器CP15的控制寄存器C1进行配 置: C1[7] = 0 - 小端对准(默认) = 1 - 大端对准

55 ARM9存储器模式-示意图 大端对齐模式 最低字节 最高字节 12H 34H 56H 78H (0H) = H

56 ARM9存储器模式-示意图 小端对齐模式(常用) 最低字节 最高字节 78H 56H 34H 12H (0H) = H

57 ARM9的7种运行模式 正常模式 异常模式 FIQ(Fast Interrupt Requst) – 快速中断请求 USR(User)
特权模式 正常模式 异常模式 FIQ(Fast Interrupt Requst) – 快速中断请求 USR(User) – 普通用户模式 IRQ( Interrupt Requst) – 普通外部中断模式 SYS(System) – 系统模式 特权模式 ABT( Abort) – 中止模式 特权模式下,可通过修改CPSR的MODE位切换模式 UDF( Undefine) – 未定义模式 ARM为各种异常模式提供独立的寄存器,方便异常处理 SVC( Supervisor) – 管理模式

58 不属于ARM/Thumb/协处理器指令的指令进入流水线
异常模式 进入原因 主要目的 FIQ 外部/设备快速中断请求 请求处理 IRQ 外部/设备普通中断请求 ABT 取指令或者数据过程中, MMU/MPU指示给定的地址无效 存储器保护处理 UDF 不属于ARM/Thumb/协处理器指令的指令进入流水线 软件模拟硬件协处理器 SVC SWI指令和复位(Reset) 操作系统的受保护模式 5种异常模式对应7种类型的异常事件

59 ARM9的内部寄存器 寄存器组织情况 不分组寄存器 R0-R7、R15 通用寄存器 -- 所有工作模式下,访问的都是同一物理寄存器
-- R15 是程序计数器PC 分组寄存器 R8-R14 -- R13~R14 有特殊用途 (31个) -- 存在影子寄存器,不同工作模式下,使用的是 不同的一组物理寄存器 状态寄存器 CPSR – 当前程序状态寄存器 SPSR – 异常模式下保存状态寄存器 (6个)

60 ARM9的内部寄存器 用户可见寄存器 程序状态寄存器 R13、R14、R15有特殊用法 R13 – 栈顶指针SP
CPSR 17或18个 SPSR 用户可见寄存器 程序状态寄存器 R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R13、R14、R15有特殊用法 R13 – 栈顶指针SP R14 – 链接寄存器LR,保存PC 用于子程序和异常返回 R13(SP) R14(LR) R15 – 程序计数器PC !不能做其它用途 R15(PC) 通用寄存器R0~R15

61 影子寄存器 – 不同模式下,拥有的专门的物理寄存器
APTCS ARM –Thumb Procedure Call Standard AAPCS ARM Architecture Procedure Call Standard 规定ARM编译器编译时,使用的一些在函数(ARM、Thumb、C)调用时,使用的一些规则,包括参数传递、堆栈使用、以寄存器的使用情况等。 分组寄存器书写: Rxx_工作模式 如:R14_abt USR / SYS 全部物理寄存器37个,用户可见17~18个 R0 R1 R2 R3 R4 R5 R6 R7 影子寄存器 – 不同模式下,拥有的专门的物理寄存器 通用寄存器 除影子寄存器,其余同名寄存器是同一个物理寄存器 FIQ 减少异常发生时,现场的保护和恢复,加快响应 R13_FIQ R14_FIQ R10_FIQ R11_FIQ R8_FIQ R9_FIQ R12_FIQ R8 R9 R10 R11 R12 R13 R14 R15(PC) SVC ABT UND IRQ R13_SVC R14_SVC R13_ABT R14_ABT R13_UND R14_UND R13_IRQ R14_IRQ CPSR SPSR_SVC SPSR_ABT SPSR_UND SPSR_IRQ SPSR_FIQ 状态寄存器

62 ARM9内部寄存器组织方式-说明 (2)为了加快异常发生时,现场的恢复的切换和恢复 一个用于保存当前PC的链接寄存器R14(LR)
(1)所有的运行模式使用同样的: 一个程序计数器R15(PC) 一个当前状态寄存器CPSR (2)为了加快异常发生时,现场的恢复的切换和恢复 每种异常模式都拥有物理上独立: 一个用于保存当前PC的链接寄存器R14(LR) 一个用于保存CPSR状态寄存器的SPSR 一个指向堆栈栈顶的指针R13(SP) (3)快速中断模式FIQ格外有独立的通用寄存器R8~R12 ATPCS – ARM –Thumb Procedure Call Standard

63 CPSR只能由指令影响,不能显式修改,SPSR不可访问
Thumb工作状态的寄存器组 Thumb状态下的寄存器组是ARM状态下寄存器组的子集 正常使用 寄存器 Thumb模式下的访问 R0~R7 完全访问 R8~R12 限制访问 只有MOV、ADD、CMP可以访问 R13(SP)、R14(LR) R15(PC) PC不可直接操作 R13和R14只作特殊用途 CPSR、SPSR CPSR只能由指令影响,不能显式修改,SPSR不可访问 受限访问 不能直接访问 Thumb模式下,需要修改CPSR/SPSR,只能切换到ARM模式下进行

64 Thumb工作状态的寄存器分组情况

65 ARM的状态寄存器 -- PSR ARM920T 条件标志位 ------------------- N-负标志位
Z-零标志位 --运算结果为0时,Z =1 C-进位标志位 --加法运算,C = 进位 减法运算,C = ~ 借位 移位运算, C=最后移出位 V-溢出标志位 --加/减运算,发生溢出,V=1 ARM的状态寄存器 -- PSR 32位 标志域 Flags 状态域 Status 扩展域 EXterned 控制域 Control [31 :24] [23:16] [15:8] [7:0] ARM9 标志域 Flags N Z C V 保留 31 30 29 28 [27:24] CPSR和SPSR结构相同,SPSR是进入异常模式时CPSR的备份 ARM920T ,只有标志域F和控制域C有意义,其余两个域未定义

66 ARM的状态寄存器 -- PSR PSR的控制位 ------------------- M4~M0 - 处理器模式控制位
--指示/设置处理器模式 I、F-中断禁止位 --I (IRQ),普通中断禁止位 --F(FIQ),快速中断禁止位 T-ARM/Thumb模式控制位 --指示/控制两种工作模式之间的切换 32位 标志域 Flags 状态域 Status 扩展域 EXterned 控制域 Control [31 :24] [23:16] [15:8] [7:0] 控制域Control I F T M4 M3 M2 M1 M0 [7:6] 处理器模式控制位[4:0] Thumb模式控制位 中断禁止控制位

67 PSR-条件标志域 条件标志位的作用 如何影响条件标志位 条件码 - 控制指令条件执行 加后缀“s” EX: SUB N,N,#1
SUBS N,N,#1 操作相同,但第一条不修改CPSR SUBS N, N, #1 ADDGE sum,sum,r2 条件转移指令 - 控制程序流程发生变化 again SUB N, N, #1 CMP N, #0 BLT next ADD sum,sum,r2 B again next: 比较指令 CMP、CMN、TST、 TEQ 一定修改标志位

68 PSR-控制域 运行模式 M[4]~M[0] M[4:0] 指示当前处理器的运行模式 发生异常时,自动改变 用户USR 10000
快速中断FIQ 10001 外部中断IRQ 10010 管理 SVC 10011 中止 ABT 10111 未定义 UND 11011 系统 SYS 11111 特权模式下,可直接修改M[4:0],进行模式切换 复位后,处理器处于管理模式SVC Sys32md EQU 0x1F MRS r3, cpsr BIC r3, r3, #0x1F ORR r3,r3,#Sys32md MSR cpsr_c, r3 ATPCS规定: cxfs-分别代表CPSR的四个域

69 PSR-控制域 中断禁止位I(普通中断IRQ),F(快速中断FIQ) 注意:是禁止位,对应位为1时,禁止相应中断 禁止中断(以IRQ为例)
MRS r1, cpsr ORR r1, r1, 0x80 MSR cpsr_c, r1 使能中断(以IRQ为例) MRS r1, cpsr BIC r1, r1, 0x80 MSR cpsr_c, r1 CPSR 中 I 位 置1 CPSR 中 I 位 清0

70 PSR-控制域 ARM/Thumb状态指示/设置位T T = 1 , 处理器正在处理Thumb指令 T = 0, 处理器正在处理ARM指令
CODE32 LDR r0, = tCode+1 BX r0 ….. ;Thumb代码 CODE16 tCode ARM/Thumb模式切换 BX Rm ; PC = Rm & 0xfffffffe 同时,将T =Rm[0] BLX Rm ; 保存下一条指令的地址到LR PC = Rm & 0xfffffffe ! ARM/Thumb 边界对准 要切换到Thumb ,则目的地址的最低位必须等于1

71 ARM异常处理 由内部或者外部事件引起 – 异常类型7种 EX:外部中断:IRQ、FIQ 异常处理的优先级顺序
内部原因:执行未定义指令/SWI指令、访存异常 异常处理的优先级顺序 发生异常时,处理器的响应动作(硬件) 异常处理程序的跳转依据—异常向量表 结束异常处理时,处理器的返回操作(软件)

72 Back ARM异常处理-异常类型 异常类型 发生原因 运行模式 管理模式SVC 未定义模式UND 中止模式ABT 外部中断IRQ
复位 芯片nRESET管脚,复位信号 管理模式SVC 未定义 不属于ARM/Thumb的指令进入流水执行阶段 未定义模式UND 软件中断 执行SWI指令 预取中止 取指令过程,由于地址不存在,或越限,发生存储器访问失败 中止模式ABT 数据中止 处理指令过程,访问数据,由于地址不存在,或越限,发生存储器访问失败 外部中断 外部设备中断(IRQ类型)引脚有效 外部中断IRQ 快速中断 外部设备中断(FIQ类型)引脚有效 快速中断FIQ nRESET,一个超过4个FCLK长度的低电平

73 ARM异常处理 多种异常发生时,根据优先级决定响应顺序 未定义指令和SWI中断不可能同时发生 优先级 异常类型 1(最高) 复位 2
数据中止 3 FIQ 4 IRQ 5 预取中止 6(最低) 未定义&SWI 未定义指令和SWI中断不可能同时发生

74 -----------------------
其它可能发生的异常响应处理 对于中断异常: 自动禁止中断 IRQ, CPSR的I=1; FIQ , CPSR的I=1 & F =1; Thumb切换到ARM状态: Thumb状态下发生异常,自动切换到ARM状态下,进行异常处理; ARM对异常的响应处理(硬件) 保存断点->LR 当异常发生时,无论处理器处于ARM/Thumb工作状态,都会 自动的将当前PC+固定偏移拷贝到相应异常模式的R14_<mode> 链接寄存器。 保存CPSR 当异常发生时,CPSR的值自动拷贝到相应异常模式的SPSR 中。 改变运行模式 CPSR的模式控制位M[4]~M[0]置为相应的模式状态 转去处理异常 置PC内容为相应的异常向量,从而转向异常处理

75 ARM异常处理 异常类型 向量地址 复位 0x0000 0000 未定义指令 0x0000 0004 软件中断SWI 0x0000 0008
预取中止 0x C 数据中止 0x IRQ 0x FIQ 0x C B 标号 ;分支跳转指令

76 -----------------------
ARM异常返回操作(软件) 异常处理程序结束前,需要通过编写代码,完成以下返回操作: 恢复所有需要恢复的用户寄存器 恢复CPSR 将SPSR_<mode>拷贝到CPSR 恢复PC断点至异常发生位置 LR-偏移量 后,拷贝到PC 如果需要,重新使能中断; 异常服务例程 handleIRQ: SUB r14, r14, #4 STMFD r13!, {r0-r3,r14} <中断服务代码> LDMFD r13!,{r0-r3,pc}^

77 ARM异常处理 内部指令处理引起的异常:数据中止(DABT)、指令中止(PABT)、未定义(UDF)、SWI PC PC+4 PC+8
DABT、IRQ、FIQ PC 时间(时钟周期) 指令1 T2 T3 T4 T1 指令2 指令3 T6 T5 取指 译码 执行 PC+4 取指 译码 执行 PC+8 取指 译码 执行 取指 译码 执行 这里不好理解,加个说明: 指令预取异常,在开始处理指令之后,才会响应,所以不是在取指阶段,这样对于某些情况,如分支处理,如果没有处理到这一条指令,那么异常处理也免了。 其余处理:尽管ARM9是5级流水线,但是保持与ARM7兼容,因为按照三级流水线的处理情况来进行异常响应。 返回位置: UDF、SWI返回下一条指令,所以就是PC+4,也就是R14,链接寄存器中保存的内容。 IRQ、FIQ返回下一条指令,而当前R14 = PC+8,所以需要R14-4 ->PC PABT返回这条中止指令,重新尝试处理,所以需要R14-4 ->PC DABT返回这条中止指令,重新尝试处理,所以需要R14-8 ->PC 异常响应/返回位置表

78 异常响应/返回位置表 ARM异常-地址保存和返回情况 PC + 8

79 ARM编程结构-要点回顾 ARM9-哈佛结构,独立的D-Cache和I-Cache ARM9采用5级流水线结构
ARM工作状态2种(ARM/Thumb) ARM的运行模式7种 ARM寄存器共37个,针对不同的异常模式,设有独立的R13、R14(FIQ:R8-R12)和SPSR,以加快异常响应速度 ARM异常类型7种、异常模式5种,向量方式处理异常


Download ppt "嵌入式体系结构与应用 第二章-ARM处理器."

Similar presentations


Ads by Google