首页 > 编程知识 正文

四组工作寄存器是指,cortexm3工作模式几种

时间:2023-05-05 13:52:37 阅读:120441 作者:4548

通用寄存器组:

CM3有通用寄存器R0-R15和几个特殊功能寄存器。 R0-R12是最“通用目的”,但大多数16位指令只能使用R0-R7 (低位存储体寄存器),32位Thumb-2指令可以访问所有通用寄存器。 特殊功能寄存器中有预先定义的功能,必须通过专用指令访问。

ROR12为32位的通用寄存器;

大多数16位指令只能使用R0-R7 (低位存储区寄存器),但32位Thumb-2指令可以访问所有通用寄存器。

R0-R7也称为行组寄存器。 所有命令都可以访问。 这些字长都是32位,复位后的初始值无法预料;

R8-R12也称为高组寄存器。 这是因为只有16位Thumb指令可以访问,32位thumb-2指令不受限制。 这些也是32位的字长,无法预料复位后的初始值。

R13位堆栈指针寄存器SP,R13上有两个堆栈指针,随时只能使用一个

在异常处理例程(包括主堆栈指针(MSP )操作系统内核和中断服务例程)中使用的重置后默认堆栈指针

流程堆栈指针(PSP ) :用于用户的APP应用程序代码。 (堆栈指针的最低两位始终为0。 也就是说,堆栈总是以4字节对齐。 他们的地址必须是0x 4,0x 8,0xc,……)

堆栈指针用于访问堆栈,访问堆栈需要两个指令,推送核心POP,推送和POP指令默认使用SP。 通常,在进入子程序之后,第一件事是首先将寄存器的值推送至堆栈,并在子程序结束之前对推送的寄存器进行POP。 其汇编语言语法如下例所示;

推送{ r0 }; *--R13(=R0。 R13是长*的指针POP {R0}; R0=*R13 PUSH和POP也可以一次操作多个寄存器,如下所示。

subroutine_1PUSH {R0-R7,R12,R14}; 寄存器清单的保存…; 执行处理POP {R0-R7、R12、R14}; 恢复寄存器列表BX R14; 主调函数R14:连接寄存器LR;

当跳至子程序时,R14、即LR寄存器存储返回地址; 组件的使用方法如下

主要; 主程序…BL function1; 使用“分支并连接”命令调用function1; PC=function1且LR=main的下一个指令地址…Function1…; 函数1的代码BX LR; 函数返回(function1要使用LR,必须在使用前推送; 否则程序为——译注(R15:程序计数寄存器;

也称为PC指针寄存器,用于指向以下指令的地址,确保程序有序运行: CM3内部使用指令流水线,读取PC时返回的值为当前指令的地址4。 例如:

0x1000: MOV R0,PC; R0=0x1004 特殊功能寄存器必须通过专用的指令来访问

状态寄存器xPSR

记录ALU标志(0标志、进位标志、负标志、溢出标志)、执行状态以及当前服务的中断号,程序状态寄存器在其内部又分为三个子状态寄存器。

1.APP应用程序PSR(apsr ) )。

2 .中断号码PSR(ipsr ) )。

3 .执行3.PSR(epsr )

儒家黄蜂/MSR指令允许单独访问或组合访问这三个寄存器(也可以是两个组合、三个组合)。 如下图所示。

中断屏蔽寄存器

有PRIMASK、FAULTMASK和BASEPRI三个寄存器,用于控制异常的使能和禁用,仅在特权级别允许访问这三个寄存器。

1.PRIMASK

这是一个单位寄存器。 将其设置为1后,将消除所有可屏蔽的异常,只有NMI和硬件故障才能响应。 的默认值为0,表示没有中断

2 .故障掩码

这是一个只有1位的寄存器。 当它是1的时候,只有NMI能响应,其他所有的异常,甚至硬故障,都保持沉默。 默认值也为0,表示没有异常。

3 .基本pri

这个寄存器最多有9位。 由表示优先顺序的位数决定。 定义屏蔽优先级阈值。 如果设置为值,则关闭优先级编号大于或等于此值的所有中断。 优先级编号越大,优先级越低。 但是,如果设置为0,则不关闭任何中断,0也是默认值。

要访问PRIMASK、FAULTMASK和BASEPRI,请按如下方式使用儒家黄蜂/MSR命令:

儒教黄蜂R0,BASEPRI; 从BASEPRI到R0读取儒教的黄蜂R0,FAULTMASK; 儒雅般的黄蜂R0,PRIMASK; 上MSR BASEPRI,R0; 从R0向BASEPRI写入MSR故障掩码,R0; 上MSR PRIMASK,R0; 上控制寄存器(CONTROL)

控制寄存器有两种用途,一种用于定义权限级别,另一种用于选择当前使用哪个堆栈指针。 两个位行使这两个功能

控制[1]选择堆栈指针:

0=选择主堆栈指针MSP (复位后的默认值)

1=选择进程堆栈指针PSP

在Cortex-M3的处理程序模式下,只允许MSP,因此在这种情况下,不能在此位中写1。 控制[1]始终为0。 在线程模式下可以是0或1。

控制[0] :

0=特权级别线程模式

1=用户级线程模式

只有在特权级别操作时才允许写入此位。 一旦进入用户级别,返回特权级别的唯一方法是触发“软”中断并通过服务例程进行重写。 Handler模式始终是特权级别。 控制寄存器也由儒家黄蜂和MSR指令操作:

儒家黄蜂R0、控制MSR控制、R0

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。