Cortex-M3 内部寄存器

本文详细介绍了Cortex-M3微控制器的内部寄存器组,包括通用寄存器R0-R12、堆栈指针R13、链接寄存器R14、程序计数器R15等的功能及使用方式,并阐述了特殊功能寄存器如程序状态寄存器、中断屏蔽寄存器等的操作方法。


Cortex-M3 内部寄存器

寄存器组

R0-R12

R0-R12,通用寄存器;
R0-R12都是32位通用寄存器,用于数据操作;但是绝大多数16位Thumb指令只能访问R0-R7,而32位Thumb指令可以访问所有寄存器;

R13

R13,SP,堆栈指针;
Cortex-M3有两个堆栈指针,它们是Banked,任一时刻只能使用其中一个;当引用R13/SP时,引用的是当前正在使用的那一个,另一个必须使用MRS/MSR指令来访问;
- 主堆栈指针MSP:复位后缺省堆栈指针,用于操作系统内核操作和异常处理例程;
- 进程堆栈指针PSP:由用户的应用程序代码使用;
堆栈指针的最低两位永远为0,这意味着堆栈总是4字节对齐的;

R14

R14,LR,链接寄存器;
当调用子程序时,由R14存储返回地址;如果子程序多于1级,则需要把前一级的R14压入堆栈;

R15

R15,PC,程序计数器寄存器
读PC值,返回的是当前指令地址+4;如果修改它,就能改变程序的执行流;
在分支时,无论直接写PC,还是使用分支指令,都必须保证加载到PC的数值是奇数(LSB=1),用以表明是在Thumb状态下执行,如果为0,将产生fault;

特殊功能寄存器

特殊功能寄存器必须通过MRS/MSR指令操作;

程序状态寄存器

程序状态寄存器(PSRs或xPSR)在内部可分为3个子状态寄存器:
- 应用程序PSR(APSR)
- 中断号PSR(IPSR)
- 执行PSR(EPSR)
通过MRS/MSR指令,这3个PSR可以单独访问,也可组合访问:
- PSR = APSR + IPSR + EPSR
- IAPSR = IPSR + APSR
- IEPSR = IPSR + EPSR
- EAPSR = EPSR + APSR

313029282726-252423-2019-1615-1098-0
APSRNZCVQ
IPSRException Number
EPSRICI/ITTICI/IT

中断屏蔽寄存器

PRIMASK

这个寄存器只有一个位,置1后,将关闭所有可屏蔽中断的异常,只剩NMI和硬fault,默认值为0;
操作指令:

MRS R0, PRIMASK        ; R0=PRIMASK
MSR PRIMASK, R0        ; PRIMASK=R0
CPSID I                ; PRIMASK=0
CPSIE I                ; PRIMASK=1
 
  • 1
  • 2
  • 3
  • 4

FAULTMASK

这个寄存器也只有一位,置1后,屏蔽除NMI外的所有异常(包括硬fault),默认值为0;
操作指令:

MRS R0, FAULTMASK       ; R0=FAULTMASK
MSR FAULTMASK, R0       ; FAULTMASK=R0
CPSID F                 ; FAULTMASK=0
CPSIE F                 ; FAULTMASK=1
 
  • 1
  • 2
  • 3
  • 4

BASEPRI

这个寄存器有9位,它定义了被屏蔽优先级的阈值;当它被设定为某个值后,所有优先级号大于等于此值得中断都被关闭,若设为0,则不关闭任何中断,默认值为0;

MRS R0, BASEPRI       ; R0=BASEPRI
MSR BASEPRI, R0       ; BASEPRI=R0
 
  • 1
  • 2

控制寄存器(CONTROL)


  • CONTROL[1]:为0表示选择MSP,为1表示选择PSP;
  • CONTROL[0]:为0表示特权级的线程模式,为1表示用户级的线程模式;




对于本篇博客,有同学(MK_chen)指出
CPSID I ; PRIMASK=0
CPSIE I ; PRIMASK=1
解释刚好反了。
对此,博主也不知道,反正是转载的.
转自sagitta_zl的博客:http://blog.youkuaiyun.com/sagitta_zl/article/details/51318507

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值