嵌入式处理器分类
目前的嵌入嵌入式处理器按其体系结构不同可分为五大类:ARM(Advance RISC Machine)
MIPS
POWER PC
X86
SH系列
ARM体系结构的版本(V1-V6)
每一个ARM处理器都有一个特定的指令集架构ISA(Instruction Set Architecture),每一个ISA版本可以有多种 不同的处理器实现。ARM ISA至今已有六种不同版本V1-V6:
V1-V2寻址空间都为64M;
V3寻址空间扩充到32位(4G),增加了当前程序状态寄存器CPSR(Current Program Status Register)和程序 状态保存(备份)寄存器SPSR(Saved Program Status Register)以便处理异常;
V4为目前应用最广的体系结构,在V3的基础上增加了16位的Thumb指令集;
V5-V6。
ARM处理器的数据类型
字(Word):ARM体系结构中字长为32位,其它8/16位处理器结构中字长一般为16位;半字(Half-Word):16位;
字节(Byte):8位。
ARM微处理器的工作状态
ARM微处理器一般有两种工作状态,并可能两种状态之间切换。1ARM状态:此时处理器执行32位的字对齐的ARM指令;
2Thumb状态:此时处理器执行16位的半字对齐的Thumb指令。
ARM处理器的工作模式
1User:非特权模式,也是正常程序执行的模式,大部分任务在这种模式下执行;2FIQ:当一个高优先级的中断(fast)产生时会进入这种模式,用于高速数据传输和通道处理;
3IRQ:当一个低优先级的中断(normal)产生时会进入这种模式,用于通常的中断处理;
4Supervisor:当复位或软中断指令执行时会进入这种模式,是供操作系统使用的一种保护模式;
5Abort:当存取产生异常时进入这种模式,用于虚拟存储及存储保护;
6Undef:当执行未定义指令时会进入这种模式,用于软件仿真硬件的协处理器;
7System:使用和User模式相同寄存器组的特权模式,用于完成特权级的操作系统任务。
其中2-6为异常模式(Exception Mode),2-7为特权(Privileged Mode)模式。
模式的改变方法有:软件控制(通过软件改变CPSR的模式位,外部中断,异常处理。通常在User模式下不 能访问受保护的系统资源,一般不能改变模式,异常发生时可能导致模式改变。
ARM寄存器描述
ARM有37个32位长的寄存器,其中:1个用作PC(Program Counter);
1个用作CPSR(Current Program Status Register);
5个用作SPSR(Saved Program Status Register);
30个通用寄存器(General-purpose registers includes program counter)。
当前的处理器工作模式决定那些寄存器可以操作,任何模式都可以存取:
相应的R0-R12的子集;
相应的R13(The Stack Pointer,堆栈指针寄存器)SP;
相应的R14(The Subroutine Link Register,子程序连接寄存器)LR;
相应的R15(The Program Counter);
相应的CPSR(Current Program Status Register)。
特权模式(除System外)还可以存取SPSR(Saved Program Status Register)。
通用寄存器包括R0-R15,可分为三类:
未分组寄存器(R0-R7);
分组寄存器(R8-R14);
程序计数器PC(R15)。
寄存器R15用作PC,由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,R15-程序计数器总 是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址加上8个字节。
寄存器R16用作CPSR,可在任何CPU工作模式下被访问,它包括条件标志位,中断禁止位,当前处理器模 式标志位以及其它一些控件和状态位。
每一种CPU工作模式下都有一个专用的物理状态寄存器SPRS(备份程序状态寄存器),当异常发 生时SPRS用于保存当前CPRS的值,当从异常中退出时可由SPSR恢复CPSR。
程序状态寄存器
31 | 30 | 29 | 28 | 27 | 26位到第8位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||
N | Z | C | V | Q | reserved for future expansion | I | F | T | M | M | M | M | M |
其中各位的具体含义如下:
条件码标志的具体含义
N(negative):当用两个用补码表示的带符号数进行运算时,N=1表示运算结果为负,N=0表示结果为 正或0;
Z(Zero):Z=1表示运算结果为0,Z=1表示运算结果为非零;
C(Carry:进位/借位):有4种方法设置C值
加法运算(包括比较指令CMN),当运算结果产生进位时C=1,否则C=0;
减法运算(包括比较指令CMP),当运算结果产生了借位(无符号溢出)时C=0,否则C=1;
对移位操作,C值为移位结果的最后一位;
对于其它非加减法指令,C值通常不变。
V(Overflow):有两种方法设置V值
对于加减法运算,当操作数和运算结果为二进制的补码形式表示的带符号数时,V=1表示符号位溢 出;对于其它非加减法运算指令,C值通常不变。
Q:有ARM V5及以上版本E系列处理器中,用Q位表示增强的DSP运算指令是否发生了溢出,在其它版 本的处理器中,Q标志位无效。
中断禁止位I,F:
I=1,禁止IRQ中断;
F=1,禁止FRQ中断。
T标志位反映处理器的运行状态
对ARM体系结构V5及以上的版本的T系列处理器,T=1表示运行于Thumb状态,T=0表示运行于 ARM状态。
模式位M[4:0]的值,处理器模式,可访问的寄存器
M[4:0]=0b10000,用户模式(User),R0-R14、PC、CPSR;
M[4:0]=0b10001,FIQ模式,R0-R7、R8_fiq-R14_fiq、PC、CPSR、SPSR_fiq;
M[4:0]=0b10010,IRQ模式,R0-R12、R13_irq、R14_irq、PC、CPSR、SPSR_irq;
M[4:0]=0b10011,Supervisor模式,R0-R12、R13_svc、R14_svc、PC、CPSR、SPSR_svc;
M[4:0]=0b10111,Abort中止模式,R0-R12、R13_abt、R14_abt、PC、CPSR、SPSR_abt;
M[4:0]=0b11011,Undel未定义模式,R0-R12、R13_und、R14_und、PC、CPSR、SPSR_und。
ARM Register organization
| ||||||||||||
| ||||||||||||
User | System | SuperVisor | Abort | Undefined | Interrupt | Fast Interrupt | ||||||
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 | ||||||
PC | PC | PC | PC | PC | PC | PC | ||||||
CPSR | CPSR | CPSR | CPSR | CPSR | CPSR | CPSR | ||||||
SPSR_svc | SPSR_abt | SPSR_und | SPSR_irq | SPSR_fiq | ||||||||
图中阴影部分表示分组寄存器 | ||||||||||||