RISC架构的ARM微处理器特点:
支持16位和32位双指令集。
指令执行采用3级流水线/5级流水线技术
带有指令cache和数据cache,大量使用寄存器,指令执行速度更快。指令长度固定(arm状态下32位,Thumb下是16位)
支持大端格式和小端格式的存储模式
支持 字节 半字 字 三种数据类型
支持用户,快中断,中断,管理,终止,系统和未定义七种处理器模式。
具有片上总线 AMBA(三组总线 AHB ASB APB)
采用存储器映像I/O的方式,即把 I/O端口地址作为特殊的存储器地址
具有协处理器接口,arm允许接16个协处理器
体积下,成本低,高性能
arm9微处理器:
arm9系列微处理器包含ARM920T,ARM922T和ARM940T几种类型。可以在高性能和低功耗方面提供最佳的性能。
采用5级整数流水线,指令执行效率更高。采用哈佛结构。支持数据和指令Cache,具有高效的的指令和数据处理能力。
支持32位的告诉AMBA总线接口。全性能的MMU支持支持linux,wince等多种主流嵌入式操作系统。
ARM920T处理器核增加了分离式的指令和数据Cache,并带有相应的存储管理单元I-MMU 和 D-MMU,写缓冲器以及AMBA接口等
ARM940T是ARM920T处理器核的简化版本,没有存储管理单元MMU,不支持虚拟存储器寻址,而是用存储保护单元来提供存储保护和Cache控制。
ARM9系列微处理主要应用于无线通信设备,仪器仪表,安全系统,机顶盒,高端打印机,数字照相机等。
ARM9E 支持DSP指令集。适用于高速数字信号处理的场合。
ARM微处理器的寄存器结构:
共有37个寄存器,分为31个通用寄存器和6个状态寄存器,均为32位。
处理器运行模式:
用户模式:正常执行模式。
快中断模式:用于高速数据传输或通道处理。
外部中断模式:用于通用的中断处理
管理模式: 操作系统使用的保护模式。
数据访问终止模式:当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。
系统模式:运行具有特权的操作系统任务。
未定义指令终止模式:当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。
ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理来改变。
大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。
除用户模式外,其余的6中模式称为非用户模式,或特权模式。除去用户模式和系统模式以外的5中模式又叫异常模式
每种模式下均有一组寄存器与之对应。任意模式下可访问r0-r14通用寄存器,程序计数器和一至两个状态寄存器。有些寄存器是在7种模式下公用的,有些则不同的模式下使用的寄存器是不同的。
处理器工作状态:
ARM处理器有32位ARM和16位Thumb两种工作状态,ARM处理器可在两种工作状态之间切换,切换不影响处理器的模式或寄存器的内容。
通用寄存器(r0-r15):
不分组寄存器r0-r7:
可以工作在所有的处理模式下,没有隐含的特殊用途
分组寄存器r8-r14:
分组寄存器的使用取决于当前的处理器模式,每种模式有专用的分组寄存器用于快速异常处理。
寄存器R13通常用作堆栈指针,称作sp。每种异常模式都有自己的R13。通常R13被初始化为指向异常模式分配的堆栈。在入口处,异常处理程序将用到的其他寄存器的值保存到堆栈中,返回时,重新将这些值加载到寄存器中。
寄存器R14用作子程序链接寄存器lr。当指令BL指令时,得到R15(PC)寄存器的备份。
程序寄存器R15:
ARM状态下,PC位[1:0]为0(字对齐)。
Thumb状态下,位[0]为0(半字对齐)。
由于流水线特性,PC总是指向当前执行指令的下两条指令地址。
程序状态寄存器:
所有处理器模式下都访问相同的CPSR,CPSR包含条件码标志。中断禁止位,当前处理器模式以及其他状态和控制信息。
每种异常模式下都有一个程序状态保存寄存器,发生异常时,SPSR用来保存CPSR的状态。
ARM微处理器的异常处理:
ARM体系结构支持7种类型的异常。异常出现后强制从异常类型对应的固定存储地址开始执行程序
复位异常:
当处理器的复位电平有效时,长生复位异常,ARM处理器立刻停止执行当前指令,复位后,ARM处理器在禁止中断的管理模式下,程序跳转到复位异常处理程序处执行。
未定义指令异常:
当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。未定义指令异常可用于
在没有物理协处理器的系统上,对协处理器进行软件仿真。(使用未定义指令异常服务子程序)
软件中断异常:
软件中断异常由执行SWI指令产生,可使用该异常机制实现系统功能调用。用于用户模式下的程序调用特权操作指令,以
请求特定的管理函数(系统函数)。
指令预取终止:
若处理器预取指令的地址不存在,或改地址不允许当前指令访问,存储器会向处理器发出存储器终止信号,但在预取的指令被执行时,
才会长生指令预取终止异常。
数据访问 终止:
若处理器数据访问指令的目标地址不存在,或该地址不允许当前指令访问时,产生数据终止异常。
外部中断请求异常:
当处理器的外部中断请求引脚有效且CPSR中的I位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务,IRQ异常的优先级比FIQ异常的低。当进入FIQ处理时,会屏蔽掉IRQ异常。
快速中断请求异常:
当处理器的快速中断请求引脚有效,且CPSR中的F位为0是产生FIQ异常。
异常响应过程:
异常出现后。ARM微处理器会执行以下几个操作:
1:将下一条指令的地址存入相应的连接寄存器LR.
2: 将CPSR状态传送到相应的SPSR中。
3:根据异常类型,强制设置CPSR的运行模式位。
4:强制PC从相关的异常向量地址取下一条指令执行,跳转到相应的异常处理程序。还可以设置中断禁止位。
异常处理后,ARM处理器会执行以下几步操作从异常返回:
1:将LR中的值减去相应的偏移后送到PC中。
2:将SPSR内容送回到CPSR中。
3:若在进入异常处理时设置了中断禁止位,要在此清除。
ARM的存储器结构:
arm系统使用存储映射i/o,i/o口使用特定的存储地址,当从这些地址加载或向这些地址存储时,完成i/o功能。
支持大端小端存储模式
有的arm带有数据cache和指令cache
ARM处理器指令系统:
寄存器寻址 :操作数的值在寄存器中。 mov r1,r2 ;r1
立即寻址:数据直接包含在指令中。 mov r0,#0xff
寄存器移位寻址:第二个寄存器操作数在与第一个操作数结合之前,先进行以为操作 mov r0,r2,LSL #3
寄存器间接寻址:寄存器为操作数的地址指针。 LDR r0,[r1]
变址寻址:将基址寄存器的内容偏移量相加,行程操作数的有效地址。变址寻址用于访问基址附近单元。常用于查表LDR r2,[r3,#4] ;r2
多寄存器寻址:一条指令可以完成多个寄存器值的传送。
LDMIA r0,{r1,r2,r3} ;r1
;r2
;r3
堆栈寻址
块复制寻址: STMIA r0!,{r1-r7}
相对寻址:由PC提供基址,指令中的地址码做为偏移量 BL ROUTE1
ARM指令:
基本格式 {}{S} , {,}
<>内的项是必须的,{}内的项是可选的。
opcode 指令助记符 如LDR,STR
cond 执行条件
S 是否影响CPSR寄存器的值,书写是影响,否则不影响
Rd目标寄存器
Rn第一个操作数的寄存器
opcode2 第二个操作数。
程序状态寄存器访问指令:
MRS{条件} 通用寄存器,程序状态寄存器(cpsr或spsr)
MSR{条件} 程序状态寄存器_,操作数
操作数可以为通用寄存器或立即数。用于设置程序状态寄存器中需要操作的位
位[31:24]为条件标志位域,用f表示
位[23:16]为状态域,用s表示
位[15:8]为扩展域,用x表示
位[7:0]为控制位,用c表示
ARM伪指令:
ADR,ADRL指令将基于PC相对偏移的地址值加载到寄存器中。用于位置无关代码中获取地址。
LDR用于加载32位的立即数或一个地址值到指定寄存器。
NOP空操作伪指令
ARM协处理器器接口:
逻辑上ARM可以扩展16个(cp0-cp15)协处理器。cp15作为系统控制,CP14作为调试控制器,CP7-4作为用户控制器
cp13-8和cp3-0保留。每个协处理器有16个寄存器。
例如MMU和保护单元的系统控制都采用cp15协处理器,JTAG调试中的协处理器为cp14
ARM AMBA接口:
ARM处理器内核可以通过先进的微控制器总线架构AMBA来扩展不同体系架构的宏单元及I/O部件。
AMBA有先进高性能总线AHB,先进系统总线ASB和先进外围总线APB三类总线
ASB是常用的系统总线,用来连接高性能系统模块,支持突发方式数据传输。
AHB不但支持突发数据传输,还支持分离式总线事物处理,进一步提高总线的利用效率。
APB为外围宏单元提供了简单的接口。