中断屏蔽寄存器:分为三组,分别是 PRIMASK、FAULTMASK、BASEPRI。
PRIMASK 为片上外设总中断开关,该寄存器只有位 0 有效,当该位为 0 是响应所有外设中断;当该 位为 1 时屏蔽所有片上外设中断。
FAULTMASK 寄存器管理系统错误的总开关,该寄存器中有位 0 有效,当该位为 0 时,响应所有的异 常;为 1 屏蔽所有的异常。
BASEPRI 寄存器用来屏蔽优先级等于和小于某一个中断数值的寄存器。 控制寄存器:CONTROL 有两个作用,其一用于定义处理器特权级别,其二用于选择堆栈指针,如表 3.3 所示。
表 2.3 CONTROL 寄存器
CONTROL[0]:异常情况下,处理器总是处于特权模式,CONTROL[0]位总是为 0;在线程模式情况下 (非异常情况),处理器可以工作在特权级也可工作在用户级,该位可为 0 或 1。特权级下所有的资源 都可以访问,而用户级下被限制的资源不能访问,比如 MPU 被限制的资源。 CONTROL[1]:为 0 时,只使用 MSP,此时用户程序和异常共享同一个堆栈,处理器复位后默认的也 是该模式。为 1 时,用户应用程序使用进程堆栈 PSP,而中断任然得使用主堆栈 MSP。这种双堆栈机制, 特别适合在带有 OS(操作系统)的环境下使用,只要 OS 内核在特权级下执行,而用户应用程序在用户 模式下执行,就可很好的将代码隔离互不影响。
2.3 处理器操作模式
ARM Cortex-M3支持2个模式和两个特权等级。如图2.4所示,在嵌入式系统应用程序中,程序代
码 涉及异常服务程序代码和非异常服务程序代码,这些代码可以工作在处理器特权级也可以工作在用户级 级,但有区别。当处理器处在线程模式下时,既可以使用特权级,也可以使用用户级;另一方面,handler 模式总是特权级的。在复位后,处理器进入线程模式+特权级。