嵌入式系统设计
This presentation is the property of its rightful owner.
Sponsored Links
1 / 108

嵌入式系统设计 PowerPoint PPT Presentation


  • 103 Views
  • Uploaded on
  • Presentation posted in: General

嵌入式系统设计. 王行甫 [email protected] 0551_63607858 中国科学技术大学计算机学院. 主讲内容. 第 1 章 嵌入式系统概述 第 2 章 ARM 微处理器概述与编程模型 第 3 章 ARM9 指令系统 第 4 章 嵌入式程序设计基础 第 5 章 嵌入式内部可编程模块 第 6 章 嵌入式接口技术应用 第 7 章 软件开发环境. 第 2 章 ARM 微处理器概述与编程模型. ARM 微处理器概述 ARM 微处理器结构 ARM 微处理器的工作状态 ARM 体系结构的存储器格式 处理器模式

Download Presentation

嵌入式系统设计

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


4558463

嵌入式系统设计

王行甫

[email protected]

0551_63607858

中国科学技术大学计算机学院


4558463

主讲内容

第1章 嵌入式系统概述

第2章 ARM微处理器概述与编程模型

第3章 ARM9指令系统

第4章 嵌入式程序设计基础

第5章 嵌入式内部可编程模块

第6章 嵌入式接口技术应用

第7章 软件开发环境


2 arm

第2章 ARM微处理器概述与编程模型

ARM微处理器概述

ARM微处理器结构

ARM微处理器的工作状态

ARM体系结构的存储器格式

处理器模式

寄存器组织

异常(Exceptions)


2 1 arm

2.1 ARM微处理器概述

ARM公司简介

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

公司的特点是只设计芯片,而不生产。它将技术授权给世界上许多著名的半导体、软件和OEM厂商,并提供服务。


2 1 arm1

2.1 ARM微处理器概述

ARM公司简介

. . .

将技术授权给其它芯片厂商

形成各具特色的ARM芯片


2 1 arm2

2.1 ARM微处理器概述

ARM(Advanced RISC Machines)有3种含义

一个公司的名称

一类微处理器的通称

一种技术的名称


2 1 1 arm

2.1.1 ARM微处理器的特点

采用RISC架构的ARM微处理器一般具有如下特点:

体积小、低功耗、低成本、高性能;

支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件;

大量使用寄存器,指令执行速度更快;

大多数数据操作都在寄存器中完成;

寻址方式灵活简单,执行效率高;

指令长度固定。


2 1 2 arm

2.1.2 ARM微处理器系列

ARM处理器的产品系列非常广,包括ARM7、ARM9、ARM9E、ARM10E、ARM11和SecurCore、Cortex等。以及其它厂商基于ARM体系结构的处理器,除了具有ARM体系结构的共同特点以外,每一系列提供一套特定的性能来满足设计者对功耗、性能、体积的需求。

表2-1总结了ARM各系列处理器所包含的不同类型。


2 1 2 arm1

2.1.2 ARM微处理器系列


2 1 2 arm2

2.1.2 ARM微处理器系列


2 1 2 arm3

2.1.2 ARM微处理器系列

ARM Cortex系列简介

A应用处理器(Application Processor )系列

R实时控制处理(Real Time Control )系列

M微控制器(Micro Controller )系列

基于ARMv7版本的ARM Cortex系列产品由A、R、M三个系列组成,具体分类延续了一直以来ARM面向具体应用设计CPU的思路。

ARM Cortex


2 1 2 arm4

2.1.2 ARM微处理器系列

CortexTM-M3处理器简介

该处理器是首款基于ARMv7-M架构的处理器,采用了纯Thumb2指令的执行方式,具有极高的运算能力和中断相应能力。

Cortex-M3主要应用于汽车车身系统,工业控制系统和无线网络等对功耗和成本敏感的嵌入式应用领域。目前最便宜的基于该内核的ARM单片机售价为1美元。


2 1 2 arm5

2.1.2 ARM微处理器系列

CortexTM-R4处理器简介

该处理器是首款基于ARMv7架构的高级嵌入式处理器,其主要目标为产量巨大的高级嵌入式应用系统,如硬盘,喷墨式打印机,以及汽车安全系统等等。

  • CortexTM-R4F处理器简介

该处理器在CortexTM-R4处理器的基础上加入了代码错误校正(ECC)技术,浮点运算单元(FPU)以及DMA综合配置的能力,增强了处理器在存储器保护单元、缓存、紧密耦合存储器、DMA访问以及调试方面的能力。


2 1 2 arm6

2.1.2 ARM微处理器系列

CortexTM-A8处理器简介

该处理器是ARM公司所开发的基于ARMv7架构的首款应用级处理器,其特色是运用了可增加代码密度和加强性能的技术、可支持多媒体以及信号处理能力的NEONTM技术、以及能够支持Java和其他文字代码语言的提前和即时编[email protected]

[email protected]种高端的应用领域。


2 1 2 arm7

2.1.2 ARM微处理器系列

ARM7系列简介

该系列包括ARM7TDMI、ARM7TDMI-S、带有高速缓存处理器宏单元的ARM720T和扩充了Jazelle的ARM7EJ-S。该系列处理器提供Thumb 16位压缩指令集和EmbededICE软件调试方式,适用于更大规模的SoC设计中。

ARM7系列广泛应用于多媒体和嵌入式设备,包括Internet设备、网络和调制解调器设备,以及移动电话、PDA等无线设备。


2 1 2 arm8

2.1.2 ARM微处理器系列

