参考:Cotex-M3 权威指南

1. 寄存器

image.png
image.png

  1. mrs // 用来读取特殊寄存器的值
  2. msr // 用来写入特殊寄存器的值

1.1 程序状态寄存器

image.png

1.2 PRIMASK, FAULTMASK 和 BASEPRI

image.png

1.3 控制寄存器

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

2.操作模式

Cortex‐M3 支持 2 个模式和两个特权等级
image.png
当处理器处在线程状态下时,既可以使用特权级,也可以使用用户级;另一方面, handler模式总是特权级的。在复位后,处理器进入线程模式+特权级。在线程模式+用户级下,对系统控制空间( SCS)的访问将被阻止——该空间包含了配置寄存器 s 以及调试组件的寄存器 s。除此之外,还禁止使用 MSR 访问刚才讲到的特殊功能寄存器——除了 APSR 有例外。谁若是以身试法,则将 fault 伺候。
在特权级下的代码可以通过置位 CONTROL[0]来进入用户级。而不管是任何原因产生了任何异常,处理器都将以特权级来运行其服务例程,异常返回后将回到产生异常之前的特权级。用户级下的代码不能再试图修改 CONTROL[0]来回到特权级。它必须通过一个异常 handler,由那个异常 handler 来修改 CONTROL[0],才能在返回到线程模式后拿到特权级。
image.png

2.1 异常返回值

前面已经讲到,在进入异常服务程序后, LR的值被自动更新为特殊的EXC_RETURN,这是一个高28位全为1的值,只有[3:0]的值有特殊含义,如表9.3所示。当异常服务例程把这个值送往PC时,就会启动处理器的中断返回序列。因为LR的值是由CM3自动设置的,所以只要没有特殊需求,就不要改动它。
image.png
image.png

2.3 挂起pendsv

image.png

2.4 dsb和isb

image.png