ARM笔记Word下载.docx

上传人:b****5 文档编号:20017166 上传时间:2023-01-15 格式:DOCX 页数:43 大小:204.60KB
下载 相关 举报
ARM笔记Word下载.docx_第1页
第1页 / 共43页
ARM笔记Word下载.docx_第2页
第2页 / 共43页
ARM笔记Word下载.docx_第3页
第3页 / 共43页
ARM笔记Word下载.docx_第4页
第4页 / 共43页
ARM笔记Word下载.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

ARM笔记Word下载.docx

《ARM笔记Word下载.docx》由会员分享,可在线阅读,更多相关《ARM笔记Word下载.docx(43页珍藏版)》请在冰豆网上搜索。

ARM笔记Word下载.docx

4.2.4DCFD(或DCFDU)17

4.2.5DCFS(或DCFSU)17

4.2.6DCQ(或DCQU)17

4.2.7SPACE18

4.2.8MAP18

4.2.9FILED18

4.3汇编控制伪指令19

4.3.1IF、ELSE、ENDIF19

4.3.2WHILE、WEND19

4.3.3MACRO、MEND20

4.3.4MEXIT20

4.4其他常用的伪指令20

4.4.1AREA21

4.4.2ALIGN21

4.4.3CODE16、CODE3221

4.4.4ENTRY22

4.4.5END22

4.4.6EQU23

4.4.7EXPORT(或GLOBAL)23

4.4.8IMPORT23

4.4.9EXTERN23

4.4.10GET(或INCLUDE)24

4.4.11INCBIN24

4.4.12RN24

4.4.13ROUT24

5系统引导25

6存储器映射25

6.1.1初始化25

6.1.2存储器映射26

6.1.3初始化堆栈寄存器26

6.1.4启动顺序26

6.2调用main函数27

7高级中断控制器27

7.1硬件中断向量27

7.2快速中断请求27

7.3软件中断27

7.4寄存器27

7.5保护模式28

8定时计数器28

8.1定时计数器描述30

8.1.1计数器30

8.1.2时钟选择30

8.1.3时钟控制31

8.1.4定时计数器操作模式31

8.1.5触发31

8.2寄存器32

9其它32

9.1C函数中的局部变量和参数32

9.2结构体的安排32

9.3循环32

9.4(*(volatileunsigned*)0x1d20054)表示什么?

32

1基于ARM的嵌入式系统

1.1RISC设计思想

ARM内核采用RISC体系结构。

RISC是一种设计思想,其目标是设计出一套能在高时钟频率下单周期执行、简单而有效的指令集。

RISC的设计重点在于降低由硬件执行指令的复杂度,因此,RISC设计对编译器有更高的要求;

相反,传统的复杂指令集的计算机(CISC)则更侧重于硬件执行指令的功能性,使CISC指令变得更复杂。

RISC设计思想主要由下面4个设计准则来实现:

(1)指令集。

RISC处理器减少了指令种类,RISC的指令种类只提供简单的操作,编译器或程序员通过几条简单指令的组合来实现一个复杂的操作。

每条指令的长度是固定的,允许流水线在当前指令译码阶段去取下一条指令;

而在CISC处理器中,指令的长度通常不固定,执行也需要多个周期。

(2)流水线。

指令的处理过程被拆分成几个更小的、能够被流水线并行执行的单元。

在理想情况下,流水线每周期前进一步,可获得更高的吞吐率;

而CISC指令的执行需调用微代码的一个微程序。

(3)寄存器。

RISC处理器拥有更多的通用寄存器。

每个寄存器都可存放数据或地址。

寄存器可为所有的数据操作提供快速的局部存储访问;

而CISC处理器的寄存器都是用于特定目的的专用寄存器。

(4)load-store结构。

处理器只处理寄存器中的数据。

独立的load和store指令用来完成数据在寄存器和外部存储器之间的传送。

因为访问存储器很耗时,所以把存储器访问和数据处理分开。

这样就可反复使用保存在寄存器中的数据,而避免多次访问存储器。

相反,在CISC结构中,处理器能够直接处理存储器中的数据。

