Cortex-M3是一个32位处理器内核,采用的是哈佛结构。
在CM3中小端模式和大端模式都是支持的。
Banked R13:两个堆栈寄存器。任意时刻只能使用其中的一个。
堆栈指针的最低两位永远是0,这就意味着堆栈总是4字节对齐的。
凡是打断程序执行的事件,都被称为异常(exception)。
除了外部中断外,因各种错误产生的fault,以及不可屏蔽中断发生时,都会打断程序的执行,这些情况都称为异常。
(在不严格的上下文中,异常和中断可以混用)
Cortex-M3支持两种处理器的操作模式,还支持两级特权操作
handler mode 和 thread mode
正两个模式是用于区别普通应用程序和异常应用程序(包括异常服务例程)的代码
特权级和用户级,提供一种存储器访问的保护机制,这是一个基本的安全模型
thread mode可以使用特权级,也可以使用用户级
handler mode只能使用特权级
复位后,处理器默认进入thread mode,特权级访问 p15
用户级到特权级的唯一途径就是异常
中断控制器--嵌套向量中断控制器NVIC(Nested Vectored Interrupt Controller)
R15程序计数器PC
因为CM3内部使用连指令流水线,读PC时返回的值是当前指令的地址+4K
优先级号越大,优先级越低
屏蔽效果:FAULTMASK>PRIMASK>BASEPRI (在特权级下才允许被改)
控制寄存器(CONTROL)
有两个用途,一是用于定义特权级别,二是选择当前使用的堆栈指针K
Cortex-M3使用的是“向下生长的满栈”模型
P17 图2.6 存储器映射分成若干区域
P41 图3.15 初始MSP及PC初始化的一个范例
AHB内部私有外设总线,NVIC、FPB、DWT、ITM
APB外部私有外设总线,制造商添加的片上APB外设等等
NVIC所处的区域叫SCS(系统控制空间),它还包括SysTick、MPU以及代码调试用的寄存器
P83 图5.1 Cortex-M3预订义的存储器映射
P84 图5.2 系统控制空间(SCS)
P98 M3中的大端模式和ARM7相比在AHB上的数据处理有差别、
CM3是在复位的时候确定用哪种端模式,在运行中不能更改。
指令预取永远使用小端模式,在配置控制存储器空间的访问也永远使用小端模式(包括NVIC、FPB等)
外部私有总线地址区0xE0000000~0xE00FFFFF也永远使用小端模式。
P110
在Cortex-M3中编号1~15的是系统异常,大于等于16的都是外部中断,除连异常的优先级被定死了之外,其他异常的优先级都是可编程的。
NVIC的挂起状态寄存器可以保存中断请求信号,这样即使等到响应该中断的时候请求信号没有连,还是会执行这个中断的,这样就不会错失中断请求。
由于芯片厂商会在设计时对优先级进行裁减,生活衣优先级都是以MSB对齐的,即高位对齐。
P113 图7.2 使用4个位来表达优先级的情况(图有误,注意)
向量表是可以重定位的。但是,必须先求出系统中共有多少个向量,再把这个数字向上“圆整”到2的整数次幂,而且起始地址必须对齐到后者的边界上
例如:一共有32个中断,则共有32+16=48个向量,圆整后为64,因此向量表定位的地址必须被64*4=256整除。
在CM3中小端模式和大端模式都是支持的。
Banked R13:两个堆栈寄存器。任意时刻只能使用其中的一个。
堆栈指针的最低两位永远是0,这就意味着堆栈总是4字节对齐的。
凡是打断程序执行的事件,都被称为异常(exception)。
除了外部中断外,因各种错误产生的fault,以及不可屏蔽中断发生时,都会打断程序的执行,这些情况都称为异常。
(在不严格的上下文中,异常和中断可以混用)
Cortex-M3支持两种处理器的操作模式,还支持两级特权操作
handler mode 和 thread mode
正两个模式是用于区别普通应用程序和异常应用程序(包括异常服务例程)的代码
特权级和用户级,提供一种存储器访问的保护机制,这是一个基本的安全模型
thread mode可以使用特权级,也可以使用用户级
handler mode只能使用特权级
复位后,处理器默认进入thread mode,特权级访问 p15
用户级到特权级的唯一途径就是异常
中断控制器--嵌套向量中断控制器NVIC(Nested Vectored Interrupt Controller)
R15程序计数器PC
因为CM3内部使用连指令流水线,读PC时返回的值是当前指令的地址+4K
优先级号越大,优先级越低
屏蔽效果:FAULTMASK>PRIMASK>BASEPRI (在特权级下才允许被改)
控制寄存器(CONTROL)
有两个用途,一是用于定义特权级别,二是选择当前使用的堆栈指针K
Cortex-M3使用的是“向下生长的满栈”模型
P17 图2.6 存储器映射分成若干区域
P41 图3.15 初始MSP及PC初始化的一个范例
AHB内部私有外设总线,NVIC、FPB、DWT、ITM
APB外部私有外设总线,制造商添加的片上APB外设等等
NVIC所处的区域叫SCS(系统控制空间),它还包括SysTick、MPU以及代码调试用的寄存器
P83 图5.1 Cortex-M3预订义的存储器映射
P84 图5.2 系统控制空间(SCS)
P98 M3中的大端模式和ARM7相比在AHB上的数据处理有差别、
CM3是在复位的时候确定用哪种端模式,在运行中不能更改。
指令预取永远使用小端模式,在配置控制存储器空间的访问也永远使用小端模式(包括NVIC、FPB等)
外部私有总线地址区0xE0000000~0xE00FFFFF也永远使用小端模式。
P110
在Cortex-M3中编号1~15的是系统异常,大于等于16的都是外部中断,除连异常的优先级被定死了之外,其他异常的优先级都是可编程的。
NVIC的挂起状态寄存器可以保存中断请求信号,这样即使等到响应该中断的时候请求信号没有连,还是会执行这个中断的,这样就不会错失中断请求。
由于芯片厂商会在设计时对优先级进行裁减,生活衣优先级都是以MSB对齐的,即高位对齐。
P113 图7.2 使用4个位来表达优先级的情况(图有误,注意)
向量表是可以重定位的。但是,必须先求出系统中共有多少个向量,再把这个数字向上“圆整”到2的整数次幂,而且起始地址必须对齐到后者的边界上
例如:一共有32个中断,则共有32+16=48个向量,圆整后为64,因此向量表定位的地址必须被64*4=256整除。