文章目录
前言
本篇文章记录着Cortex-M3的学习记录,并用自己能理解的话进行一遍梳理
一、Cortex-M3处理器和基于Cortex-M3的MCU对比
Cortex-M3处理器是MCU的CPU,基于Cortex-M3的完整MCU还需要额外的部件,在获得了Cortex-M3授权后,芯片制造厂家才能在自己的半导体设计中使用Cortex-M3,在此基础上添加存储器、外设、IO等部件最终封装成我们使用的芯片。
二、Cortex-M3的组成框架
下图是根据《Cortex-M3权威指南》翻译而成,对照着英文文档进行翻译一遍有助于框架的理解
三、寄存器组
Cortex-M3内核中包含R0~R15共16个寄存器组,分为通用寄存器、堆栈寄存器、链接寄存器、程序寄存器
1.通用寄存器
通用寄存器是用来进行数据操作的寄存器,绝大多数 16 位 Thumb 指令只能访问 R0‐R7,而 32 位 Thumb‐2 指令可以访问所有寄存器。所以通用寄存器划分了两个部分
2.堆栈指针(SP)
Cortex-M3的栈指针分成了主栈指针(MSP)和进程栈指针(PSP),使用过程中每次只能使用一个。
2.1.主堆栈指针
复位默认的堆栈指针,供操作系统内核和异常中断使用。
2.2.进程堆栈指针
供用户的应用代码使用
3.链接寄存器(LR)
在调用子程序时,子程序执行完成后返回地址保存在R14这个寄存器中。
arm为了减少访问内存的次数,将返回地址直接保存在寄存器中,这种操作可以提高程序执行效率,因为寄存器的存取速度>内存的存取速度。所以尽量使用寄存器保存中间结果
特殊情况:子程序中也调用了子程序,那么第二级子程序的返回地址应该保存在哪里呢?
答:在大于一级子程序时,将前一级的R14值压到堆栈中,最后一级的子程序返回地址保存在R14中
4.程序计数器(PC)
程序计数器存储着当前执行程序的地址,通过修改PC的值可以对程序流进行控制
5.特殊功能寄存器
Cortex-M3在内核中也有一些特殊寄存器,包括:程序状态寄存器(PSRs)、中断屏蔽寄存器组(PRIMASK, FAULTMASK, BASEPRI)、控制寄存器(CONTROL)
这些特殊功能寄存器只能被特殊指令调用,在处理普通数据时不能使用。
他们的功能如下图所示
寄存器 | 功能 |
---|---|
xPSR | 给ALU(算数逻辑单元)提供标志位(0标志,进位标志、负数标志、溢出标志),执行标志、以及当前的中断服务号 |
PRIMASK | Disable除去不可屏蔽中断(NMI) 和硬件中断HardFault以外的其他中断 |
FAULTMASK | Disable出不可屏蔽中断以外的中断 |
BASEPRI | Disable所有中断优先级低于某个优先级的中断 |
CONTROL | 定义特权模式的状态和选择堆栈指针 |
总结
以上对Cortex-M3内核中的寄存器组知识点进行了总结梳理,具体的细节请参考《Cortex-M3权威指南》