文档视界 最新最全的文档下载
当前位置:文档视界 › ARM处理器的工作模式

ARM处理器的工作模式

S3C44B0X中文数据手册

S3C44B0X中文数据手册 (1)

2.ARM处理器工作模式 (2)

2.1处理器工作状态 (2)

2.2状态切换 (2)

2.2数据类型 (2)

2.3存储空间的格式 (2)

2.4操作模式 (3)

2.5寄存器 (4)

2.6程序状态寄存器 (5)

2.7异常 (6)

杭州立宇泰电子有限公司https://www.docsj.com/doc/fd402284.html,

2.ARM处理器工作模式

S3C44B0X采用了非常先进的ARM7TDMI内核,它是由ARM(Advanced RISC Machines)公司研制的。

2.1处理器工作状态

从程序员的角度上看,ARM7TDMI内核可以工作在下面两种工作状态的一种下:

· ARM状态:此时执行32位字对齐的ARM指令。

· THUMB状态:此时执行16位半字对齐的THUMB指令。在这种状态下,PC采用第1位来选择一个字中的哪个半字。

注意:这两种状态的转换不影响处理器状态和寄存器的内容。

2.2状态切换

进入Thumb状态

进入Thumb状态,可以通过执行BX指令,同时操作数寄存器的状态位(0位)置1来实现。

当从异常(IRQ, FIQ, UNDEF, ABORT, SWI等)返回时,也会自动进入Thumb状态,只要进入异常处理前处理器处于Thumb状态。

进入ARM状态

进入ARM状态,可以通过执行BX指令,并且操作数寄存器的状态位(0位)清零来实现。

当处理器进入异常(IRQ, FIQ, RESET, UNDEF, ABORT, SWI等)。这时,PC的值保存在异常模式下的link寄存器重,并从异常向量地址处开始执行异常处理程序。

2.2数据类型

ARM7TDMI支持字节(byte,8-bit),半字(16-bit)和字(32-bit)数据类型。字必须按照4字节排列,半字必须按照2字节排列。

2.3存储空间的格式

ARM7TDMI将存器空间视为一个从0开始由字节组成的线性集合,字节0到3中保存了第一个字,字节4到7保存第二个字,依此类推。ARM7TDMI对存储的字,可以按照小端(little endian)或大端(big endian)的方式对待:

杭州立宇泰电子有限公司https://www.docsj.com/doc/fd402284.html,

杭州立宇泰电子有限公司 https://www.docsj.com/doc/fd402284.html, 大端格式:

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

如图3-4所示:

图3-4 以大端格式存储字数据

小端格式:

与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址

存放的是字数据的高字节。如图3-5所示:

图3-5 以小端格式存储字数据

2.4操作模式

ARM7TDMI 内核支持7种操作模式:

?

用户模式(usr 模式),运行应用程序的普通模式。 ? 超级用户模式(SVC 模式),主要用于 SWI (软件中断)和 OS (操作系统)。这个

模式有额外的特权,允许你进一步控制处理器。

? 中断模式(IRQ 模式),用作通用中断处理。这个模式也是有特权的。导致 IRQ 的设备有键盘、定时器、串行口、硬盘、软盘、等等……

? 快速中断模式(FIQ 模式),用来处理外设发起的快速中断。用于支持特殊的数据传送与通道处理。这个模式是有特权的。

?

未定义模式(und 模式):当执行了未定义指令时进入该模式。

IRQ 和 FIQ 之间的区别是对于 FIQ 你必须尽快处理事情并离开这个模式。IRQ 可以被 FIQ 所中断但 IRQ 不能中断 FIQ。为了使 FIQ 更快,所以有更多的影子寄存器。FIQ 不能调用 SWI。FIQ 还必须禁用中断。如果一个 FIQ 例程必须重新启用中断,则它太慢了,应该是 IRQ 而不是 FIQ。

可用软件控制操作模式的切换,同时外部的中断和异常处理也会导致操作模式的切换。

绝大多数的用户应用程序运行在用户模式。

当系统响应中断或异常、或访问受保护的系统资源时,处理器会进入特权模式(除用户模式以外的所有模式)。

2.5寄存器

