ARM应用笔记.docx

上传人:b****2 文档编号:2879448 上传时间:2023-05-04 格式:DOCX 页数:13 大小:43.01KB
下载 相关 举报
ARM应用笔记.docx_第1页
第1页 / 共13页
ARM应用笔记.docx_第2页
第2页 / 共13页
ARM应用笔记.docx_第3页
第3页 / 共13页
ARM应用笔记.docx_第4页
第4页 / 共13页
ARM应用笔记.docx_第5页
第5页 / 共13页
ARM应用笔记.docx_第6页
第6页 / 共13页
ARM应用笔记.docx_第7页
第7页 / 共13页
ARM应用笔记.docx_第8页
第8页 / 共13页
ARM应用笔记.docx_第9页
第9页 / 共13页
ARM应用笔记.docx_第10页
第10页 / 共13页
ARM应用笔记.docx_第11页
第11页 / 共13页
ARM应用笔记.docx_第12页
第12页 / 共13页
ARM应用笔记.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

ARM应用笔记.docx

《ARM应用笔记.docx》由会员分享,可在线阅读,更多相关《ARM应用笔记.docx(13页珍藏版)》请在冰点文库上搜索。

ARM应用笔记.docx

ARM应用笔记

ARM应用笔记

一、ARM体系结构

ARM是AdvancedRISCMachines的缩写,是一家微处理器行业的知名企业,设计了大量高性能、廉价、耗能低的RISC(精简指令集)处理器。

ARM公司只设计芯片,而不生产。

它技术授权给半导体、软件和OEM厂商,并提供服务。

ARM体系结构的目前7个版本:

ARMV1版架构:

只在原型机ARM1出现过,只有26位的寻址空间,没有用于商业产品。

ARMV2版架构:

对V1版进行了扩展,例如ARM2和ARM3(V2a)架构。

包含了对32位乘法指令和协处理器指令的支持。

同样为26位寻址空间,现在已经废弃不再使用。

ARMV3版架构:

1990年设计的第一个微处理器采用的是版本3的ARM6,作为IP核、独立的处理器、具有片上高速缓存、MMU和写缓冲的集成CPU,V3版架构(目前已废弃)对ARM体系结构作了较大的改动。

ARMV4版架构:

V4版架构在V3版上作了进一步扩充,V4版架构是目前应用最广的ARM体系结构,ARM7、ARM8、ARM9和StrongARM都采用该架构。

V4不再强制要求与26位地址空间兼容。

ARMV5版架构:

V5版架构是在V4版基础上增加了一些新的指令,ARM10和Xscale都采用该版架构。

ARMV6版架构:

V6版架构是2001年发布的,首先在2002年春季发布的ARM11处理器中使用。

在降低耗电量地同时,强化了图形处理性能。

ARMV7版架构:

ARMv7架构是在ARMv6架构的基础上诞生的。

该架构采用了Thumb-2技术,是在ARM的Thumb代码压缩技术的基础上发展起来的,并且保持了对现存ARM解决方案的完整的代码兼容性。

Thumb-2技术比纯32位代码少使用31%的内存,减小了系统开销,同时能够提供比已有的基于Thumb技术的解决方案高出38%的性能。

命名方式上,基于ARMv7架构的ARM处理器已经不再延用过去的数字命名方式,而是冠以Cortex的代呼。

基于v7A的称为“Cortex-A”,基于v7R的称为“Cortex-R”,基于v7M的称为“Cortex-M”。

体系结构

ARM核心

V1

ARM1

V2

ARM2

V2a

ARM2As,ARM3

V3

ARM6,ARM600,ARM610,ARM7,ARM700,ARM710

V4

StrongARM,ARM8,ARM810

V4T

ARM7TDMI,ARM710T,ARM720T,ARM740T

ARM9TDMI,ARM920T,ARM940T

V5TE

ARM9E-S,ARM10TDMI,ARM1020E

V6

ARM1136J(F)-S,ARM1176JZ(F)-S,ARM11MPCORE

V6T2

ARM1156T2(F)-S

V7

ARMCortex-M,ARMCortex-R,ARMCortex-A

二、ARM处理器

1、ARM7微处理器系列

低功耗的32位RISC处理器,冯·诺依曼结构。

极低的功耗,适合便携式产品。

能够提供0.9MIPS的三级流水线结构代码密度高,兼容16位的Thumb指令集。

主频最高可达130MIPS。

