本文参考资料来自《ARM Cortex-M3与Cortex-M4 权威指南》
Cortex-M4 处理器基于ARMv7-M架构,发布时,架构中又额外增加了新的指令和特性,改进后的架构也被称为ARMv7E-M
编程模型
操作模式和状态
操作状态:
- 调试状态:当处理器被暂停后(触发断点等),进入调试状态并停止指令执行
- Thumb状态:处理器执行代码则处于此状态(由于Cortex-M处理器不支持ARM指令集,所以ARM状态不存在)
操作模式:
- 处理模式:执行中断服务程序(ISR)等异常处理。在处理模式下处理器总是具有特权访问等级。
- 线程模式:执行普通的应用程序代码时,处理器可处于特权访问等级,也可以处于非特权访问等级
操作模式和状态:
寄存器
Cortex-m4处理器的寄存器组中有16个寄存器,其中13个为32位通用目的寄存器,其他3个有特殊用途
- R0~R12:通用寄存器,初始值未定义; R0~R7被称作低寄存器(16位指令只能访问低寄存器); R8~R12被称作高寄存器
- R13,栈指针(SP):通过PUSH和POP操作存储的访问;物理上存在两个栈指针:主栈指针(MSP,默认栈指针)和进程栈指针(PSP,只用于线程模式);对于一般程序,两个寄存器只会有一个可见
- R14,链接寄存器(LR):用于函数或子程序调用时返回地址的保存;函数或子程序结束时,程序控制可以通过将LR的数值加载到PC中返回调用程序并继续执行
- R15,程序计数器(PC):可读可写的寄存器,读操作返回当前指令地址加4(三级流水线),写操作会引起跳转;PC永远下一条要取指的指令地址
特殊寄存器
通过MSR和MRS等特殊寄存器访问指令来操作特殊寄存器
MRS<reg>, <special_reg> ; 将特殊寄存器读入寄存器
MSR<special_reg>, <reg> ; 写入特殊寄存器
1. 程序状态寄存器:
程序状态寄存器包括:应用PSR(APSR); 执行PSR(EPSR); 中断PSR(IPSR)
MRS r0, PSR ; 读组合程序状态字
MSR PSR, r0 ; 写组合程序状态字
MRS r0, APSR ; 将标志状态读入R0
MRS r0, IPSR ; 读取异常/中断状态
MSR APSR, r0 ; 写标志状态