Cortex-M3/M4架构——基本介绍
- 1. 概述
- 2.Cortex-M架构
- 3. Cortex-M3/M4-架构组成部分
- 3.1 编程模型
- 3.1.1 操作模式状态
- 3.1.2 寄存器
- 3.2 存储器系统
- 3.3 异常和中断
- 3.4 复位
- 参考文献
1. 概述
什么是架构?百度百科说软件架构是系统的草图,用来指导软件系统的设计。
我理解,就像公司组织架构一样,根据需求目标,确定整体框架,框架里的每一部分都有各自的职能,部分之间有联系。架构规定了,构成部分,每个部分该做什么事,部分之间如何沟通。
Cortex-M3/M4处理器都是基于ARM-v7架构。
2.Cortex-M架构
Cortex-M架构(架构有的称为体系结构)包括ARM-v6,ARM-v7,ARM-v8和ARM-v8.1,处理器对应的架构如下表。
对比几种架构如下:
Cortex-M架构更为详细的信息参照官网:
https://developer.arm.com/architectures/cpu-architecture/m-profile
3. Cortex-M3/M4-架构组成部分
架构将从几个方面进行介绍,包括编程模型,存储器,中断,复位等方面进行,相当于针对组织架构的各部分分别介绍。
3.1 编程模型
编程模型,我理解是一个编程的模板。编程模型将从操作模式状态和寄存器两个方面介绍。
3.1.1 操作模式状态
Cortex-M3/M4处理器有两种操作状态和模式。
1.操作状态
包括调试状态和Thumb状态。
调试状态:处理器被暂停,进入此状态,停止指令执行。
Thumb状态:执行Thumb指令,进入此状态。
Cortex-M处理器在启动后默认处于特权线程模式以及Thumb状态。
2. 操作模式
操作模式有两种:处理模式和线程模式。
线程模式:执行普通代码。
处理模式:主要执行中断服务程序等异常处理。处理模式下,具有特权访问等级(特权访问等级可访问处理器的所有资源,非特权访问等级某些状态不能访问)。
3.1.2 寄存器
这里的寄存器指的是处理器内核里的寄存器,用来对数据进行处理和控制。Cortex-M3/M4处理器的寄存器由寄存器组,特殊寄存器和浮点寄存器组成。
1)寄存器组
寄存器组有13个32位通用寄存器,3个特殊寄存器,总共16个寄存器。
栈指针:R13,通过PUSH/POP实现栈存储的访问。栈指针包括两种:主栈指针(MSP)和进程栈指针(PSP),由CONTROL寄存器决定。
MSP:默认的栈指针。用于处理模式。
PSP:用于线程模式。
链接寄存器:R14,用于调用函数或子程序时保存返回地址。
程序计数器:可读可写。
2)特殊寄存器
包括程序状态寄存器、中断/异常屏蔽寄存器、控制寄存器。
程序状态寄存器包括以下三个寄存器
- 应用状态寄存器(APSR)
- 执行状态寄存器(EPSR)
- 中断状态寄存器 (IPSR)
下图是以上状态寄存器位数的定义。
中断/异常屏蔽寄存器:
- PRIMASK: 1位宽的中断屏蔽寄存器,异常优先级最高,为0。
- FAULTMASK:故障屏蔽寄存器,异常优先级为1。
- BASEPRI:根据优先级屏蔽。
CONTROL寄存器决定了
- 栈指针的选择
- 线程模式的访问,是特权还是非特权。
3)浮点寄存器
主要是指Cortex-M4浮点寄存器。主要包括浮点单元寄存器组和浮点状态寄存器。
3.2 存储器系统
特点如下:
- 4GB寻址空间(32位)
- 被定义的存储器映射
- 支持大小端存储
- 存储器保护单元(MPU)
- 支持非对齐传输
- 写缓冲
关于存储器映射,为了方便Cortex-M不同系列的移植和重用
4GB的存储空间被划分为以下几种,如下图所示:
- 代码访问
- 数据访问
- 外设
- 内部控制和调试部件
3.3 异常和中断
打断正常执行程序的事件就是异常,中断是异常的一种。异常源有多个,如下所示:
NVIC:Nested vectoredinterrupt controller嵌套向量中断控制器,作用是管理异常,比较中断优先级,确定异常入口以及屏蔽中断等。
下图是异常类型总结表
3.4 复位
复位类型有三种:
- 上电复位。复位微控制器的所有
- 系统复位。只复位处理器和外设,调试部分不复位
- 处理器复位。
复位流程如下: - 先读主栈指针2个字,再读复位向量的地址。