对操作系统的支持广泛,包括WindowsCE、Linux、PalmOS等。

指令系统与ARM9系列、ARM9E系列和ARM10E系列兼容,便于用户的产品升级换代。

主要应用领域:

工业控制、Internet设备、网络和调制解调器设备、移动电话等多种多媒体和嵌入式应用

2、ARM7TDMI微处理器

ARM7TMDI是使用广泛的32位嵌入式RISC处理器,属低端ARM处理器核。

注:

“ARM核”并不是芯片,ARM核与其它部件如RAM、ROM、片内外设组合在一起才能构成现实的芯片。

4种类型:

ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ。

3、ARM9微处理器系列

ARM9系列微处理器在高性能和低功耗特性方面提供最佳的性能。

5级整数流水线,哈佛体系结构。

支持32位ARM指令集和16位Thumb指令集。

全性能的MMU,支持WindowsCE、Linux、PalmOS等多种主流嵌入式操作系统。

主要应用:

无线设备、仪器仪表、安全系统、机顶盒、高端打印机、数码照相机和数码摄像机。

3种类型:

ARM920T、ARM922T和ARM940T。

4、ARM9E微处理器系列

单一处理器内核提供微控制器、DSP、Java应用系统的解决方案,支持DSP指令集。

5级整数流水线,指令执行效率更高。

支持32位ARM指令集和16位Thumb指令集。

支持VFP9浮点处理协处理器。

全性能的MMU,支持WindowsCE、Linux、PalmOS等多种主流嵌入式操作系统。

MPU支持实时操作系统。

支持数据Cache和指令Cache,主频最高可达300MIPS。

主要应用:

下一代无线设备、数字消费品、成像设备、工业控制、存储设备和网络设备等领域。

3种类型:

ARM926EJ-S、ARM946E-S和ARM966E-S。

5、ARM10E微处理器系列

与同等的ARM9比较,在同样的时钟频率下,性能提高了近50%,功耗极低。

支持DSP指令集。

6级整数流水线,指令执行效率更高。

支持32位ARM指令集和16位Thumb指令集。

支持VFP10浮点处理协处理器。

全性能的MMU,支持WindowsCE、Linux、PalmOS等多种主流嵌入式操作系统。

支持数据Cache和指令Cache。

主频最高可达400MIPS。

内嵌并行读/写操作部件。

主要应用:

下一代无线设备、数字消费品、成像设备、工业控制、通信和信息系统等领域。

3种类型:

ARM1020E、ARM1022E和ARM1026EJ-S。

6、ARM11微处理器系列

ARM1136J-S发布于2003年,针对高性能和高能效的应用而设计。

集成具有独立load-store和算术流水线的8级流水线。

可进行快速浮点运算,增加了向量浮点单元。

 

7、ARMCortex微处理器系列

(1)ARMCortex-M

ARMCortex-M3处理器是面向低成本,小管脚数目以及低功耗应用,且具有高运算能力和中断响应能力的处理器32位内核。

Cortex-m3处理器采用了纯Thumb-2指令。

中断延迟最大需12个周期(ARM7为24~42个)。

带睡眠模式,8段MPU(存储器保护单元)。

处理速度1.25MIPS/MHz(ARM7为0.9MIPS/MHz)。

功耗为0.19Mw/MHz(ARM7为0.28mW/MHz)。

目前最便宜的Cortex-M3内核的ARM单片机售价1美元。

(2)ARMCortex-R

ARMCortex-R系列处理器目前包括ARMCortexR4和ARMCortex-R4F两个型号,主要适用于实时系统的嵌入式处理器,如硬盘、打印机、汽车安全系统。

ARMCortexR4采用了90纳米生产工艺,最高运行频率可达400MHz。

基于低耗费的超量8段流水线,带有高级分支预测功能,运算速度超过1.6MPIS/MHz。

ARMCortex-R4F拥有针对汽车市场而开发的各项先进功能,包括自动除错功能、可相互连结的错误侦测机制,以及可选择优化的浮点运算单元(FPU,Floating-PointUnit)。

(3)ARMCortex-A

ARMv7-A系列支持大型嵌入式操作系统(Symbian、Linux、WinCE、WM等)。

典型应用:

高端手机、手持仪器。

ARMCortex-A8处理器是基于ARMv7架构的首款应用级处理器。

运算能力:

600MHz~1GHz。

具有13级整数运算流水线,10级NEON媒体运算流水线。

