一、ARM简介
ARM是全球领先的半导体知识产权 (IP) 提供商Advanced RISC Machine,是专门从事基于RISC 技术芯片设计开发的公司,ARM 的商业模式主要涉及 IP 的设计和许可,而非生产和销售实际的半导体芯片。作为知识产权供应商,本身不直接从事芯片生产,靠转让设计许可由合作公司生产各具特色的芯片,世界各大半导体生产商从ARM公司购买其设计的ARM 微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM 微处理器芯片进入市场。在全世界有几十家大的半导体公司都使用ARM 公司的授权,因此既使得ARM 技术获得更多的第三方工具、制造、软件的支持,又使整个系统成本降低,使产品更容易进入市场被消费者所接受,更具有竞争力。
ARM设计了大量高性价比、耗能低的RISC处理器、相关技术及软件,技术具有性能高、成本低和能耗省的特点,智能机、平板电脑、嵌入控制、多媒体数字等处理器领域拥有主导地位。全世界超过95%的智能手机和平板电脑都采用ARM架构 。2014年基于ARM技术的全年全球出货量是120亿颗,从诞生到现在为止基于ARM技术的芯片有600亿颗。
ARM体系结构的基本版本:
版本 |
版本变种 |
系列号 |
处理器核 |
V1 |
V1 |
ARM1 |
ARM1 |
V2 |
V2 |
ARM2 |
ARM2 |
V2a |
ARM2aS |
||
ARM3 |
ARM3 |
||
V3 |
V3 |
ARM6 |
ARM6、ARM600、ARM610 |
ARM7 |
ARM7、ARM700、ARM710 |
||
V4 |
V4T |
ARM7TDMI、ARM710T、ARM720T、ARM740T |
|
V4T |
ARM9 |
ARM9TDMI、ARM920T、ARM940T |
|
V5 |
V5TE |
ARM9E-S |
|
V6 |
V6 |
ARM11 |
ARM11、ARM11562-S、ARM1156T2F-S、ARM11JZF-S |
V7 |
V7 |
ARM Cotex |
ARM Cotex-A8、ARM Cotex-R4、ARM Cotex-M3 |
二、计算机体系结构
1、 冯.诺依曼体系结构
冯.诺依曼体系结构的特点:
A、处理器使用同一个存储器,经由同一个总线传输
B、完成一条指令需要3个步骤:即取指令->指令译码->执行指令
C、指令和数据共享同一总线的结构
2、哈佛体系结构
哈佛体系结构的特点:
A、将程序指令存储和数据存储分开
B、*处理器首先到程序指令存储器中读取程序指令。解码后到数据地址,再到相应的数据存储器读取数据,然后执行指令
C、程序指令存储与数据存储分开,可以使指令和数据有不同的数据宽度。
ARM7采用冯.诺依曼体系结构,ARM9采用哈佛体系结构
三、复杂指令集与精简指令集
1、 CISC 复杂指令集
CISC 复杂指令集:采用冯.诺依曼体系结构,数据线和指令线分时复用。存储器操作指令多,汇编程序相对简单,指令结束后响应中断 ,CPU电路设计复杂,面积大,功耗大。
2、RISC 精简指令集
RISC 精简指令集:采用哈佛体系结构。数据线和指令线分离。对存储器操作有限,汇编程序占空间大,在适当地方响应中断, CPU电路较少,体积小功耗低。ARM采用RISC精简指令集 。
四、ARM处理器模式
为了和操作系统更好地适配,ARM Cortex A-8处理器有九种工作模式。
ARMV7体系结构支持的9种处理器模式分别为:用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式,监视模式,软中断模式。
1、ARM的指令集
ARM有三种指令集:ARM、Thumb、Thumb32。Thumb是ARM体系结构中一种16位的指令集。从ARMv4T之后的ARM处理器有一种16-bit指令模式,叫做Thumb,较短的指令码提供整体更佳的编码密度,更有效地使用有限的内存带宽。所有 ARM9 和后来的家族,包括 XScale 都纳入了 Thumb 技术。Thumb32兼容16位和32位指令。ARM为32位指令。
在不牺牲性能的同时,尽量简化处理器。同时从体系结构上灵活支持处理器扩展。采用RISC结构。RISC处理器简化了处理器结构,减少复杂功能指令的同时,提高了处理器速度。
2、ARM的流水线结构
ARM处理器使用流水线来增加处理器指令流的速度,这样可以使几个操作同时进行。并使处理和存储器系统连续操作。
arm处理器分为三级:取指->译码->执行
取指:指令从存储器中取出
译码:对指令使用的寄存器进行译码
执行:从寄存器组中读取寄存器,执行移位和ALU操作,寄存器被写回到寄存器组中
3、ARM处理器支持的类型
字节 8位
半字 16位
字 32位
ARM处理器的所有数据操作都以字为单位,ARM指令的长度刚好是一个字,Thumb指令长度刚好是半个字。
4、ARM处理器状态
ARM处理器内核使用ARM结构,该结构包含32位的ARM指令集和16位Thumb指令集,因此ARM有两种操作状态
ARM状态:32位
Thumb状态:16位
5、ARM处理器的寄存器
寄存器是*处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,用来暂存指令、数据和位址。在*处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC),在*处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。
IR 用于存储指令
PC 用于存储程序运行的地址(即当前指令在内存中的位置)
寄存器是由一个指令的输出或输入可以直接索引到的暂存器群组。所有的计算机指令都是进入寄存器后被直接读取。
ARM的汇编编程,本质上就是针对CPU寄存器的编程。
ARM寄存器分为2类:普通寄存器和状态寄存器
ARM A-8处理器各工作模式下的寄存器:
ARM A-8处理器共有43个寄存器。普通寄存器34个,状态寄存器9个。USR/SYS共用一组寄存器。
R13(SP) 栈指针寄存器用于存放堆栈的栈顶地址。
SP相当于指针变量,保存的是栈顶的地址,出栈时,从SP指向的内存中取出数据,入栈时将新的内存地址压入栈顶,而SP相当于链表的头指针(head)。
R14(LR) 链接寄存器存放子程序的返回地址。
例如:在主函数内,如果调用子函数,程序会进入到子函数内执行。当子函数执行完毕后,需要回到主函数内,所以在子函数调用前需要将这个地址先保存起来,否则无法找到这个地址。LR用于保存这个地址,这个地址也称为子程序返回地址。当子函数结束后,再将LR内的地址赋给PC即可。
R15(PC) 程序计数器 它的值是当前正在执行的指令在内存中的位置。
当指令执行结束后,CPU会自动将PC值加上一个单位,PC值指向下一条即将执行的指令的地址。如果通过汇编指令对PC寄存器赋值,就会完成一次程序的跳转(如从子函数跳转回主函数内)。
寄存器R16用作CPSR(当前程序状态寄存器),CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。每一种运行模式下又都有一个专用的物理状态寄存器,称为SPSR(备份的程序状态寄存器),异常发生时,SPSR用于保存CPSR的值,从异常退出时则可由SPSR来恢复CPSR。由于用户模式和系统模式不属于异常模式,他们没有SPSR,当在这两种模式下访问SPSR,结果是未知的。
程序状态寄存器CPSR:
各bit代表的意义如下:
M[4:0]:处理器模式
T bit:是否支持Thumb指令
F bit:是否禁止FIQ
I bit:是否禁止IRQ
A bit:是否禁止异步中止
E bit:存储顺序
IT bit:是否在支持Thumb-2指令集中的if...then条件执行
GE bit:用于某些SIMD指令
J bit:是否支持Jazelle
Q bit:是否运算溢出
V bit:ALU是否溢出
C bit:ALU是否进位
Z bit:ALU结果是否为0
N bit:ALU结果是否为负
M0至M4表示处理器工作模式(控制位内的模式位)
0b10000 User 用户模式
0b10001 FIQ 快速中断模式
0b10010 IRQ 外部设备产生的中断模式
0b10011 Supervisor 管理模式
0b10111 Abort 异常模式
0b11011 Undefined 未定义模式
0b11111 System 系统模式
6、SoC的特殊功能寄存器
SoC中的寄存器包括ARM CPU处理器内的寄存器和特殊功能寄存器,特殊功能寄存器不在CPU中,而是存在于CPU的外设中,通过访问外设的SFR来编程控制外设是硬件编程控制的方法。
7、S5PV210的内存映射
以下三张图为S5PV210的内存映射图
IRAM和IROM: