第二章 嵌入式处理器(5)

2019-03-10 19:19

?ARM处理器运行模式可以通过软件进行切换,也可以通过外部中断或者异常处理过程进行切换。

? 用户模式下模式切换是当应用程序发生异常中断时,处理器进入相应的异常模式。此时,处理器自动改变CPSR的工作模式标志字段M[4:0]的值。在每一种异常模式下都有一组寄存器,供相应的异常处理程序使用,这样就可以保证在进入异常模式时,用户模式下的寄存器内容不被破坏。

? 系统模式(sys)并不是通过异常进入的,它和用户模式具有完全一样的寄存器。但是系统模式属于特权模式,可以访问所有的系统资源,也可以直接进行处理器模式切换。它主要供操作系统任务使用。通常操作系统的任务需要访问所有的系统资源,同时该任务仍然使用用户模式的寄存器组,而不是使用异常模式下相应的寄存器组,这样可以保证当异常中断发生时任务状态不被破坏。

异常模式主要用于处理中断和异常。当应用程序发生异常中断时,处理器进入相应的异常模式,每种异常模式都有一组独立的寄存器,供相应的异常处理程序使用。异常模式之间切换可以通过异常中断优先级确定异常模式是否可以嵌套。 模式使用说明:

SVC模式是操作系统内核代码运行的模式,USR模式通常是用户代码运行的模式。处理器一旦进入USR模式,必须通过SWI异常中断才能进入SVC模式调用内核代码的接口。但是,在没有MMU进行内存保护的场合,USR模式也能够访问到SVC模式的内存空间,因此,使用USR模式隔离用户级代码没有意义。

IRQ和FIQ模式是处理器收到中断信号后强制处理器进入的模式,用于中断处理。SYS模式用于嵌套中断处理。ABT和UND模式是真正意义上的“异常”,一旦出现就要进入对应的异常中断服务子程序进行处理。 §2.3.3 ARM微处理器的数据存储格式

? ARM体系结构所支持的最大寻址空间为4GB(232字节),存储器是以字节为最小存储单元编址的,数据是以字节为最小单位存放于存储器中。

? ARM体系结构把存储器看作是从0地址开始的字节的线性组合。从第0字节到第3字节放置第一个存储的32位字数据,从第4个字节到第7个字节放置第二个存储的32

21

位字数据,依次排列。?ARM体系结构可以用2种方法在存储器中存储字数据,称之为大端格式和小端格式 。

1、ARM体系结构的存储器数据存储格式—大端格式

?在这种格式中,32位字数据的高字节存储在低地址字节单元中,而32位字数据的低字节则存放在高地址字节单元中。

图xx 数据存储大端格式 2、ARM体系结构的存储器数据存储格式—小端格式

? 与大端存储格式相反,在小端存储格式中,低地址单元中存放的是32位字数据的低字节,高地址单元存放的是32位字数据的高字节。小端存储格式通常是ARM处理器的缺省格式。

0x0000 0004 0x0000 0000 0x0000 0008 0x0000 0008 0x0000 0004 0x0000 0000

22

图xx 数据存储小端格式

嵌入式系统的数据存储大端格式和小端格式,可以通过处理器外部引脚硬件连线或存储器控制器的控制寄存器配置来实现小端存储系统或大端存储系统。 §2.3.4 ARM处理器的指令长度及数据类型

? ARM微处理器的指令长度可以是32位(在ARM状态下),也可以为16位(在Thumb状态下)。?ARM微处理器中支持字节(8位)、半字(16位)、字(32位)三种数据类型,其中,字需要4字节对齐(地址的低两位为0)、半字需要2字节对齐(地址的最低位为0),对数据访问要遵守对齐规则。 注意:非对齐的存储访问操作

? 在ARM中,如果存储单元的地址没有遵守对齐规则,则称为非对齐的存储访问操作。?包括“非对齐的指令预取操作”和“ 非对齐的数据访问操作”。非对齐的存储访问操作会引起不可预知的错误。 (1)非对齐的指令预取操作

? 当处理器处于ARM工作状态期间,如果写入到寄存器PC中的值是非字对齐的,要么指令执行的结果不可预知,要么地址值中最低两位被忽略。?当处理器处于Thumb状态期间,如果写入到寄存器PC中的值是非半字对齐的,要么指令执行的结果不可预知,要么地址值中最低位被忽略。 (2)非对齐的数据访问操作

? 对于Load/Store操作,如果是非对齐的数据访问操作,系统给出地址的三种可能结果: 一是忽略字单元地址的低两位的值,即访问地址为(address AND 0XFFFFFFFC)的字单元;二是忽略半字单元地址的最低位的值,即访问地址为(address AND 0XFFFFFFFE)的半字单元; 三是忽略操作由存储系统实现,即访问地址值原封不动地送到存储系统,结果不可预知。

? 当发生非对齐的数据访问时,到底采用上述三种方法中的哪一种,是由各指令指定的。

§2.3.5 ARM处理器的寄存器组织

在进行汇编语言程序设计中,大量使用寄存器进行运算。ARM微处理器共有37个32位寄存器,按其在用户编程中的功能可划分为通用寄存器和状态寄存器,其中通用

23

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

一、ARM状态下的寄存器组织

ARM处理器工作在ARM状态下时,在寄存器的物理分配上,寄存器被安排成部分重叠的组。每种处理器运行模式使用的是与自己模式对应的寄存器组,下图列出了每种模式下可见的通用寄存器组。 ?1、通用寄存器:

通用寄存器包括R0~R15,共有31个寄存器,可以分为三类:分别是与运行模式无关的未分组寄存器R0~R7、与运行模式有关的分组寄存器R8~R14和与运行模式无关的程序计数器PC(R15) 。ARM工作状态下的寄存器组织结构如图xx: (1)未分组寄存器R0~R7

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

24

图xx ARM工作状态下的寄存器组织结构

(2) 分组寄存器R8~R14

? 对于ARM处理器的不同运行模式有独立的物理寄存器组称之为分组寄存器,每次所访问的物理寄存器与处理器当前的运行模式有关。分组寄存器R8~R14(共有22个寄存器)可分为两组:R8~R12, R13~R14。

分组寄存器R8~R12(有2组物理寄存器)

? 分组寄存器R8~R12:每个寄存器符号对应两个不同的物理寄存器(共有10个物理上的寄存器),即R8~R12只有在快速中断模式下有物理上对应的寄存器,其他六种模式下有相同的R8~R12寄存器。

?当使用fiq模式时,访问寄存器R8_fiq~R12_fiq;

?当使用除fiq模式以外的其他模式时,访问寄存器R8_usr~R12_usr。

分组寄存器R13~R14(有6组物理寄存器)

? 分组寄存器R13、R14:每个寄存器对应6个对应的物理寄存器(共有12个物理上的寄存器), 用户模式与系统模式下访问对应物理寄存器R13_usr(SP)、R14_usr(LR),其他5种不同的运行模式下访问各自对应的物理寄存器。

? ARM处理器不同运行模式下访问的寄存器采用以下的记号来区分不同的物理寄存器: ?R13_ ?R14_

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

说明:R13和R14寄存器除了可以用作普通寄存器外,还有特殊的用途。R13用作堆栈指示器(SP),R14用作子程序连接寄存器(LR)。 ●堆栈指针SP(Stack Pointer)—R13

25


第二章 嵌入式处理器(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高职教育动态

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: