首页 理论教育 ARMCortex-M3的STM系列单片机特殊功能寄存器

ARMCortex-M3的STM系列单片机特殊功能寄存器

时间:2023-11-23 理论教育 版权反馈
【摘要】:Cortex-M3中的特殊功能寄存器包括:①程序状态寄存器组;②中断屏蔽寄存器组;③控制寄存器。特殊功能寄存器只能被专用的MSR和MRS指令访问,而且它们也没有对应的存储器地址。表3.2Cortex-M3的屏蔽寄存器组续表对于执行时间要求很高的关键任务而言,通过PRIMASK和BASEPRI暂时关闭中断是非常重要的。表3.3Cortex-M3的CONTROL寄存器在Cortex-M3的处理者模式中,CONTROL[1]总是0。图3.14中断前后处理器模式和特权级别

ARMCortex-M3的STM系列单片机特殊功能寄存器

Cortex-M3中的特殊功能寄存器包括:

①程序状态寄存器组(PSRs或xPSR);

②中断屏蔽寄存器组(PRIMASK、FAULTMASK、BASEPRI);

③控制寄存器(CONTROL)。

特殊功能寄存器只能被专用的MSR和MRS指令访问,而且它们也没有对应的存储器地址

MRS<gp_reg>,<special_reg>;读特殊功能寄存器的值到通用寄存器

MSR<special_reg>,<gp_reg>;写通用寄存器的值到特殊功能寄存器

1)程序状态寄存器组

程序状态寄存器在其内部又被分为3个子状态寄存器:

①应用程序PSR(APSR);

②中断号PSR(IPSR);

③执行PSR(EPSR)。

通过MRS/MSR指令,这3个PSRs既可以单独访问,也可以组合访问(2个组合、3个组合都可以)。当使用三合一的方式访问时,应使用寄存器名“xPSR”或者“PSR”。Cortex-M3中的程序状态寄存器如图3.10所示,合体后的程序状态寄存器(xPSR)如图3.11所示。

图3.10 Cortex-M3中的程序状态寄存器

图3.11 合体后的程序状态寄存器(xPSR)

2)中断屏蔽寄存器组

中断屏蔽寄存器组包括PRIMASK、FAULTMASK和BASEPRI三个寄存器,这三个寄存器用于控制异常的使能和除能,见表3.2。

表3.2 Cortex-M3的屏蔽寄存器组

续表

(www.xing528.com)

对于执行时间要求很高的关键任务而言,通过PRIMASK和BASEPRI暂时关闭中断是非常重要的。而FAULTMASK则可以被操作系统用于暂时关闭错误处理机能,这种处理在某个任务崩溃时可能需要。

要访问PRIMASK、FAULTMASK以及BASEPRI,同样要使用MRS/MSR指令,如:

只有在特权级下,才允许访问这三个寄存器。

3)控制寄存器

控制寄存器用于定义特权级别,还用于选择当前使用哪个堆栈指针,见表3.3。

表3.3 Cortex-M3的CONTROL寄存器

在Cortex-M3的处理者模式中,CONTROL[1]总是0。在线程模式中则可以为0或1。仅当处于特权级的线程模式下,此位才可写,其他场合下禁止写此位。CONTROL[0]也仅在特权级下操作时才允许写该位,一旦进入了用户级,唯一返回特权级的途径,就是触发一个异常(如软中断),进入处理者模式,再由服务例程改写该位。

CONTROL寄存器也是通过MRS和MSR指令来操作的:

MRS R0,CONTROL

MSR CONTROL,R0

在复位后,处理器进入“线程模式+特权级”。在特权级下的代码可以通过置位CONTROL[0]来进入用户级。而不管是任何原因产生了任何异常,处理器都将以特权级来运行其服务例程,如果CONTROL[0]没被修改,异常返回后将回到产生异常之前的特权级别。用户级下的代码不能再试图修改CONTROL[0]来回到特权级。它必须通过一个异常,由那个异常来清零CONTROL[0],才能在返回到线程模式后进入特权级。用户级的代码如想进入特权级,通常使用一条“系统服务调用指令”(SVC)来触发“SVC异常”,该异常的服务例程可以选择修改CONTROL[0]。特权级和处理器模式的改变图如图3.12所示。

图3.12 特权级和处理器模式的改变图

如前所述,特权等级和堆栈指针的选择均由CONTROL负责。当CONTROL[0]=0时,在异常处理的始末,只发生了处理器模式的转换,如图3.13所示。

图3.13 中断前后处理器模式的转换

但若CONTROL[0]=1(线程模式+用户级),则在中断响应的始末,处理器模式和特权级别都要发生变化,如图3.14所示。

图3.14 中断前后处理器模式和特权级别

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