1.2ARM设计思想

许多客观需求促进了ARM处理器的设计改进,ARM的设计思想主要体现在以下方面:

(5)较小的核。

为降低功耗,ARM处理器被特殊设计成较小的核,从而延长了电池使用寿命。

(6)高的代码密度。

由于成本问题和物理尺寸的限制,嵌入式系统的存储器是很有限的,所以高的代码密度对那些只限于在板存储器的应用是非常有帮助的。

(7)较小的处理器内核管芯(die)面积。

处理器内核所占用的面积越小,留给外设电路的空间就越大,这可以减少最终产品的外围芯片数目,从而降低设计和制造成本。

(8)硬件调试技术。

ARM处理器中集成了硬件调试技术,使得软件工程师能观察到处理器在执行代码时的具体情况,从而使软件工程师能够更快速地解决问题。

1.3面向嵌入式系统的指令集

ARM指令集和单纯的RISC定义有以下几方面的不同:

(9)一些特定指令的周期数可变。

(10)内嵌桶形移位器产生了更为复杂的指令。

(11)Thumb16位指令集。

16位指令与32位的定长指令相比较,代码密度可提高约30%。

(12)条件执行。

(13)增强指令。

2ARM处理器体系结构

2.1ARM体系结构

迄今为止,ARM体系结构共定义了6个版本,版本号分别为v1~v6。

2.2ARM7TDMI处理器内核

ARM公司设计了许多处理器核,根据使用内核的不同划分为ARM7、ARM9、ARM10、ARM11等系列。

后缀数字7、9、10和11表示不同的内核设计。

ARM7内核是冯·

诺伊曼体系结构,数据和指令使用同一条总线。

ARM7CPU的核心是一条指令流水线,流水线用来处理从程序存储器中取出的指令。

ARM7使用三级流水线结构,由硬件实现,在执行一条指令的同时,译码另一条指令并读取第三条指令。

流水线技术大大提高了CPU的指令吞吐率,使得大多数ARM指令可在一个时钟周期内完成。

2.3处理器模式

ARM微处理器支持7种运行模式,分别为:

(14)用户模式(user):

ARM处理器正常的程序执行状态。

(15)快速中断模式(fiq):

用于高速数据传输或通道处理。

(16)外部中断模式(irq):

用于通用的中断处理。

(17)管理模式(svc):

操作系统使用的保护模式。

(18)数据访问终止模式(abt):

当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。

(19)系统模式(sys):

运行具有特权的操作系统任务。

(20)未定义指令中止模式(und):

当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。

2.4处理器工作状态

ARM处理器有三种工作状态:

ARM状态、Thumb状态和Jazelle状态。

三种状态分别对应三种指令集:

32位的ARM指令集、16位的Thumb指令集和8位的Jazelle指令集。

只有进入特定的状态,相应的指令集才有效。

CPSR的J(Jazelle)和T(Thumb)位反映了程序的状态。

在ARM状态下,绝大多数的指令都是有条件执行的;

在THUMB状态下,仅有分支指令是条件执行的。

2.5寄存器组织

ARM7是装载-存储结构。

为了执行任何数据处理指令,首先要把数据从存储器中装载到寄存器中,在数据处理指令执行结束后,如果需要,数据再被保存到存储器中。

2.5.1通用寄存器

ARM的中央寄存器集是16个用户寄存器R0~R15。

这些寄存器均是32位宽,R0~R12没有其它特殊功能。

R13~R15在内核中有特殊功能,R13被用作栈指针(SP),R14为链接寄存器(LR),当调用一个函数时返回地址被自动保存到链接寄存器,R15程序计数器(SP)。

读程序计数器的一般限制

由于ARM7TDMI采用了3级流水线机,当正确读取了PC的值时,该值为当前的指令地址加8个字节。

也就是说,对于ARM指令集,PC指向当前指令的下两条指令的地址。

由于ARM指令是字对齐的,所以PC值的第1位和第0位总为0。

写程序计数器的一般限制

由于ARM指令是字对齐的,写入R15的值应满足bit[1:

0]=0b00。