功耗最优的同时,实现2.0MIPS/MHz的性能。

三、Cortex-M3

8、特点

采用哈佛结构,有独立的指令总线I-Code和数据总线D-Code,具有带分支预测功能的3级流水线。

32位单周期乘法,支持硬件除法。

内核水平上支持低功耗模式,功耗低于0.19mW/MHz;

处理器直接支持8位字节、16位半字或者32位的数据类型。

3级流水线:

取指、译码、执行。

无论处理器处于何种状态,程序计数器R15(PC)总是指向“正在取指”的指令。

PC值=当前程序执行位置+4

9、寄存器

Cortex-M3处理器拥有22个用户可以访问的32位寄存器,包括R0~R15寄存器组合5个特殊功能寄存器。

其中R13作为堆栈指针SP,有两个寄存器。

通用寄存器R0~R12:

用于数据操作。

大部分16位Thumb指令只能访问R0~R7,32位的Thumb指令可访问所有寄存器。

堆栈指针R13(SP):

有两个堆栈指针,主堆栈指针(MSP,复位后默认的堆栈指针)和进程堆栈指针(PSP)。

连接寄存器R14(LR):

子程序的返回地址自动存入R14。

程序计数器R15(PC):

读PC时返回的地址时当前指令的地址+4

程序状态寄存器组(PSRs):

应用状态寄存器(APSR)、中断状态寄存器(IPSR)和执行状态寄存器(EPSR)。

中断屏蔽寄存器组:

中断屏蔽寄存器PRIMASK、FAULTMASK、优先级屏蔽寄存器BASEPRI,用于控制异常的使能和除能。

控制寄存器CONTROL:

定义特权级别或者选择当前的堆栈指针。

10、操作模式和特权级别

处理模式(Handlermode)和线程模式(Threadmode),用于区别普通应用程序和异常服务程序。

复位时处理器进入线程模式,异常返回后也进入该模式。

特权级和用户级的代码均可在线程模式下运行。

处理模式只能在出现异常时进入,且所有代码都特特权访问。

复位后,处理器进入线程模式和特权级访问。

特权级下,程序可以访问所有的存储器(如果有MPU,MPU规定的除外),并且可执行所有指令。

11、体系的异常、中断及向量表

嵌套向量中断控制器(NVIC,NestedVectoredInterruptControl)支持11中系统异常、240个外部中断输入和fault管理机制。

异常:

所有打断正常执行流的事件。

与“中断”经常混合使用。

“异常”一般是由Cortex-M3内核的活动(执行指令或访问存储器)产生的。

“中断”对于内核来说是“意外的突发事件”,请求信号一般来自内核的外部(片上外设或外扩的设备)。

系统异常是Cortex-M3内核支持的基本异常,与具体的芯片无关。

外部中断是与芯片相关的,芯片厂商根据需要和用途设计中断源数目(1~240)和优先级的位数。

异常发生且得到处理器响应,Cortex-M3硬件自动完成以下操作:

(1)入栈:

将8个寄存器的值压入堆栈

(2)取向量:

从向量表中取出对应异常服务程序的入口地址

(3)更新寄存器:

选择堆栈指针MSP/PSP,更新SP、LR、PC。

12、存储系统

Cortex-M3支持4GB的地址空间,程序可以在代码区、内部SRAM和外部RAM中运行。

(1)存储器格式

位于地址A的字包含的字节地址位于地址A、A+1、A+2和A+3

位于地址A的半字包含的字节位于地址A和A+1

位于地址A+2的半字包含的字节地址位于地址A+2、A+3

位于地址A的字包含的半字位于地址A和A+2

小端(Little-endian)存储器系统:

一个字当中最低地址的字节被看作是最低字节,最高地址的字节被看作是最高位字节。

Bit31-24

Bit23-16

Bit15-8

Bit7-0

字节格式

D[7:

0]

D[7:

0]

D[7:

0]

D[7:

0]

半字格式

D[15:

8]

D[7:

0]

D[15:

8]

D[7:

0]

字格式

D[31:

24]

D[23:

16]

D[15:

8]

D[7:

0]

大端(Big-endian)存储器系统:

处理器将最高位字节保存在最低地址,最低位字节保存在最高地址。

Bit31-24

Bit23-16

Bit15-8

Bit7-0

字节格式

D[7:

0]

D[7:

0]

D[7:

0]

D[7:

0]

半字格式

D[7:

0]

D[15:

8]

