您的位置:首页 > 其它

Cortex-M3 内部寄存器

2016-05-04 22:18 495 查看

寄存器组

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


FAULTMASK

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

操作指令:

MRS R0, FAULTMASK       ; R0=FAULTMASK
MSR FAULTMASK, R0       ; FAULTMASK=R0
CPSID F                 ; FAULTMASK=0
CPSIE F                 ; FAULTMASK=1


BASEPRI

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

MRS R0, BASEPRI       ; R0=BASEPRI
MSR BASEPRI, R0       ; BASEPRI=R0


控制寄存器(CONTROL)

CONTROL[1]:为0表示选择MSP,为1表示选择PSP;

CONTROL[0]:为0表示特权级的线程模式,为1表示用户级的线程模式;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cortex-m3