ARM9系列简介

该系列包括ARM9TDMI、ARM920T和带有高速缓存处理器宏单元的ARM940T。除了兼容ARM7系列,而且能够更加灵活的设计。

ARM9系列主要应用于引擎管理、仪器仪表、安全系统和机顶盒等领域。


2 1 2 arm9

2.1.2 ARM微处理器系列

ARM9E系列简介

该系列为含有DSP指令集的综合处理器,包括ARM926EJ-S、带有高速缓存处理器宏单元的ARM966E-S/ARM946E-S。其内核在ARM7处理器内核的基础上使用了Jazelle增强技术,该技术支持一种新的Java操作状态,允许在硬件中执行Java字节码。

ARM9E系列主要应用于下一代无线设备、数字消费品、成像设备、工业控制、存储设备和网络设备等领域。


2 1 2 arm10

2.1.2 ARM微处理器系列

ARM10E系列简介

该系列包括ARM1020E和ARM1020E处理器核,其核心在于使用向量浮点(VFP)单元VFP10提供高性能的浮点解决方案,从而极大提高了处理器的整型和浮点运算性能。

可以用于视频游戏机和高性能打印机等场合。


2 1 2 arm11

2.1.2 ARM微处理器系列

Xscale简介

Intel Xscale微控制器则提供全性能、高性价比、低功耗的解决方案,支持16位Thumb指令并集成数字信号处理(DSP)指令。

主要应用于手提式通讯和消费电子类设备。


2 2 arm

2.2. ARM微处理器结构

2.2.1 RISC体系结构

1.嵌入式CISC微处理器

传统的CISC(Complex Instruction Set Computer,复杂指令集计算机)结构有其固有的缺点,即随着计算机技术的发展而不断引入新的复杂的指令集,为支持这些新增的指令,计算机的体系结构会越来越复杂,然而,在CISC指令集的各种指令中,其使用频率却相差悬殊,大约有20%的指令会被反复使用,占整个程序代码的80%。而余下的80%的指令却不经常使用,在程序设计中只占20%,显然,这种结构是不太合理的。


2 2 1 risc

2.2.1 RISC体系结构

2. 嵌入式RISC微处理器

基于以上的不合理性,1979年美国加州大学伯克利分校提出了RISC(Reduced Instruction Set Computer,精简指令集计算机)的概念,

RISC是精简指令集计算机,但RISC并非只是简单地去减少指令,而是把着眼点放在了如何使计算机的结构更加简单合理地提高运算速度上。RISC结构优先选取使用频最高的简单指令,抛弃复杂指令,固定指令长度,减少指令格式和寻址方式,以控制逻辑为主,不用或少用微码控制等措施来达到上述目的。


2 2 1 risc1

2.2.1 RISC体系结构

RISC体系结构应具有如下特点:

采用固定长度的指令格式,指令归整、简单、基本寻址方式有2~3种。

使用单周期指令,便于流水线操作执行。

大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/ 存储指令可以访问存储器,以提高指令的执行效率。

除此以外,ARM体系结构还采用了一些特别的技术,在保证高性能的前提下尽量缩小芯片的面积,并降低功耗.


2 2 1 risc2

2.2.1 RISC体系结构

RISC体系结构应具有如下特点:

所有的指令都可根据前面的执行结果决定是否被执行,从而提高指令的执行效率。

可用加载/存储指令批量传输数据,以提高数据的传输效率。

可在一条数据处理指令中同时完成逻辑处理和移位处理。

在循环处理中使用地址的自动增减来提高运行效率。


2 2 1 risc3

2.2.1 RISC体系结构

RISC和CISC之间的主要区别:


2 2 2 arm

2.2.2 ARM微处理器的寄存器结构

ARM处理器共有37个寄存器,被分为若干个组(BANK),这些寄存器包括:

31个通用寄存器,包括程序计数器(PC指针),均为32位的寄存器。

6个状态寄存器,用以标识CPU的工作状态及程序的运行状态,均为32位,目前只使用了其中的一部分。


2 2 2 arm1

2.2.2 ARM微处理器的寄存器结构

ARM处理器又有7种不同的处理器模式,在每一种处理器模式下均有一组相应的寄存器与之对应。

即在任意一种处理器模式下,可访问的寄存器包括15个通用寄存器(R0~R14)、1~2个状态寄存器和程序计数器。

在所有的寄存器中,有些是在7种处理器模式下共用的同一个物理寄存器,而有些寄存器则是在不同的处理器模式下有不同的物理寄存器。


2 2 3 arm

2.2.3 ARM微处理器的指令结构

ARM微处理器在较新的体系结构中支持两种指令集:ARM指令集和Thumb指令集。

ARM指令为32位的长度

Thumb指令为16位长度

Thumb指令集为ARM指令集的功能子集,但与等价的ARM代码相比较,可节省30%~40%以上的存储空间,同时具备32位代码的所有优点。


2 2 4 arm

2.2.4 ARM微处理器的应用选型

从应用的角度出发,对在选择ARM微处理器时所应考虑的主要问题 :

ARM微处理器内核的选择

从前面所介绍的内容可知,ARM微处理器包含一系列的内核结构,以适应不同的应用领域,用户如果希望使用WinCE或标准Linux等操作系统以减少软件开发时间,就需要选择ARM720T以上带有MMU(Memory Management Unit)功能的ARM芯片,ARM720T、ARM920T、ARM922T、ARM946T、Strong-ARM都带有MMU功能。

