Cortex-M0详解(2)--寄存器

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一共16个32bit寄存器,其中:

R0~R12: 通用寄存器reset后这13个寄存器内的值未定义

    R0~R7: low registers, thumb中大多数指令只能方法low registers

    R8~R12: high registers

SP: 堆栈指针 R13

   物理上有两个堆栈指针:

         MSP: Main SP, reset后使用MSP,MSP的初始化值从向量表中自动加载通过修改control寄存器切换到PSP

                 PSP: Process SP, reset后PSP的值未定义

       PUSH和POP指令操作R13/SP,实际根据Control的设置不同操作MSP或者PSP,只能通过MSR和MRS来直接操作MSP和PSP

                堆栈指针的最后两个bit总是0(4byte对齐),写这两个bit的动作无效。

LR:链接寄存器R14

    LR用于存储子函数的返回地址,在函数返回时将LR加载到PC。

    LR也用于异常/中断函数返回时提供返回机制码。

    通常情况下LR的bit0是0,因为thumb是2字节对齐,不过一些指令需要将bit0置1,指示当前是在thumb状态下。

PC:PC指针R15

因为M0只有thumb状态,因此PC通常是2字节对齐的,但是用汇编的分支指令BX/BXL,为表示要分支到thumb区域,需要将bit0设置为1,否则处理器将尝试切换ARM状态而引起fault exception。

三个特殊寄存器:

xPSR: 状态寄存器将以下三个寄存器的信息集合到一起提供出来

Cortex-M0详解(2)--寄存器_第1张图片

wpsD76D.tmp

APSR: 应用状态

N  负数标志

Z  0标志

C  进/借位标志

V  overflow标志

Cortex-M0详解(2)--寄存器_第2张图片

IPSR: 中断状态

显示当前的中断号

EPSR: 异常状态

T永远为1

PRIMASK:中断屏蔽寄存器

Cortex-M0详解(2)--寄存器_第3张图片

当设置为1时,除NMI和hard fault外其它中断全部屏蔽。

可以被MSR.MRS,CPS指令访问

CONTROL:

Cortex-M0详解(2)--寄存器_第4张图片

将bit1设置为1时选用PSP,0时选用MSP

Cortex-M0详解(2)--寄存器_第5张图片

转载于:https://my.oschina.net/lgl88911/blog/377819

你可能感兴趣的:(Cortex-M0详解(2)--寄存器)