ARMTIDMI共具有37个32位的寄存器:31个通用寄存器,6个状态寄存器,但并不是所有的寄存器都能总是被访问到。在某一时刻寄存器能否访问,由处理器的当前工作状态和操作模式决定。

根据微处理器内核的当前工作状态,可分别访问ARM状态寄存器集和Thumb状态寄存器集。ARM状态寄存器集包含16个可以直接访问的寄存器:R0~R15。除R15以外,其余的寄存器为通用寄存器,可用于存放地址或数据值。R16寄存器是当前程序状态寄存器CPSR,用于保存状态信息。详细的说明如下:

? 寄存器 0 到寄存器 7 是通用寄存器并可以用做任何目的。

? 寄存器 8 到 12 是通用寄存器,但是在切换到 FIQ 模式的时候,使用它们的影子(bank)寄存器。

? 寄存器 13 典型的用做 OS 栈指针,但可被用做一个通用寄存器。这是一个操作系统问题,不是一个处理器问题,所以如果你不使用栈,只要你以后恢复它,你可以在你的代码中自由的使用它。每个处理器模式都有这个寄存器的影子寄存器。

? 寄存器 14 专职持有返回点的地址,在系统执行一条“跳转并连接”(BL)指令的时候,R14将接收到一个R15的拷贝。其它的时候,它可以用作一个通用寄存器。

相应的在其它模式下的影子寄存器,也同样用来保存在中断或异常发生时,或是在中断和异常中的BL指令执行时,R15的返回值。

? 寄存器 15 是程序计数器(PC)。在ARM状态下,R15的bits[1:0]为0,bits[31:2]保存了PC的值。在Thumb状态下,bits[31:1]保存了PC值。

? 寄存器16是CPSR(当前程序状态寄存器),用来保存当前代码标志和当前处理器模式位。

Thumb状态寄存器集是ARM状态寄存器集的一个子集。可以访问的寄存器有:8个通用寄存器R0~R7,程序计数器PC、堆栈指针寄存器SP、连接寄存器LR和当前程序状态寄存器CPSR。在每一种特权模式下,都有对应的分组堆栈指针寄存器SP、连接寄存器LR和备份的程序状态寄存器SPSR。

Thumb状态寄存器集与ARM状态寄存器集的对应关系如下:

杭州立宇泰电子有限公司https://www.docsj.com/doc/fd402284.html,

- Thumb状态下R0~R7寄存器与ARM状态下R0~R7寄存器是相同的。

- Thumb状态下的CPSR和SPSRs与ARM状态下的CPSR和SPSRs是相同的。

- Thumb状态下的SP、LR和PC直接对应ARM状态寄存器R13、R14和R15。

在Thumb状态下,寄存器R8~R15不属于标准寄存器集的一部分,但在必要的情况下,用户可以通过汇编语言程序访问他们,用作快速的临时存储将单元。

2.6程序状态寄存器

ARM7TDMI包含一个当前程序状态寄存器(CPSR)和五个备份的程序状态寄存器(SPSRs)。备份的程序状态寄存器用来进行异常处理,这些寄存器的功能包括: · 保存ALU当前操作的有关信息

· 控制中断的允许和禁止

· 设置处理器的运行模式

程序状态寄存器组成如图3-6所示:

图3-6 程序状态寄存器格式

条件码标志(Condition Code Flags)

N、Z、C、V均为条件码标志位。它们的内容根据算术或逻辑运算的结果所改变,并且用来作为一些指令是否的运行的检测条件。

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

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

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

标志位含义

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

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

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

─ 加法运算(包括比较指令CMN):当运算结果产生了进位时(无符号数溢出),C=1,否

则C=0。

─ 减法运算(包括比较指令CMP):当运算时产生了借位(无符号数溢出),C=0,否则C=1。

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

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

杭州立宇泰电子有限公司https://www.docsj.com/doc/fd402284.html,

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

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

示符号位溢出。

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

控制位(Control Bits)

PSR的低8位(包括I、F、T和M[4:0])称为控制位,当发生异常时这些位可以被改变。如果处理器运行特权模式,这些位也可以由程序修改。

○ 中断禁止位I、F:

I=1 禁止IRQ中断;

F=1 禁止FIQ中断。

○ T标志位:该位反映处理器的运行状态。

对于ARM体系结构v5及以上的版本的T系列处理器,当该位为1时,程序运行于Thumb

状态,否则运行于ARM状态。

对于ARM体系结构v5及以上的版本的非T系列处理器,当该位为1时,执行下一条指

令以引起为定义的指令异常;当该位为0时,表示运行于ARM状态。

○ 运行模式位M[4:0]:M0、M1、M2、M3、M4是模式位。这些位决定了处理器的运行模式。具体含义如下表所示:

M[4:0] 处理器模式可访问的寄存器

0b10000 用户模式 PC,CPSR,R0-R14

0b10001 FIQ模式 PC,CPSR, SPSR_fiq,R14_fiq-R8_fiq, R7~R0

0b10010 IRQ模式 PC,CPSR, SPSR_irq,R14_irq,R13_irq,R12~R0

0b10011 管理模式 PC,CPSR, SPSR_svc,R14_svc,R13_svc,,R12~R0,

0b10111 中止模式 PC,CPSR, SPSR_abt,R14_abt,R13_abt, R12~R0,

0b11011 未定义模式 PC,CPSR, SPSR_und,R14_und,R13_und, R12~R0,

0b11111 系统模式 PC,CPSR(ARM v4及以上版本), R14~R0

由上表可知,并不是所有的运行模式位的组合都是有效地,其他的组合结果会导致处理器进入一个不可恢复的状态。

保留位(reserved)

PSR中的其余位为保留位,当改变PSR中的条件码标志位或者控制位时,保留位不要被改变,在程序中也不要使用保留位来存储数据。保留位将用于ARM版本的扩展。

2.7异常

当正常的程序执行流程被中断时,称为产生了异常。例如程序执行转向响应一个外设的中断请求。在优先处理异常时,处理器的当前状态必须保留,以便在异常处理完成之后程序流程能正常返回。并且,多个异常可能会同时发生,这时,它们将按照固定的顺序依次处理。当进入异常状态时,内核应该进行以下动作:

1. 将原来执行的程序的下一条指令地址保存到lr中;

2. 拷贝CPSR到SPSR;

3. 根据发生的异常类型改变CPSR的模式位的值;

4. 令PC的值指向异常处理向量所指的下一条指令。

这时也可能设置中断禁能标志,以防止不可估计的异常嵌套发生。

杭州立宇泰电子有限公司https://www.docsj.com/doc/fd402284.html,

当处理器处于Thumb状态时发生了异常,当PC载入异常矢量所在地址时,它将自动地切换到ARM状态。

当完成异常处理,将推出该状态时,处理器应该进行如下动作:

1. 移出lr,减去相应的偏移量,赋给PC(偏移量的值依据于发生的异常的类型)。

2. 将SPSR拷贝到CPSR;

3. 清除中断禁止标志(如果开始时置位了的话)。

下表列出推荐用来完成第1步的指令:

注意1:这里PC所赋的是BL/SWI等指令所取得的地址,它们在预取指的阶段就被中断了;

2:这里PC所赋的是由于FIQ或IRQ取得了优先权,而没有来得及得到执行的指令地址。

3:这里PC所赋的地址是Load或Store指令的地址,它们在执行时产生了数据的异常中断。

FIQ

FIQ(快速中断请求)异常通常是用来支持数据传输和通道操作的,在ARM状态下,它具有充分的私有(影子)寄存器,用来减少对寄存器存取的需要(从而减少进入中断前的“上下文切换”的工作,即中断前保存寄存器的值,完成后又恢复寄存器)。

FIQ中断是由外部设备通过拉低nFIQ引脚触发的。通过对ISYNC输入引脚的控制,nFIQ可以排除同步或者异步的传输情况。当ISYNC为低电平,nFIQ和nIRQ将被异步地考虑。

无论FIQ异常是发生在ARM或者Thumb状态,FIQ处理程序在离开中断处理时,可以通过执行以下的语句完成:

SUBS PC, R14_fiq,#4

(即PC=R14_fiq-4)

