问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Cortex-M3/M4/M7内核寄存器组详解

创作时间:
作者:
@小白创作中心

Cortex-M3/M4/M7内核寄存器组详解

引用
CSDN
1.
https://m.blog.csdn.net/kevin1499/article/details/137058468

在进行Cortex-M3/M4/M7内核MCU的RTOS开发过程中,"线程切换"是一个常见的操作,而这一操作与内核寄存器R0-R15和特殊功能寄存器密切相关。本文将详细介绍这些寄存器的功能和作用,为学习和使用RTOS打下基础。

1 Cortex-M3/M4/M7内核寄存器组介绍

1.1 R0-R15寄存器总览

Cortex-M3/M4/M7内核均拥有R0-R15这16个寄存器。

(1)R0-R12:通用寄存器

(2)R13:堆栈指针,它包含2个堆栈指针,一个是主堆栈指针(MSP),一个是进程堆栈指针(PSP)。在同一时刻对外表现为主堆栈指针或进程堆栈指针,只有一个能够看到,也就是所谓的“banked”寄存器。

(3)R14:链接寄存器(LR)

(4)R15:程序计数器(PC)

R0-R15的寄存器组可以用下面的图片表示:

1.2 R0-R12通用寄存器

R0-R12寄存器大小均为32位,用来实现最通用的数据操作,例如作为中间变量给目标变量赋值。其中R0-R7又被称为低组寄存器,而R8-R12又被称为高组寄存器。

其中R0-R7能够被绝大多数的16位 Thumb 指令访问,而32位的Thumb-2指令可以访问所有通用寄存器。

1.3 R13堆栈指针寄存器

为了支持操作系统,Cortex-M3/M4/M7内核拥有2个堆栈指针,然而任意时刻对外表现都是其中的1个,这样的寄存器又被称为“banked”寄存器。R13堆栈指针寄存包含以下2个堆栈指针:

(1)主堆栈指针(MSP):MCU复位以后默认使用的堆栈指针,用于操作系统内核及异常(包含中断)处理例程。

(2)进程堆栈指针(PSP):由用户的应用程序代码使用。

注:

堆栈指针的低2位永远是0,因此能够保证堆栈指针永远是4字节对齐的。堆栈指针永远指向栈顶

1.4 R14链接寄存器(LR)

R14链接寄存器作用有以下2个方面:

(1)当我们调用其它函数时,R14链接寄存器被设置为函数返回地址

(2)发生异常或中断时,R14链接寄存器被设置为需要返回的地址

1.5 R15程序计数器(PC)

该寄存器的值永远是下一个执行的指令的地址。如果修改PC的值就能改变程序执行的顺序,实现一些高级操作。

1.6 特殊功能寄存器

Cortex-M3/M4/M7内核除了R0-R15之外还有若干特殊功能寄存器,包括程序状态字寄存器组(PSRS)、中断屏蔽寄存器组(PRIMASK, FAULTMASK, BASEPRI)、控制寄存器(CONTROL)。这些寄存器在RTOS的源码内经常可以看到,比如中断屏蔽寄存器组就常见于临界段的保护。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号