2.5.2当前程序状态寄存器(CPSR)

CPSR包括一组状态标志报告和控制ARM7内核操作的控制位,如图1所示。

31

30

29

28

27

~

8

7

6

5

4

3

2

1

N

Z

C

V

保留

I

F

T

M4

M3

M2

M1

M0

Negative/LessThan

IRQdisable

Zero

FIQdisable

Carry/Borrow/Extend

Statebit

Overflow

M0~4

Modebits

图1程序状态寄存器

(1)条件码标志

N、Z、C、V均为条件码标志位。

它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。

条件码标志各位的具体含义如表1所示:

表1条件码标志位的含义

标志位

含义

当用两个补码表示的带符号数进行运算时,N=1表示运算的结果为负数;

N=0表示运算的结果为正数或零。

Z=1表示运算的结果为零,Z=0表示运算的结果非零。

可以有4种方法设置C的值:

-加法运算(包括CMP):

当运算结果产生了进位时(无符号数溢出),C=1,否则C=0。

-减法运算(包括CMP):

当运算结果产生了借位时(无符号数溢出),C=0,否则C=1。

-对于包含移位操作的非加/减运算指令,C为移出值的最后一位。

-对于其它的非加/减运算指令,C的值通常不会改变。

可以有2种方法设置V的值:

-对于加减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。

-对于其它的非加/减运算指令,V的值通常不会改变。

Q

在ARMV5及以上版本的E系列处理器中,用Q标志位指示增强的DSP运算指令是否发生了溢出。

在其它版本的处理器中,Q标志位无定义。

(2)2控制位

CPSR的低8位(包括I、F、T和M[4:

0])称为控制位,当发生异常时这些位可以被改变。

如果处理器运行于特权模式时,这些位也可以由程序修改。

中断禁止位I、F:

置1时,禁止IRQ中断和FIQ中断。

T标志位:

该位反映处理器的运行状态。

当该位为1时,程序运行于THUMB状态,否则运行于ARM状态。

该信号反映在外部引脚TBIT上。

在程序中不得修改CPSR中的TBIT位,否则处理器工作状态不能确定。

运行模式位M[4:

0]:

这几位是模式位,这些位决定了处理器的运行模式。

具体含义如表2所示:

表2模式位的含义

M[4:

0]

处理器模式

ARM模式可访问的寄存器

THUMB模式可访问的寄存器

0b10000

用户模式

PC,CPSR,R0~R14

PC,CPSR,R0~R7,LR,SP

0b10001

FIQ模式

PC,CPSR,SPSR_fiq,R14_fiq~R8_fiq,R0~R7

PC,CPSR,SPSR_fiq,LR_fiq,SP_fiq,R0~R7

0b10010

IRQ模式

PC,CPSR,SPSR_irq,R14_irq~R13_irq,R0~R12

PC,CPSR,SPSR_irq,LR_irq,SP_irq,R0~R7

0b10011

管理模式

PC,CPSR,SPSR_svc,R14_svc~R13_svc,R0~R12

PC,CPSR,SPSR_svc,LR_svc,SP_svc,R0~R7

0b10111

中止模式

PC,CPSR,SPSR_abt,R14_abt~R13_abt,R0~R12

PC,CPSR,SPSR_abt,LR_abt,SP_abt,R0~R7

0b11011

未定义模式

PC,CPSR,SPSR_und,R14_und~R13_und,R0~R12

PC,CPSR,SPSR_und,LR_und,SP_und,R0~R7

0b11111

系统模式

PC,CPSR,LR,SP,R0~R74

保留位:

CPSR中的其余位为保留位,当改变CPSR中的条件码标志位或者控制位时,保留位不要改变,在程序中也不要用保留位存储数据。

保留位将用于ARM版本的扩展。

除了用户模式外的所有模式都有一个额外的寄存器——“程序状态保存寄存器(SPSR)”。

如果当用户的应用在用户模式下运行时发生了一个异常,处理器将改变操作模式并将CPSR的当前内容存入SPSR。

运行完例外的代码后返回时,SPSR的内容被存回到CPSR,以允许应用代码继续执行。

2.6异常

