参考内容:Cortex-M7编程手册
文章目录
- 软件执行的处理器模式和权限级别
- 栈Stacks
- 核心寄存器Core registers
-
- 通用寄存器General-purpose registers
- 链接寄存器Link register
- 程序计数器 Program counter
- 程序状态寄存器Program status register
- 应用程序状态寄存器Application program status register(APSR)
- 中断程序状态寄存器 Interrupt program status register(IPSR)
- 执行程序状态寄存器Execution program status register(EPSR)
- 优先级掩码寄存器Priority mask register(PRIMASK )
- 故障掩码寄存器Fault mask register(FAULTMASK)
- 基本优先级掩码寄存器Base priority mask register(BASEPRI)
- 控制寄存器CONTROL register
软件执行的处理器模式和权限级别
Processor mode and privilege levels for software execution
处理器模式
线程模式Thread mode:执行应用程序软件。处理器在 reset 中退出时进入 Thread 模式。
异常模式Handler mode:处理异常。处理器在完成所有异常处理后返回到 Thread 模式。
软件执行的权限级别
非特权Unprivileged:
• 使用 MSR 和 MRS 指令对系统寄存器的访问受到限制,并且不能使用 CPS 指令来屏蔽中断。
• 无法访问系统计时器、NVIC 或系统控制块。
• 可能限制了对内存或外围设备的访问。
非特权软件在非特权级别执行。
特权Privileged:该软件可以使用所有指令并可以访问所有资源。特权软件在特权级别执行。
在 Thread 模式下,CONTROL 寄存器决定软件执行是特权还是无特权。
在 Handler 模式下,软件执行始终具有特权。
只有特权软件才能写入 CONTROL 寄存器,以更改在 Thread 模式下执行软件的权限级别。非特权软件可以使用 SVC 指令进行监督程序调用,以将控制权转移给特权软件
栈Stacks
处理器使用完整的降序栈。
处理器实现了两个栈,主栈和进程栈,每个栈都有一个指针保存在独立的寄存器中,就是有两个栈指针MSP和PSP
堆栈指针 (SP) 是寄存器 R13
在 Thread 模式下,CONTROL 寄存器的 bit[1] 表示要使用的堆栈指针:
• 0 = 主堆栈指针 (MSP)。这是复位值。
• 1 = 进程堆栈指针 (PSP)
复位时,处理器使用地址 0x00000000 的值加载 MSP
在 Thread 模式下,CONTROL 寄存器决定处理器是使用主堆栈还是进程堆栈
在 Handler 模式下,处理器始终使用主堆栈。
总结:
处理器模式 | 用于 | 特权等级 | 使用栈指针 |
---|