而ARM7TDMI则没有MMU,不支持Windows CE和标准Linux,但目前有uCLinux等不需要MMU支持的操作系统可运行于ARM7TDMI硬件平台之上。事实上,uCLinux已经成功移植到多种不带MMU的微处理器平台上,并在稳定性和其他方面都有上佳表现。


2 2 4 arm1

2.2.4 ARM微处理器的应用选型

系统的工作频率

系统的工作频率在很大程度上决定了ARM微处理器的处理能力。

ARM7系列微处理器的典型处理速度为0.9MIPS/MHz,常见的ARM7芯片系统主时钟为20MHz-133MHz。

ARM9系列微处理器的典型处理速度为1.1MIPS/MHz,常见的ARM9的系统主时钟频率为100MHz-233MHz。

ARM10最高可以达到700MHz。

不同芯片对时钟的处理不同,有的芯片只需要一个主时钟频率,有的芯片内部时钟控制器可以分别为ARM核和USB、UART、DSP、音频等功能部件提供不同频率的时钟。


2 2 4 arm2

2.2.4 ARM微处理器的应用选型

芯片内存储器的容量

大多数的ARM微处理器片内存储器的容量都不太大,需要用户在设计系统时外扩存储器.

但也有部分芯片具有相对较大的片内存储空间,如ATMEL的AT91F40162就具有高达2MB的片内程序存储空间,用户在设计时可考虑选用这种类型,以简化系统的设计。


2 2 4 arm3

2.2.4 ARM微处理器的应用选型

片内外围电路的选择

几乎所有的ARM芯片均根据各自不同的应用领域,扩展了相关功能模块,并集成在芯片之中,称之为片内外围电路.

如USB接口、IIS接口、LCD控制器、键盘接口、RTC、ADC和DAC、DSP协处理器等,设计者应分析系统的需求,尽可能采用片内外围电路完成所需的功能,这样既可简化系统的设计,同时提高系统的可靠性。


2 3 arm

2.3 ARM微处理器的工作状态

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

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

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

ARM指令集和Thumb指令集均有切换处理器状态的指令,并可在两种工作状态之间切换,但ARM微处理器在开始执行代码时,应该处于ARM状态。


2 3 arm1

2.3 ARM微处理器的工作状态

进入Thumb状态:当操作数寄存器的状态位(位0)为1时,可以采用执行BX指令的方法,使微处理器从ARM状态切换到Thumb状态。此外,当处理器处于Thumb状态时发生异常(如IRQ、FIQ、Undef、Abort、SWI等),则异常处理返回时,自动切换到Thumb状态。

进入ARM状态:当操作数寄存器的状态位为0时,执行BX指令时可以使微处理器从Thumb状态切换到ARM状态。此外,在处理器进行异常处理时,把PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。


2 4 arm

2.4 ARM处理器状态

状态切换的一个例子

地址最低位为0,表示切换到ARM状态

跳转地址标号

地址最低位为1,表示切换到Thumb状态

使用BX指令将ARM内核的操作状态在ARM状态和Thumb状态之间进行切换。

从Thumb状态切换到ARM状态的程序代码如下:

从ARM状态切换到Thumb状态的程序代码如下:

CODE16

LDR R0, =Lable

BX R0

CODE32

LableMOV R1, #10

CODE32

LDRR0, =Lable+1

BX R0

CODE16

Lable MOV R1, #12

ARM指令集

Thumb

指令集

执行完BX指令,处理器切换到Thumb状态,开始执行Thumb指令

执行完BX指令,处理器切换到ARM状态,开始执行ARM指令

指令集关系

程序代码


2 4 arm1

2.4 ARM体系结构的存储器格式

ARM体系结构将存储器看作是从零地址开始的字节的线性组合。

从零字节到三字节放置第一个存储的字数据.

从第四个字节到第七个字节放置第二个存储的字数据,依次排列。

作为32位的微处理器,ARM体系结构所支持的最大寻址空间为4GB(232字节)。

ARM体系结构可以用两种方法存储字数据,称之为

大端格式

小端格式


2 4 arm2

2.4 ARM体系结构的存储器格式

大端格式

在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中,如图所示。

高地址

低地址


2 4 arm3

2.4 ARM体系结构的存储器格式

小端格式

在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中,如图所示。

高地址

低地址


2 4 1

2.4.1 指令长度及数据类型

ARM微处理器的指令长度可以是

32位(在ARM状态下)

16位(在Thumb状态下)

ARM微处理器中支持字节(8位)、半字(16位)、字(32位)三种数据类型.

其中,字需要4字节对齐(地址的低两位为0)、半字需要2字节对齐(地址的最低位为0)。


2 4 2 mmu

2.4.2 存储管理单元-MMU

在复杂的嵌入式系统设计时,越来越多的会选用带有存储管理单元(MMU)的微处理器芯片。

MMU完成的主要功能有:

将主存地址从虚拟存储空间映射到物理存储空间。

存储器访问权限控制。

设置虚拟存储空间的缓冲特性等。


2 4 2 mmu1

2.4.2 存储管理单元-MMU

虚拟地址存储系统示意图

主存

MMU

逻辑地址

物理地址

辅助存储器

对换


2 4 2 mmu2

2.4.2 存储管理单元-MMU

ARM920T微处理器核的MMU采用了分页虚拟存储管理方式。它把虚拟存储空间分成一个个固定大小的页,把物理主存储的空间也分成同样大小的一个个页。

通过查询存放在主存中的页表,来实现虚拟地址到物理地址的转换。但由于页表存储在主存储中,查询页表所花的代价很大,因此,通常又采用快表技术(TLB translation lookaside buffer)来提高地址变换效率。


