/
...
/
/
Cortex-M3权威指南
Search
Try Notion
Cortex-M3权威指南
一.简介
1.总览图
2.寄存器
R[0-7]: 通用寄存器 16位Thum指令,大部分只能访问这一组
R[7-12]: 通用寄存器 32 位Thumb-2指令可以访问所有寄存器
R13(MSP主堆栈指针)/R13(进程堆栈指针PSP)
MSP(SP_main): 复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括括中断服务例程)
PSP(SP_process): 由用户的应用程序代码使用。
堆栈指针的最低两位永远是 0,意味着堆栈总是 4 字节对齐的(可被4整除)
R14: 连接寄存器 当呼叫一个子程序时,由R14存储返回地址
R15: 程序计数寄存器 指向当前的程序地址,如果修改它的值,就能改变程序的执行流(高阶技巧)
特殊寄存器
xPSR: (ALU相关)
记录 ALU 标志(0 标志,进位标志,负数标志,溢出标志)
执行状态
以及当前正服务的中断号
PRIMASK/FAULTMASK/BASEPRI: 中断屏蔽
PRIMASK: 除能(禁止)所有中断
FAULTMASK: 除能所有的 fault,NMI 依然不受影响,而且被除能的 faults 会“上访”
BASEPRI: 除能所有优先级不高于某个具体数值的中断。\
CONTROL: 定义特权状态 和 使用哪个队长指针
3.操作模式/特权状态
两种操作模式 两种特权级别
处理者模式(handler mode) 和 线程模式(thread mode)
引入目的: 仅是用于区别普通应用程序的代码和异常服务例程 的代码—包括中断服务例程的代码
特权级 和 用户级
引入目的: 这可以提供一种存储器访问的保护机制
在特权级下,程序可以访问所有范围的存储器(除MPU保护区外)
用户级的程序不能简单地试图改写 CONTROL 寄存器就回到特权级
具体使用
在 CM3 运行主应用程序时(线程模式),既可以使用特权级,也可以使用用户级
但是异常服务例程必须在特权级下执行
复位后,处理器默认进入线程模式,特权极访问
用户态申请