Cortex-M3内核之寄存器组


前言

本篇文章记录着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标志,进位标志、负数标志、溢出标志),执行标志、以及当前的中断服务号
PRIMASKDisable除去不可屏蔽中断(NMI) 和硬件中断HardFault以外的其他中断
FAULTMASKDisable出不可屏蔽中断以外的中断
BASEPRIDisable所有中断优先级低于某个优先级的中断
CONTROL定义特权模式的状态和选择堆栈指针

总结

以上对Cortex-M3内核中的寄存器组知识点进行了总结梳理,具体的细节请参考《Cortex-M3权威指南》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值