2 4 2 mmu3

2.4.2 存储管理单元-MMU

TLB技术中,将当前需要访问的地址变换条目存储在一个容量较小(通常8~16个字)、访问速度更快(与微处理器中通用寄存器速度相当)的存储器件中。当微处理器访问主存时,先在TLB中查找需要的地址变换条目,如果该条目不存在,再从存储在主存中的页表中查询,并添加到TLB中。

这样,当微处理器下一次又需要该地址变换条目时,可以从TLB中直接得到,从而提高了地址变换速度。


2 4 2 mmu4

2.4.2 存储管理单元-MMU

表2-5是ARM920T的写出其CP15中与MMU操作相关的寄存器。设计者编程控制这些寄存器,则可以相应地控制MMU操作。


2 4 2 mmu5

2.4.2 存储管理单元-MMU

1.禁止与使能MMU

CP15的寄存器C1的位[0]用于设置禁止/使能MMU。C1的位[0]为0时,禁止MMU;当C1的位[0]为1时,使能MMU。下面指令实现了使能MMU。

MRC P15,0,R0,C1,0,0; C1的内容赋给R0

ORR R0,#0x1

MCR P15,0,R0,C1,0,0;R0的内容赋给C1


2 4 2 mmu6

2.4.2 存储管理单元-MMU

使能MMU时,其控制存储访问的过程是:

首先在TLB中查找虚拟地址,如果该虚拟地址对应的地址变换条目不在TLB中,则到页表中查询对应的地址变换条目,并把查询到的结果添加到TLB中。如果TLB已满,还需根据一定的淘汰算法进行替换。得到地址变换条目后,进行一下步骤的操作。


2 4 2 mmu7

2.4.2 存储管理单元-MMU

禁止MMU时,所有的虚拟地址和物理地址是相等的,也不进行存储访问权限的控制。是否支持cache和写缓存由具体芯片设计确定。

在禁止/使能MMU时,应该注意以下几点。

使能MMU之前,要在内存中建立0号页表,同时CP15中的各相关寄存器必须完成初始化.

如果设计的物理地址与虚拟地址空间不相等,在禁止/使能MMU时,虚拟地址和物理地址的对应关系会改变,应清除cache中当前地址变换条目。

完成禁止/使能MMU代码的物理地址最好和虚拟地址相同。


2 4 2 mmu8

2.4.2 存储管理单元-MMU

2.MMU中的地址变换过程

虚拟存储空间到物理存储空间的映射是以内存块为单位进行的。在页表或TLB中,每个地址变换条目记录了一个虚拟存储空间的存储块的基地址与物理存储空间的一个存储块基地址的对应关系。

ARM920T支持的存储块大小有一下几种:

段(section)是大小为1MB的存储块。

大页(large pages)是大小为64KB的存储块。

小页(small pages)是大小为4KB的存储块。

极小页(tiny pages)是大小为1KB的存储块。


2 4 2 mmu9

2.4.2 存储管理单元-MMU

3.MMU中的存储访问权限控制

在MMU中,CP15的寄存器C1的R、S控制位和页表中地址转换条目中的访问权限控制位联合作用控制存储访问权限。

具体规则如表2-6所示。


2 4 2 mmu10

2.4.2 存储管理单元-MMU

表2-6 MMU中存储访问控制权限控制规则


2 4 2 mmu11

2.4.2 存储管理单元-MMU

4.MMU中的域

MMU中的域指的是一些段、大页或者小页的集合。ARM920T支持最大16个域,每个域的访问控制特性由CP15的寄存器C3中的两位来控制。

C3寄存器是32位的,每两位控制一个域,其控制编码如表2-7所示。


2 4 2 mmu12

2.4.2 存储管理单元-MMU

表2-7 MMU中域访问控制字段编码及含义


2 4 2 mmu13

2.4.2 存储管理单元-MMU

5.快表操作

从虚拟地址到物理地址的变换过程其实就是查询页表的过程,由于页表存放在主存储器中,这个查询代价很大。而程序在执行时其过程具有局部性,对页表中各存储单元的访问并不是随机的,在一段时间内,只局限在少数几个单元中。

因此,采用TLB技术可以提高存储系统的整体性能。


2 4 2 mmu14

2.4.2 存储管理单元-MMU

6.存储访问失效

在ARM920T中,MMU可以产生4种类型的存储访问失效,即地址对齐失效、地址变换失效、域控制失效和访问权限控制失效。当发生存储访问失效时,存储系统可以中止3种存储访问,即cache内容预取、非缓冲的存储器访问操S作和页表访问。


2 4 2 mmu15

2.4.2 存储管理单元-MMU

有下面两种机制可以检测存储访问失效,并进而中止微处理器的执行。

(1)当MMU检测到存储访问失效时,它可以向微处理器报告该情况,并将存储访问失效的相关信息保存到寄存器C5和C6中。这种机制成为MMU失效。

(2)存储系统也可以向微处理器报告存储访问失效。这种机制称为外部存储访问中止(external abort)。

上述两种情况通称为存储访问中止(abort)。


2 4 2 mmu16

2.4.2 存储管理单元-MMU

如果存储访问发生在数据访问周期,微处理器将产生数据访问中止异常。

如果存储访问发生在指令预取周期,当该指令执行时,微处理器将产生指令预取异常。

MMU中与存储访问失效相关的寄存器有两个:

C5和C6。