FIQ异常可以通过设置CPSR中的F标志位来禁止(但是在用户模式下是不可能的)。当F标志位被清除,也就是FIQ使能,ARM7TDMI将在每条指令的最后,检测FIQ输入是否为低电平。

IRQ

IRQ(中断请求)是支持普通中断操作的。IRQ比FIQ的优先级低,并且当系统进入FIQ处

杭州立宇泰电子有限公司https://www.docsj.com/doc/fd402284.html,

理中时,IRQ将被屏蔽。IRQ也可以通过设置CPSR中的I标志位来禁止,同样也不能够在用户模式中这样做(只能在特权模式下这样做)。

无论IRQ发生在ARM或者Thumb状态下,退出中断处理时,采用以下语句完成:

SUBS PC,R14_irq,#4

Abort

Abort(异常中断)的产生,说明当前的处理器操作不能够完成。该情况,可以通过ABORT 输入信号来告知处理器。ARM7TDMI在存储器操作周期中检测该异常是否发生。

有两种类型的ABORT异常:

○ 预取指abort:发生在预取指令时;

○ 数据abort:发生在数据操作时。

Abort机制允许要求以页为单位的虚拟存储器系统的实现。在这样一个系统中,处理器可以产生一个任意的地址。当一个地址上的数据不可用,MMU(存储器管理单元)将产生一个abort信号。Abort处理必须辨认出abort的原因,使得要求的数据可用,并重新开始运行那条被abort的指令。这样,应用程序就不需要了解存储空间的大小,也不需要了解异常中断对它的影响。

在完成了对abort异常中断的处理后,通过以下语句退出中断处理:

SUBS PC,R14_abt,#4 ;预取指abort

SUBS PC,R14_abt,#8 ;数据abort

通过执行该语句,就恢复了PC和CPSR,并重试被中断的指令。

SWI

SWI(软件中断指令)用来进入超级用户模式,通常是通过产生SWI来请求特殊的超级用户功能。SWI的处理程序通过执行以下语句,退出异常处理:

MOV PC,R14_svc

通过执行该语句,就恢复了PC和CPSR,并返回到SWI后面的指令上。

注意:上述所称的nFIQ,nIRQ,ISYNC,LOCK,BIGEND和ABORT信号引脚是存在于ARMTDMI内核中。

未定义指令

当ARM7TDMI遇到一个它不能执行的指令,立即调用一个未定义指令陷阱处理程序。这个机制是软件仿真器用来扩展Thumb或ARM指令集用的。

在仿真器指定到失败指令之后,陷阱处理程序应该执行以下的语句:

MOVS PC,R14_und

通过执行该语句,恢复了CPSR,并返回未定义指令的下一条指令的地址。

杭州立宇泰电子有限公司https://www.docsj.com/doc/fd402284.html,

异常中断向量

异常中断的向量地址如下表所示:

异常中断优先级

当几种异常中断同时发生时,处理器根据一个固定的优先级系统来决定处理它们的顺序。 最高有限级:

1. 复位

2. 数据abort;

3. FIQ;

4. IRQ;

5. 预取指abort;

最低优先级:

6.未定义指令,软件中断。

并非所有的异常中断都可能同时发生

未定义指令和软件中断是相互排斥的,因为它们都对应于对当前指令的特殊的(非重叠的)解码方式。

如果一个数据abort和FIQ中断同时发生了,并且此时的FIQ中断是使能的,ARM7TDMI进入到数据abort处理中,并且立即继续进入FIQ向量。从FIQ正常的返回后,数据abort的处理程序才恢复执行。

复位

当nRESET信号为低,ARM7TDMI放弃指令的执行,并从下一个字地址取指。

当nRESET信号为高,ARM7TDMI:

1. 将当前的PC值和CPSR值写入R14_svc和SPSR_svc;

2. 强制M[4:0]为10011(超级用户模式),将CPSR中的I和F位置1,并将T位清零。

3. 强制PC从0X00地址取得下一条指令;

重新开始在ARM状态中执行。

杭州立宇泰电子有限公司https://www.docsj.com/doc/fd402284.html,

杭州立宇泰电子有限公司https://www.docsj.com/doc/fd402284.html,

相关文档