在ARM体系中通常有以下3种方式控制程序的执行流程:

(21)顺序执行。

(22)跳转分支指令。

(23)异常中断。

2.6.1异常中断

是指处理器暂时中断当前数据流的现象。

只要有异常中断发生,ARM处理器在执行完当前指令之后,就会进入异常模式并跳转到相应的异常中断处理程序中执行。

ARM处理器支持表3所示的7种异常中断。

表3异常中断

异常

产生条件及功能描述

复位

(RESET)

当处理器复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序处执行。

复位异常中断通常用在下面几种情况下:

系统加电时;

系统复位时;

跳转到复位中断向量处执行成为软复位。

未定义的指令

当ARM处理器或者是系统中的协处理器认为当前指令未定义时,产生未定义的指令异常中断,可以通过改异常中断机制仿真浮点向量运算。

软件中断

这是一个由用户定义的中断指令。

可用于用户模式下的程序调用特权操作指令。

在实时操作系统中可以通过该机制实现系统功能调用。

指令预取终止

(PrefechAbort)

如果处理器预取的指令的地址不存在,或者该地址不允许当前指令访问,当被预取的指令执行时,处理器产生指令预取终止异常中断。

数据访问终止

(DATAABORT)

如果数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问终止异常中断。

外部中断请求

(IRQ)

当处理器的外部中断请求引脚有效,而且CPSR的寄存器的I控制位被清除时,处理器产生外部中断请求异常中断。

系统中个外设通过该异常中断请求处理服务。

快速中断请求

(FIQ)

当处理器的外部快速中断请求引脚有效,而且CPSR的F控制位被清除时,处理器产生外部快速中断请求异常中断。

当发生异常时,处理器将改变模式,PC被强制进入异常向量。

中断向量表指定了个异常中断及其处理程序的对应关系,它通常存放在存储地址的低端。

在ARM体系中,异常中断向量表的大小为32字节,其中每个异常中断占据1个字(4个字节大小),保留了4个字节空间。

每个异常中断对应的中断向量表中的4个字节的空间中存放了一个跳转指令或者一个向PC寄存器中赋值的数据访问指令。

通过这两种指令,程序将跳转到相应的异常中断处理程序处执行。

当几个异常中断同时发生时,就必须按照一定的次序来处理这些异常中断。

表4列出了各个异常中断的中断向量地址以及中断的处理优先级。

表4各个异常中断的中断向量地址以及中断的处理优先级

中断向量地址

异常中断类型

异常中断模式

优先级(6最低)

0x00000000

0x00000004

0x00000008

0x0000000C

0x00000010

0x00000014

未使用

0x00000018

0x0000001C

2.6.2异常返回

当用户代码完成异常处理后,处理器必须回到用户模式继续执行。

但是ARM指令集中不包括“返回”或者“从中断返回”指令,所以必须通过普通指令控制PC。

(24)软件中断的返回指令为:

MOVSR15,R14;

将链接寄存器的内容移入PC中并转换模式

(25)对于IRQ,FIQ和预取异常终止,由于链接寄存器中的地址是被抛弃的指令地址加4,所以返回指令为:

SUBSR15,R14,#4

(26)对于数据终止异常,异常将在导致异常的指令的下一条指令后产生。

在这种情况下,程序将理想地进入数据访问终止ISR,解决存储器的问题,然后重新执行导致异常的指令。

所以,对于数据访问终止异常,返回指令为:

SUBSR15,R14,#8

一旦返回指令被执行,修改后的链接寄存器内容被移入PC,处理器进入用户模式且SPSR被存回到CPSR。

2.7存储器和存储器映射

2.7.1ARM存储器规则

ARM使用单一的平板地址空间,大小为232(4G)个8位字节。

这些字节单元的地址是32位的无符号数,其取值范围是0到232-1。

ARM的地址空间也可看作是230个32位的字单元。

这些字单元的地址低两位为0b00。

在ARM体系结构版本v4及以上版本中,地址空间还可被看作231个16位半字,地址按照半字进行分配。

2.7.2ARM存储器格式

为了区分字单元中的4个字节哪一个是高位字节,哪一个是低位字节,ARM采用了两种不同的存储器格式:

小端和大端。

小端和大端分别对应两种字、半字和字节之前的映射关系。

(27)小端格式(littleendian)的存储器系统

在小端格式中,处理器将32位字节当中最低地址的字节看作是最低位字节,最高地址的字节看作最高位字节。

图2为小端格式存储器系统的示意图。

3124

2316

158

70

字单元A

半字单元A+2

半字单元A

字节单元A+3

字节单元A+2

字节单元A+1

字节单元A

图2小端格式的存储器系统

(28)大端格式(bigendian)的存储器系统

在大端格式中,处理器将32位字节当中最高位字节保存在最低地址字节,最低位字节保存在最高地址字节。

图3为大端格式存储器系统的示意图。

图3大端格式的存储器系统

2.7.3非对齐的存储器访问操作

非对齐的存储访问操作:

当处理器位于ARM状态时,低两位不为0b00;

当处理器位于Thumb状态时,最低位不为0b0。

(29)非对齐的指令取址

如果系统中指定当发生非对齐的指令预取操作时,忽略地址中相应的位,则由存储系统实现这种忽略。

(30)非对齐的数据访问操作

对于Load/Store操作,系统定义了下面3种可能的结果:

●执行结果不可预知

●在字访问时忽略字单元地址低两位的值,即访问地址为字单元;

在半字访问时忽略半字单元最低位的值,即访问地址为半字单元。

●由存储系统忽略字单元地址中低两位的值,半字单元地址最低位的值。

2.7.4指令预取和自修改代码

ARM预取的指令并不一定能够得以执行。

有两种典型的情况:

●当发生异常时,当前指令执行完毕,所有预取的指令都被丢弃,指令的执行从异常向量开始。

●当发生跳转时,预取的在分支指令后的指令都被丢弃。

ARM实现可以自由选择预取指令比当前执行指令提前多少,甚至可以动态改变预取指令的数目。

自修改代码指的是在执行过程中会修改自身的代码。

应尽量避免使用。

2.7.5存储器映射的I/O空间

在ARM中,I/O操作通常被映射为存储器操作,即I/O的输出操作可以通过存储器的写入操作来实现,I/O的输入操作可以通过存储器的读取操作来实现,这样,I/O空间就被映射成了存储器空间。

存储器映射的I/O空间与一般存储器有所不同。

通常需要将存储器映射的I/O空间设置成不使用cache的(uncached)和非缓冲(unbuffered)的。

将存储器映射的I/O空间设置成uncached是为了有效地防止硬件系统优化时删掉有用的存储访问操作。

在高级语言中访问存储器映射的I/O空间时,仅仅将存储器映射的I/O空间设置成uncached是不够的,还必须告诉编译器不要在优化时删掉有用的I/O访问操作。

在C语言中,通过使用关键字“volatile”声明存储器映射的I/O空间,可以防止编译器在优化时删掉有用的I/O访问操作。

3ARM7指令集

ARM7指令集最有趣的特点之一,就是所有的指令都可被有条件地执行,简称条件执行。

在ARM指令集中,操作码的最高4位与CPSR中的条件码进行比较,如果它们彼此不匹配,指令将不被执行,而是以NOP指令通过流水线。

图4为指令条件码的示意图。

3128

COND

图4指令条件码

一般的汇编指令可被预置16个条件助记符,它们定义了被测试的条件码状态。

表5列出了条件执行的词缀。

表5条件执行的词缀

词缀

标志

意义

EQ

Z位置位

等于

NE

Z位清零

不等于

CS

C位置位

无符号大于或等于

CC

C位清零

无符号小于

MI

N位置位

PL

N位清零

正或零

VS

V位置位

溢出

VC

V位清零

未溢出

HI

C位置位且Z位清零

无符号大于

LS

C位清零且Z位置位

无符号小于或等于

GE

N等于V

大于或等于

LT

N不等于V

小于

GT

Z位清零且N等于V

大于

LE

Z位置位或N不等于V

小于或等于

AL

(忽略)

总是

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

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1