C5为失效状态寄存器,C6为失效地址寄存器。


4558463

2.5 处理器模式

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

用户模式(usr): ARM处理器正常的程序执行状态。

快速中断模式(fiq):用于高速数据传输或通道处理。

外部中断模式(irq):用于通用的中断处理。

管理模式(svc):操作系统使用的保护模式。

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

系统模式(sys):运行具有特权的操作系统任务。

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


4558463

特权模式

2.5 处理器模式

系统 (sys)

快中断 (fiq)

中断 (irq)

管理 (svc)

中止 (abt)

未定义 (und)

除用户模式外,其它模式均为特权模式。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。


4558463

异常模式

2.5 处理器模式

快中断 (fiq)

中断 (irq)

管理 (svc)

中止 (abt)

未定义 (und)

这五种模式称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。


4558463

用户和系统模式

2.5 处理器模式

用户 (usr)

系统 (sys)

这两种模式都不能由异常进入,而且它们使用完全相同的寄存器组。

系统模式是特权模式,不受用户模式的限制。操作系统在该模式下访问用户模式的寄存器就比较方便,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。


4558463

2.5 处理器模式

处理器启动时的模式转换图

多种特权模式变化

用户程序的运行模式

管理模式SVC

(Supervisor)

主要完成各模式的堆栈设置,注意不要进入用户模式

复位后

缺省模式

一般为用户模式User


4558463

2.6 寄存器组织

ARM微处理器中的寄存器不能被同时访问,具体哪些寄存器是可编程访问的,取决微处理器的工作状态及具体的运行模式。

但在任何时候,通用寄存器R14~R0、程序计数器PC、一个或两个状态寄存器都是可访问的。


2 6 1 arm

2.6.1 ARM状态下的寄存器组织


2 6 1 arm1

2.6.1 ARM状态下的寄存器组织

R0

R0

R1

R1

R2

R2

R3

R3

R4

R4

R5

R5

R6

R6

R7

R7

R8

R8

R8_fiq

R8_fiq

R9

R9

R9_fiq

R9_fiq

R10

R10

R10_fiq

R10_fiq

R11

R11

R11_fiq

R11_fiq

R12

R12

R12_fiq

R12_fiq

R13

R13

R13_svc

R13_svc

R13_abt

R13_abt

R13_und

R13_und

R13_irq

R13_irq

R13_fiq

R13_fiq

R14

R14

R14_svc

R14_svc

R14_abt

R14_abt

R14_und

R14_und

R14_irq

R14_irq

R14_fiq

R14_fiq

R15

R15

CPSR

SPSR_abt

SPSR_abt

SPSR_und

SPSR_irq

SPSR_fiq

  • 所有的37个寄存器,分成两大类:

  • 31个通用32位寄存器;

  • 6个状态寄存器。


2 6 1 arm2

2.6.1 ARM状态下的寄存器组织

用户

系统

管理

中止

未定义

中断

快中断

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_irq

R13_fiq

R14

R14

R14_svc

R14_abt

R14_und

R14_irq

R14_fiq

R15

R15

R15

R15

R15

R15

R15

CPSR

CPSR

CPSR

CPSR

CPSR

CPSR

CPSR

SPSR_abt

SPSR_abt

SPSR_und

SPSR_irq

SPSR_fiq


2 6 1 arm3

2.6.1 ARM状态下的寄存器组织

1.通用寄存器

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

未分组寄存器R0~R7;

分组寄存器R8~R14;

程序计数器PC(R15)。


2 6 1 arm4

2.6.1 ARM状态下的寄存器组织

R0

R1

R2

R3

R4

R5

R6

R7

R8

R8_fiq

R9

R9_fiq

R10

R10_fiq

R11

R11_fiq

R12

R12_fiq

R13

R13_svc

R13_abt

R13_und

R13_irq

R13_fiq

在汇编语言中寄存器R0~R13为保存数据或地址值的通用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。


2 6 1 arm5

2.6.1 ARM状态下的寄存器组织

2.未分组寄存器R0~R7

在所有的运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途,因此,在中断或异常处理进行运行模式转换时,由于不同的处理器运行模式均使用相同的物理寄存器,可能会造成寄存器中数据的破坏,这一点在进行程序设计时应引起注意。


2 6 1 arm6

2.6.1 ARM状态下的寄存器组织

R0

R0

R1

R1

R2

R2

R3

R3

R4

R4

R5

R5

R6

R6

R7

R7

R8

R8_fiq

R9

R9_fiq

R10

R10_fiq

R11

R11_fiq

R12

R12_fiq

R13

R13_svc

R13_abt

R13_und

R13_irq

R13_fiq

其中R0~R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。


2 6 1 arm7

2.6.1 ARM状态下的寄存器组织

3.分组寄存器R8~R14

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

对于R8~R12来说,每个寄存器对应两个不同的物理寄存器,当使用fiq模式时,访问寄存器R8_fiq~R12_fiq;当使用除fiq模式以外的其他模式时,访问寄存器R8_usr~R12_usr。

对于R13、R14来说,每个寄存器对应6个不同的物理寄存器,其中的一个是用户模式与系统模式共用,另外5个物理寄存器对应于其他5种不同的运行模式。

采用以下的记号来区分不同的物理寄存器:

R13_<mode>

R14_<mode>

其中,mode为以下几种模式之一:usr、fiq、irq、svc、abt、und。


2 6 1 arm8

2.6.1 ARM状态下的寄存器组织

R8

R8_fiq

R9

R9_fiq

R10

R10_fiq

R11

