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,