2.1ARM体系结构概述

2.1.1 ARM简介

ARM公司是一家知识产权(IP)供应商,它不制造芯片且不向终端用户出售芯片,而是向合作伙伴提供设计方案,再由合作伙伴生产各种各样的芯片。ARM公司通过这种双赢的方式迅速成为了全球性RISC(Reduced Instruction Set Computer)微处理器标准的缔造者。

ARM架构是ARM公司面向市场设计的第一款低成本RISC微处理器,具有耗电少功能强、16位/32位双指令集和合作伙伴众多等众多特点。并在现实中应用广泛,比如手机、PDA、MP3/MP4等便携式消费产品中。

2.1.2 RISC结构特性

RISC(Reduced Instruction Set Computer)中文是精简指令集计算机,是在CISC(复杂指令计算机)的基础上优先选取使用频率最高的简单指令,避免复杂指令;并将指令长度固定,减少指令格式和寻址方式;不用或少用微码控制已达到精简计算机结构,提高运算速度的目的。

ARM内核采用精简指令集计算机(RISC)体系结构,因此ARM具备了非常典型的RISC结构特性:

(1)具有大量的通用寄存器;

(2)通过装载/保存(load-store)结构使用独立的load和store指令完成数据在寄存器和外部存储器之间的传送,处理器只处理寄存器中的数据,从而可以避免多次访问存储器;

(3)寻址方式非常简单,所有装载/保存的地址都只由寄存器内容和指令域决定;

(4)使用统一和固定长度的指令格式。

ARM体系结构不仅仅具备RISC结构特性,还提供:

(1)每一条数据处理指令都可以同时包含算术逻辑单元(ALU)的运算和移位处理,以实现对ALU和移位器的最大利用;

(2)使用地址自动增加和自动减少的寻址方式优化程序中的循环处理;

(3)load/store指令可以批量传输数据,从而实现了最大数据吞吐量;

(4)大多数ARM指令是可“条件执行”的,也就是说只有当某个特定条件满足时指令才会被执行。通过使用条件执行,可以减少指令的数目,从而改善程序的执行效率和提高代码密度。

这些在基本RISC结构上增强的特性使ARM处理器在高性能、低代码规模、低功耗和小的硅片尺寸方面取得良好的平衡。

2.1.3 ARM处理器常用系列

ARM体系结构从最初开发到现在有了很大的改进,并仍在完善和发展。ARM 微处理器目前包括下面几个系列:

ARM7系列 ARM9系列 ARM9E系列 ARM10E系列
SecurCore系列 Intel的StrongARM ARM11系列 Intel的Xscale

其中,ARM7、ARM9、ARM9E和ARM10为4个通用处理器系列,每一个系列提供一套相对独特的性能来满足不同应用领域的需求。SecurCore系列专门为安全要求较高的应用而设计。

Axxia 4500通信处理器基于采用28纳米工艺的ARM 4核Cortex-A15处理器,并搭载ARM全新CoreLink CCN-504高速缓存一致性互连技术,实现安全低功耗和最佳性能。

ARM公司在经典处理器ARM11以后的产品改用Cortex命名,并分成A、R和M三类,旨在为各种不同的市场提供服务。

2.2基本编程模型

2.2.1 ARM处理器工作模式

ARM微处理器支持7种工作模式:用户模式、系统模式、快中断模式(Fast Interrupt Request)、一般中断模式(IRQ)、管理模式(Supervisor,SVC)、中止(abort)、中止(abort)。其中,除用户模式之外的其余6种称为特权模式(Privileged Modes);即具有如下权利:

1.MRS(把状态寄存器的内容放到通用寄存器中);

2.MSR(把通用寄存器的内容放到状态寄存器中)。

而在特权模式中,除系统模式之外的其余5种又称为异常模式(Exception Modes)。

2.2.2 ARM处理器工作状态

ARM微处理器的工作状态一般有两种,并可在两种状态之间切换:

ARM状态:此时处理器执行32位的字对齐的ARM指令;

Thumb状态:此时处理器执行16位的、半字对齐的Thumb指令。

2.2.3 ARM处理器寄存器组织

ARM指令中有37个物理寄存器,有31个通用寄存器和6个状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可编程访问的,取决微处理器的工作状态及具体的运行模式。其中通用寄存器R14~R0、程序计数器PC、一个或两个状态寄存器都是可访问的。

1、arm状态下寄存器。

通用寄存器包括R0~R15,可以分为三类:

(1)未分组寄存器R0~R7:在所有的运行模式下,未分组寄存器都指向同一个物理>寄存器,他们未被系统用作特殊的用途

(2)分组寄存器R8~R14:对于分组寄存器,他们每一次所访问的物理寄存器与处理器当前的运行模式有关。

(3)程序计数器PC(R15):寄存器R15用作程序计数器(PC)

2、Thumb状态下的寄存器。

Thumb状态下的寄存器集是ARM状态下寄存器集的一个子集,程序可以直接访问8个通用寄存器(R7~R0)、程序计数器(PC)、堆栈指针(SP)、链接寄存器(LR)和CPSR。同时,在每一种特权模式下都有一组SP、LR和SPSR。

在Thumb状态下,高位寄存器R8~R15并不是标准寄存器集的一部分,但可使用汇编语言程序受限制地访问这些寄存器,将其用作快速的暂存器。使用带特殊变量的MOV指令,数据可以在低位寄存器和高位寄存器之间进行传送;高位寄存器的值可以使用CMP和ADD指令进行比较或加上低位寄存器中的值。

3、ARM状态和Thumb状态之间寄存器的关系。

(1)Thumb状态R0~R7与ARM状态R0~R7相同;

(2)Thumb状态CPSR和SPSR与ARM状态CPSR和SPSR相同;

(3)Thumb状态SP映射到ARM状态R13;

(4)Thumb状态LR映射到ARM状态R14;

(5)Thumb状态PC映射到ARM状态PC(R15)。

各种处理器模式下的寄存器

用户模式 系统模式 特权模式 中止模式 未定义指令模式 外部中断模式 快速中断模式
R0 R0 R0 R0 R0 R0 R0
R1 R1 R1 R1 R1 R1 R1
R2 R2 R2 R2 R2 R2 R2
R3 R3 R3 R3 R3 R3 R3
R4 R4 R4 R4 R4 R4 R4
R5 R5 R5 R5 R5 R5 R5
R6 R6 R6 R6 R6 R6 R6
R7 R7 R7 R7 R7 R7 R7
R8 R8 R8 R8 R8 R8 R8_fiq
R9 R9 R9 R9 R9 R9 R9_fiq
R10 R10 R10 R10 R10 R10 R10_fiq
R11 R11 R11 R11 R11 R11 R11_fiq
R12 R12 R12 R12 R12 R12 R12_fiq
R13 R13 R13_svc R13_abt R13_und R13_inq R13_fiq
R14 R14 R14_svc R14_abt R14_und R14_inq R14_fiq
PC PC PC PC PC PC PC
CPSR CPSR CPSR SPSR_svc CPSR SPSR_abt CPSR SPSR_und CPSR SPSR_inq CPSR SPSR_fiq

2.2.4 ARM异常处理

当系统运行时,异常可能会随时发生,为保证在ARM处理器发生异常时不至于处于未知状态,在应用程序的设计中,首先要进行异常处理,采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序,当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到异常处理程序,当异常处理完成以后,返回到主程序继续执行。