R11_fiq

R12

R12_fiq

R13

R13_svc

R13_abt

R13_und

R13_irq

R13_fiq

R14

R14_svc

R14_abt

R14_und

R14_irq

R14_fiq

寄存器R8~R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器


2 6 1 arm9

2.6.1 ARM状态下的寄存器组织

R8

R8_fiq

R9

R9_fiq

R10

R10_fiq

R11

R11_fiq

R12

R12_fiq

寄存器R8~R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。


2 6 1 arm10

2.6.1 ARM状态下的寄存器组织

R13

R13_svc

R13_abt

R13_und

R13_irq

R13_fiq

R14

R14_svc

R14_abt

R14_und

R14_irq

R14_fiq

寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。


2 6 1 arm11

2.6.1 ARM状态下的寄存器组织

寄存器R13在ARM指令中常用作堆栈指针,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。

而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针。


4558463

堆栈指针寄存器R13(SP)

寄存器R13常作为堆栈指针(SP)。在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都这样使用。但是在Thumb指令集中存在使用R13的指令。


2 6 1 arm12

2.6.1 ARM状态下的寄存器组织

R14也称作子程序链接寄存器(Subroutine Link Register)或链接寄存器LR。

当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份。

其他情况下,R14用作通用寄存器。与之类似,当发生中断或异常时,对应的分组寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用来保存R15的返回值。


4558463

链接寄存器R14(LR)

  • R14为链接寄存器(LR),在结构上有两个特殊功能:

  • 在每种模式下,模式自身的R14版本用于保存子程序返回地址;

  • 当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。


2 6 1 arm13

2.6.1 ARM状态下的寄存器组织

寄存器R14常用在如下的情况:

在每一种运行模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,将PC的当前值拷贝给R14,执行完子程序后,又将R14的值拷贝回PC,即可完成子程序的调用返回。


2 6 1 arm14

2.6.1 ARM状态下的寄存器组织

以上的描述可用指令完成:

(1)执行以下任意一条指令:

MOV PC,LR

BX LR

(2)在子程序入口处使用以下指令将R14存入堆栈:

STMFDSP!,{<Regs>,LR}

对应的,使用以下指令可以完成子程序返回:

LDMFDSP!,{<Regs>,PC}


2 6 1 arm15

2.6.1 ARM状态下的寄存器组织

R14寄存器与子程序调用

程序A

程序B

Lable

Lable

???

BL Lable

地址A

???

R14

操作流程

1.程序A执行过程中调用程序B;

2.程序跳转至标号Lable,执行程序B。同时硬件将“BL Lable”指令的下一条指令所在地址存入R14;

MOV PC,LR

R14(地址A)

3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;


2 6 1 arm16

R14寄存器与异常发生

2.6.1 ARM状态下的寄存器组织

异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序调用类似,都是由硬件完成的。区别在于有些异常有一个小常量的偏移。


2 6 1 arm17

R14寄存器注意要点

2.6.1 ARM状态下的寄存器组织

当发生异常嵌套时,这些异常之间可能会发生冲突。

例如:如果用户在用户模式下执行程序时发生了IRQ中断,用户模式寄存器不会被破坏。但是如果允许在IRQ模式下的中断处理程序重新使能IRQ中断,并且发生了嵌套的IRQ中断时,外部中断处理程序保存在R14_irq中的任何值都将被嵌套中断的返回地址所覆盖。


2 6 1 arm18

R14寄存器注意要点

2.6.1 ARM状态下的寄存器组织

用户模式下的程序

IRQ模式下的程序A

A

B

...

地址A

X

R14

R14_irq

3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;

1.执行用户模式下的程序;

2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;

a

return

地址A

未被破坏


2 6 1 arm19

R14寄存器注意要点

2.6.1 ARM状态下的寄存器组织

用户模式下的程序

IRQ模式下的程序A

IRQ模式下的程序B

A

A

B

B

...

...

地址A

地址B

X

X

R14

R14_irq

3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;

2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;

1.执行用户模式下的程序;

4. 如果在IRQ处理程序中打开IRQ中断,并且再次发生IRQ中断,或者调用子程序;

5. 硬件将返回地址保存在R14_irq寄存器中,原来保存的返回地址将被覆盖,造成错误;

6. 在程序B返回到程序A,然后在返回到用户模式下被中断的程序时,发生错误,将不能正确返回;

解决办法是确保R14的对应版本在发生中断嵌套时不再保存任何有意义的值(将R14入栈),或者切换到其它处理器模式下。

a

a

return

return

return

地址A

地址B

未被破坏

被破坏


2 6 1 arm20

2.6.1 ARM状态下的寄存器组织

4.程序计数器PC

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

在ARM状态下,位[1:0]为0,位[31:2]用于保存PC;

在Thumb状态下,位[0]为0,位[31:1]用于保存PC;

由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节。


4558463

程序计数器R15(PC)

寄存器R15常作为程序计数器(PC )。

R15虽然也可用作通用寄存器,但一般不这么使用,因为对R15的使用有一些特殊的限制,当违反了这些限制时,程序的执行结果是未知的。


4558463

程序计数器R15(PC)

寄存器CPSR为程序状态寄存器,在异常模式中,另外一个寄存器“程序状态保存寄存器(SPSR)”可以被访问。每种异常都有自己的SPSR,在因为异常事件而进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。


2 6 2 thumb

2.6.2 Thumb状态下的寄存器组织

Thumb状态寄存器集是ARM状态集的子集,程序员可以直接访问的寄存器为:

8个通用寄存器R0~R7;

程序计数器(PC);

堆栈指针(SP);

链接寄存器(LR);

有条件访问程序状态寄存器( CPSR)。


2 6 2 thumb1

2.6.2 Thumb状态下的寄存器组织

寄存器类别

寄存器在汇编中的名称

各模式下实际访问的寄存器

用户

系统

管理

中止

未定义

中断

快中断

通用寄存器和程序计数器

R0(a1)

R0

R1(a2)

R1

R2(a3)

R2

R3(a4)

R3

R4(v1)

R4

R5(v2)

R5

R6(v3)

R6

R7(v4,wr)

R7

SP

R13

R13_svc

R13_abt

R13_und

R13_irq

R13_fiq

LR

R14

R14_svc

R14_abt

R14_und

R14_irq

R14_fiq

PC

R15

状态寄存器

CPSR

CPSR

注意:括号内为ATPCS中寄存器的命名,可以使用RN汇编伪指令将寄存器定义多个名字。其中ADS1.2的汇编程序直接支持这些名称,但注意a1~a4,v1~v4必须用小写。


2 6 2 thumb2

2.6.2 Thumb状态下的寄存器组织

寄存器类别

寄存器在汇编中的名称

各模式下实际访问的寄存器

用户

系统

管理

中止

未定义

中断

快中断

通用寄存器和程序计数器

R0(a1)

R0

R0

R1(a2)

R1

R1

R2(a3)

R2

R2

R3(a4)

R3

R3

R4(v1)

R4

R4

R5(v2)

R5

R5

R6(v3)

R6

R6

R7(v4,wr)

R7

R7

SP

R13

R13_svc

R13_abt

R13_und

R13_irq

R13_fiq

LR

R14

R14_svc

R14_abt

R14_und

R14_irq

R14_fiq

PC

R15

状态寄存器

CPSR

CPSR

在汇编语言中寄存器R0~R7为保存数据或地址值的通用寄存器。对于任何处理器模式,它们中的每一个都对应于相同的32为物理寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊的用途,并且可用于任何使用通用寄存器的指令。


4558463

寄存器类别

寄存器在汇编中的名称

各模式下实际访问的寄存器

用户

系统

管理

中止

未定义

中断

快中断

通用寄存器和程序计数器

R0(a1)

R0

R1(a2)

R1

R2(a3)

R2

R3(a4)

R3

R4(v1)

R4

R5(v2)

R5

R6(v3)

R6

R7(v4,wr)

R7

SP

R13

R13_svc

R13_abt

R13_und

R13_irq

R13_fiq

R13

R13_svc

R13_abt

R13_und

R13_irq

R13_fiq

LR

R14

R14_svc

R14_abt

R14_und

R14_irq

R14_fiq

PC

R15

状态寄存器

CPSR

CPSR

Thumb状态下的堆栈指针寄存器(SP)

堆栈指针SP对应ARM状态的寄存器R13。每个异常模式都有其自身的SP分组版本,SP通常指向各异常模式所专用的堆栈。

注意:在发生异常时,处理器自动进入ARM状态。


4558463

寄存器类别

寄存器在汇编中的名称

各模式下实际访问的寄存器

用户

系统

管理

中止

未定义

中断

快中断

通用寄存器和程序计数器

R0(a1)

R0

R1(a2)

R1

R2(a3)

R2

R3(a4)

R3

R4(v1)

R4

R5(v2)

R5

R6(v3)

R6

R7(v4,wr)

R7

SP

R13

R13_svc

R13_abt

R13_und

R13_irq

R13_fiq

LR

R14

R14_svc

R14_abt

R14_und

R14_irq

R14_fiq

R14

R14_svc

R14_abt

R14_und

R14_irq

R14_fiq

PC

R15

状态寄存器

CPSR

CPSR

Thumb状态下的链接寄存器R14(LR)

链接寄存器LR对应ARM状态寄存器R14,在结构上有两个特殊功能,详见“ARM状态下的链接寄存器LR”。

注意:在发生异常时,处理器自动进入ARM状态。


2 6 2 thumb3

在Thumb状态中访问高寄存器

2.6.2 Thumb状态下的寄存器组织

在Thumb状态中,高寄存器(R8~R15)不是标准寄存器集的一部分。汇编语言程序员对它们的访问受到限制,但可以将它们用于快速暂存。

可以使用MOV、CMP和ADD指令对高寄存器操作。


2 6 2 thumb4

2.6.2 Thumb状态下的寄存器组织

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

Thumb状态R0~R7与ARM状态R0~R7相同;

Thumb状态CPSR和SPSR与ARM状态CPSR和SPSR相同;

Thumb状态SP映射到ARM状态R13;

Thumb状态LR映射到ARM状态R14;

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


4558463

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

堆栈指针

(R13)

连接寄存器

(R14)

程序计数器

(R15)

Thumb状态寄存器在ARM状态寄存器上的映射

低寄存器

高寄存器


2 6 3

程序状态寄存器—CPSR(1)+SPSR(5)

2.6.3 程序状态寄存器

CPSR反映了当前处理器的状态:

  • 4个条件代码标志;

  • 2个中断控制位;

  • 5个对当前处理器模式进行编码的位;

  • 1个指示当前执行指令的工作状态位;

  • 保留位。

每个异常模式带有一个备份程序状态寄存器,用于保存在异常事件发生之前的CPSR;CPSR和SPSR通过特殊指令进行访问。

SPSR:备份程序状态字,保存异常事件发

   生之前的CPSR.


