关于ARM架构
文章目录
ARM处理器的运行模式
其中Monitor模式是Cortex-A特有的安全模式
Cortex-A多了一种工作模式:monitor
- usr 用户模式: 非特权模式,大部分应用程序运行在这个模式下
- fiq 快中断模式: 高优先级的中断
- irq 普通中断模式: 低优先级的中断
- svc 超级用户模式(管理模式): 软中断和复位
- abort 中止模式: 当存取异常
读取指令中止
读取数据中止 - undef 未定义指令模式: 执行到一个cpu不能识别的指令,当一个高版本的指令(cortex-a)运行到低版本的cpu(arm7)上是,可能会发生未定义指令异常
- sytem 系统模式: 特权模式,os处在系统模式下
- monitor 安全模式: 为安全而扩展出
处理器模式可以通过软件进行控制切换,也可以通过外部中断或异常处理过程切换,大多数用户程序运行在用户模式下,这时应用程序不能访问一些受操作系统保护的系统资源,应用程序也不能直接进行处理器模式的切换。需要切换时,应用程序产生异常处理,在异常处理中进行处理器模式切换。
ARM寄存器介绍
ARM处理器有37个寄存器,
由于Cotex-A多了一种monitor工作模式,所以又多了三个寄存器(R13_mon,R14_mon,SPSR_mon),Cortex-A系列有40个寄存器
cortex-a的寄存器个数
1. system和usr公用一组寄存器
2. r0-r7 一组 ,8种模式公用一组 8
3. r8-r12 2组,fiq私有一组,其余7种公用一组 2*5
4. r13(sp) 7组 7
5. r14(lr) 7组 7
6. r15(pc) 1组 1
7. cpsr 1组 1
8. spsr 6组 6
Cotex-A 寄存器一共有40个寄存器
r0 ~ r7 所有工作模式共用
r8 ~ r12 除去FIQ模式,其它工作模式共用
r13 ~ r14 均单独使用
r15 所有工作模式共用
通用寄存器
r0 -r11 一般用途
lp(r12) 保存栈指针
sp(r13) 栈指针 用来指向一个可以使用的内存
lr(r14) 链接寄存器,用来保存pc的值
pc(r15) 程序计数器,用来记录程序执行的位置
cpsr 当前程序状态寄存器,用来记录cpu运行的状态
spsr 保存程序状态寄存器
ARM数据类型
ARM采用32位架构
ARM约定:
Byte(字节) 8bits
Halfword(半字) 16bits
Word(字) 32bits
Doubleword(双字) 64bits (Cortex-A处理器特有)
ARM指令集
大部分ARM core提供:
ARM指令集(32-bit)
Thumb指令集(16-bit)
ARM11处理器:
ARM指令集(32-bit)
16位和32位的Thumb-2指令集
Cotex-A 处理器
ARM指令集(32-bit)
16位和32位的Thumb-EE指令集
Jazelle cores支持Java bytecode
当处理器执行在Jazelle状态:
所有指令8bits宽
处理器执行word存取,一次取4条指令
AMBA (arm微控制器总线架构)
AMBA:
AHB 高速总线 cpu core ,DMA,SDRAM,SRAM,FLASH,APB BRIDGE
APB 外设总线 GPIO,INTERRUPT,I2C,SPI,TIMER,ADC,USB
ARM处理器的后缀名
T: 支持thumb 指令
D: 支持片上DEBUG
M: 64位的长乘法
I: 嵌入式ICE逻辑单元
S: TDMI的缩写
E: 支持DSP指令
J: java字节码F: 硬件浮点
N 运算结果为负
Z 运算结果为0
C 进位,借位
V 溢出位
处理器的状态 4种
T=0;J = 1 处理器处于Jazelle状态
T = 0;J=0; 处理器处于 ARM 状态
T = 1;J=0 处理器处于 Thumb 状态
T = 1;J=1 处理器处于 ThumbEE 状态
处理器模式 8种
10000 User mode; 10001 FIQ mode; 10011 SVC mode;
10111 Abort mode; 11011 Undfined mode; 11111 System mode;
10110 Monitor mode; 10010 IRQ
异常处理
1. 8种模式
7种特权,1种非特权(usr)
2. 7种特权:
2种 非异常的特权模式: system,mon
5种 异常的特权模式: fiq,irq,svc,undef,abort
3. 异常处理: 异常源一旦发生,cpu所做的处理,这个过程是cpu自动完成的,不需要代码实现
异常处理实现需要7步,4大3小
4. 异常返回:
恢复pc
恢复cpsr
处理器五种异常工作模式与七种异常源的对应关系
异常向量表基地址:
arm7,ARM9,ARM10只可以在0(低端向量表)地址和0xffff0000(高端向量表)arm11,cortex-a
可以在任意设置异常向量表的基地址,由cp15当中的c12寄存器控制异常向量表的基地址