D[7:

0]

D[15:

8]

字格式

D[7:

0]

D[15:

8]

D[23:

16]

D[31:

24]

(2)位操作

位操作区:

支持位操作的地址区,包括两个地址范围:

0x20000000~0x200FFFFF(SRAM区最低1MB地址);0x40000000~0x400FFFFF(片上外设区最低1MB地址);

位别名区:

对应于位操作区映射的32MB地址区域,包括两个对应的地址范围:

0x22000000~0x23FFFFFC;0x42000000~0x43FFFFFC

位别名:

对位别名地址的访问最终会被变换成对应位操作区的位访问。

AliasAddr=BitAlias_BaseAddr+(BitAddr-BitOp_BaseAddr)*32+BitNumber*4

AliasAddr:

位别名区中的地址

BitAlias_BaseAddr:

位别名区的基地址,0x22000000或0x42000000

BitOp_BaseAddr:

位操作区的基地址,0x20000000或0x40000000

BitAddr:

位操作区中的字地址,将要操作的位在该字中

BitNumber:

要操作的位是第几位

(3)非对齐的存储器访问

对于字来说:

任何不能被4整除的地址都是非对齐的。

对于半字:

任何不能被2整除的地址都是非对齐的。

Cortex-M3支持在单一的访问中使用非对齐的传送。

处理器内部会对非对齐的访问转换成若干个对齐的访问,但是会浪费很多总线周期,影响程序执行效率。

因此建议C语言编程中定义的多字节变量或结构体都是对齐存放。

四、Cortex-M3指令系统

13、寻址方式

寄存器寻址

MOVR1,R2

SUBR0,R1,R2

立即寻址

SUBSR0,R0,#1

MOVR0,#0XFF000

寄存器移位寻址

MOVR0,R2,LSL#3

ANDSR1,R1,R2,LSLR3

寄存器间接寻址

LDRR1,[R2]

基址寻址

LDRR2,[R3,#0X0C]

STRR1,[R0,#-4]

多寄存器寻址

LDMIASP!

{R4-R11,PC}

STMIAR1!

{R3-R9}

堆栈寻址

向上生长:

递增堆栈

向下生长:

递减堆栈

满堆栈:

堆栈指针指向最后压入栈的有效数据项

空堆栈:

堆栈指针指向下一个待压入数据的空位置

STMDBSP!

{R1-R7,LR};入栈,满递减堆栈

LDMIASP!

{R1-R7,LR};出栈,满递减堆栈

相对寻址

由PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后的地址即为操作数的有效地址。

14、Thumb-2指令集

2.1指令格式

<指令助记符>{<执行条件>}{S}<目标寄存器>,<操作数1的寄存器>{,<第2操作数>}

{}{S},{,}

<>号内是必需的,{}号内是可选的。

2.2存储器访问指令

(1)LDR和STR------加载存储指令

LDR:

从存储器中读取数据放入寄存器;

STR:

将寄存器中的数据保存到存储器。

LDRR1,[R0,#0X12]

(2)LDM和STM------多寄存器加载存储指令

用于较大数据量的复制、参数传递等,实现在一组寄存器和一块连续的内存单元之间传输数据。

LDM{cond}<模式>Rn{!

},reglist

STM{cond}<模式>Rn{!

},reglist

模式说明:

IA:

每次传送后地址加4

DB:

每次传送前地址减4

FD:

满递减堆栈

EA:

空递增堆栈

“!

”表示最后的地址写回到Rn中。

2.3数据处理运算指令

(1)数据传送指令

MOVRd,operand2

MVNRd,operand2;加载一个数的反码值

MOVWR1,#0x1234;把16位立即数放到寄存器的低16位,高16位清零

MOVTR1,#0x5678;把16位立即数放到寄存器的高16位,低16位不变

CPYRd,Rn;寄存器间拷贝

(2)算术逻辑运算指令

加法:

ADC、ADD、ADDW

减法:

SBC、SUB、SUBW

移位:

LSL、LSR、ORR、EOR、AND、RRX、ROR、ORN、ASR、BIC

(3)位段处理指令

位段清零:

BFC

位段插入:

BFI

位反转:

RBIT

位段提取:

SBFX、UBFX

(4)字节序反指令

REV、REV16、REVSH

(5)带符号扩展指令

(6)比较指令

(7)乘除法和饱和运算指令

2.4分支转移指令

2.5杂项指令

2.6伪指令

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2