2 6 31

2.6.3 程序状态寄存器

N

Z

C

V

. . .

I

F

T

M4

M3

M2

M1

M0

31 30 29 28 27 26 8 7 6 5 4 3 2 1 0

当进行加法运算,并且最高位产生进位时C=1,否则C=0。

 当进行减法运算,并且最高位产生借位时C=0,否则C=1。

 对于移位操作指令,C为从最高位最后移出的值,其它指令C通常不变;

大多数“数值处理指令”可以选择是否影响条件代码标志位(指令带S后缀);但有些指令执行总是影响条件代码标志。

所有ARM指令都可按条件来执行,而Thumb指令中只有分支指令可按条件执行。

 当进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V通常不变。

运算结果的最高位反映在该标志位。对于有符号二进制补码,结果为负数时N=1,结果为正数或零时N=0;

CPSR寄存器的格式

条件代码标志

保留

控制位

指令结果为0时Z=1(表示比较结果“相等”),否则Z=0;

N

Z

C

V

I

F

T

溢出标志

保留位被保留将来使用。为了提高程序的可移植性,当改变CPSR标志和控制位时,请不要改变这些保留位。另外,请确保您程序的运行不受保留位的值影响,因为将来的处理器可能会将这些位设置为1或者0。

进位或借位扩展

模式位

状态位

FIQ禁止

负或小于

IRQ禁止


4558463

CPSR模式位设置表

注意:不是所有模式位的组合都定义了有效的处理器模式,如果使用了错误的设置,将引起一个无法恢复的错误。


2 7 exceptions

2.7 异常(Exceptions)

当正常的程序执行流程发生暂时的停止时,称之为异常。

例如处理一个外部的中断请求。在处理异常之前,当前处理器的状态必须保留,这样当异常处理完成之后,当前程序可以继续执行。

处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。

ARM体系结构中的异常,与8位/16位体系结构的中断有很大的相似之处,但异常与中断的概念并不完全等同。


2 7 1 arm

2.7.1 ARM体系结构所支持的异常类型

2.7.2 异常优先级


2 7 2

2.7.2 异常优先级

当多个异常同时发生时,ARM9处理器将按照异常的优先级高低顺序处理,异常优先级由高到低的排列次序如表所示。

优先级降低


2 7 3

2.7.3 异常的响应及返回

异常发生会使得正常的程序流程被暂时停止,例如ARM9处理器响应IRQ异常。

处理器进入异常处理程序前,应该保存其当前的状态,以便当异常处理程序完成后,处理器能回到原来程序的断点处继续执行。


2 7 31

2.7.3 异常的响应及返回

对异常的响应

(1)将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。

若异常是从ARM状态进入,LR寄存器中保存的是下一条指令的地址(当前PC+4或PC+8,与异常的类型有关);

若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量,这样,异常处理程序就不需要确定异常是从何种状态进入的。


2 7 32

2.7.3 异常的响应及返回

(2)将CPSR复制到相应的SPSR中。

(3)根据异常类型,强制设置CPSR的运行模式位。

(4)强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处,同时设置中断禁止位,以禁止中断发生。

注意:如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。


2 7 33

异常返回

异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:

⑴将连接寄存器LR的值减去相应的偏移量后送到PC中。

⑵将SPSR复制回CPSR中。

⑶若在进入异常处理时设置了中断禁止位,要在此清除。

注意:恢复CPSR的动作会将T、F和I位自动恢复为异常发生前的值。

2.7.3 异常的响应及返回


2 7 34

2.7.3 异常的响应及返回

表2-14总结了进入异常处理时保存在相应R14中的PC值,及在退出异常处理时推荐使用的指令。


2 7 4

2.7.4 应用程序中的异常处理

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


4558463

系统模式

IRQ模式

程序

程序A

IRQ服务程序

Jump

寄存器组

LR

LR_sys

LR_irq

PC

N

Z

C

V

. . .

I

F

T

MOD

CPSR

?

?

?

?

?

?

?

?

?

?

?

?

. . .

. . .

. . .

0

0

1

?

?

?

1

0

1

SYS

SYS

IRQ

SPSR

SPSR_irq

图示进入异常过程

2. 用户程序运行时发生IRQ中断,硬件完成以下动作:

1. 程序在系统模式下运行用户程序,假定当前处理器状态为Thumb状态、允许IRQ中断;

  • 将CPSR寄存器内容存入IRQ模式的SPSR寄存器

  • 置位I位(禁止IRQ中断)

  • 清零T位(进入ARM状态)

  • 设置MOD位,切换处理器模式至IRQ模式

BackAddr

JumpAddr

  • 将下一条指令的地址存入IRQ模式的LR寄存器

  • 将跳转地址存入PC,实现跳转

“?”表示对该位不关心


4558463

系统模式

IRQ模式

程序

程序A

IRQ服务程序

Jump

寄存器组

LR

LR_sys

LR_irq

PC

N

Z

C

V

. . .

I

F

T

MOD

CPSR

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

. . .

. . .

. . .

. . .

0

1

0

0

?

?

?

?

1

0

1

1

IRQ

SYS

SYS

SYS

SPSR

SPSR_irq

图示退出异常过程

在异常处理结束后,异常处理程序完成以下动作:

  • 将SPSR寄存器的值复制回CPSR寄存器;

  • 将LR寄存的值减去一个常量后复制到PC寄存器,跳转到被中断的用户程序。

return

BackAddr

BackAddr-4

JumpAddr

“?”表示对该位不关心


  • Login