计算机软考嵌入式系统设计师考试知识点(6)
ARM处理器内核的体系结构(工作状态,工作模式,寄存器组织,异常,数据类型与存储格式等)
(1)工作状态
一是ARM状态,二是Thumb指令状态及Thumb-2状态,三是调试状态。
ARM处理器复位后开始执行代码时总是只处于ARM状态,如果需要,可通过下面的方法切换到Thumb状态或Thumb-2状态
ARM状态切换到Thumb指令状态:通过BX指令,将操作数寄存器的最低位设置为1即可。如果R0[0]=1,则执行BX R0指令将进入Thumb状态
状Thumb态切换到ARM状态:通过BX指令,将操作数寄存器的最低位设置为0即可。如果R0[0]=0,则执行BX R0指令将进入ARM状态。
(2)工作模式(7种)
工作模式 |
功能说明 |
可访问的寄存器 |
CPSR[M4:M0] |
用户模User |
程序正常执行工作模式 |
PC,R14-R0,CPSR |
10000 |
快速中断模式FIQ |
处理高速中断,用于高速数据传输或通道处理 |
PC,R14_fiq-R8_fiq, R7-R0,CPSR,SPSR_fiq |
10001 |
外部中断模式IRQ |
用于普通中断处理 |
PC,R14_irq-R13_irq, R12-R0,CPSR,SPSR_irq |
10010 |
管理模式 SVC |
操作系统的保护模式,处理软中断SWI |
PC,R14_svc-R13_svc, R12-R0,CPSR,SPSR_svc |
10011 |
中止模式 ABT |
处理存储器故障,实现虚拟存储器和存储器保护 |
PC,R14_abt-R13_abt, R12-R0,CPSR,SPSR_abt |
10111 |
未定义指令模式UND |
处理为定义的指令陷阱,用于支持硬件协处理器仿真 |
PC,R14_und-R13_und, R12-R0,CPSR,SPSR_und |
11011 |
系统模SYS |
运行特权及的操作系统任务 |
PC, R14-R0,CPSR |
11111 |
(3)寄存器组织
ARM处理器共有37种寄存器,包括31个通用寄存器(含PC)和6个状态寄存器。
无论何种模式,R15均作为PC使用;CPSR为当前程序状态寄存器;R7-R0为公用的通用寄存器。所有通用寄存器均为32位结构。
程序状态寄存器的格式:
31 30 29 28 27 26……8 7 6 5 4 3 2 1 0
N |
Z |
C |
V |
Q |
状态保留 |
I |
F |
T |
M4 |
M3 |
M2 |
M1 |
M0 |
条件码标志含义如下:
N为符号标志位,N=1为负数,N=0为正数。
Z为全0标志位,运算结果为0,则Z=1,否则Z=0;
C为进借位标志,有进/借位时C=1,否则C=0.
V为溢出标志,加减法运算结果溢出时V=1,否则V=0.
Q为增强的DSP运算指令溢出标志,溢出时Q=1,否则Q=0.
控制位含义如下:
I为中断禁止控制位,I=1禁止IRQ中断,I=0,允许中断。
F为禁止快速中断FIQ的控制位,F=1禁止FIQ中断,F=0允许。
T为ARM和Thumb指令切换,T=1时执行Thumb指令,否则执行ARM指令。
M4-M0为模式选择位
(4)存储格式
大端模式:32位数据字的高字节存储在低地址,而数据字的低字节则存放在高地址中。
小端模式:32位数据字的高字节存储在高地址,而数据字的低字节则存放在低地址中。系统复位时,自动默认为小端模式。
例如:一个32位数据字0x12345678,存放在起始地址为0x30001000,则大端模式下0x30001000单元存放0x12,0x30001001单元存放0x34,0x30001002单元存放0x56,0x30001003单元存放0x78;而小端模式下0x30001000单元存放0x78,0x30001001单元存放0x56,0x30001002单元存放0x34,0x30001003单元存放0x12。
(5)数据类型
8位、16位、32位三种数据类型
(6)ARM处理器中MMU和MPU
MMU存储器管理单元(memory management unit)功能:
1)虚拟地址到物理地址映射
2)存储器访问权限受限
3)虚拟存储空间的缓冲特性设置
MPU存储器保护单元(memory protect unit)
(7)异常(7种)
异常类型 |
优先级 |
工作模式 |
异常向量地址 |
复位RESET |
1 |
管理模式 |
0x00000000 |
未定义的指令UND |
6 |
未定义指令中止模式 |
0x00000004 |
软件中断SWI |
6 |
管理模式 |
0x00000008 |
指令预取中止PABT |
5 |
中止模式 |
0x0000000C |
数据访问中止DABT |
2 |
中止模式 |
0x00000008 |
外部中断请求IRQ |
4 |
外部中断模式 |
0x00000010 |
快速中断请求FIQ |
3 |
快速中断模式 |
0x0000001C |