第2章 Cortex-M3概览
内容提要 Cortex‐M3 简介 1 寄存器组 2 操作模式和特权极别 3 嵌套向量中断控制器 4 存储器映射 5 总线接口 6
内容提要 存储器保护单元 7 指令系统 8 中断和异常 9 调试支持 10
1. Cortex‐M3 简介 内核与芯片区别: 基于 Cortex-M3的 MCU
1. Cortex‐M3 简介 Cortex‐M3 是一个32 位处理器内核。 32 位 内部的数据路径; 32 位 寄存器; 32 位 存储器接口。 Cortex-M3 内核采用哈佛架构,指令和数据各使用一条总线。由于指令和数据可以从存储器中同时读取,所以 Cortex-M3 处理器对多个操作并行执行,加快了应用程序的执行速度。 Cortex‐M3 内部附赠了调试组件,用于在硬件调试操作。
处理器组件有两个层次,ETM、TPIU、SW/JTAG-DP和ROM表四个组件在Cortex-M3层的外部,因为这些组件要么是可选的,要么就是在实现和使用时可以灵活改变的 TPIU TPIU是ITM、ETM(如果存在)和片外跟踪端口分析器之间传输Cortex-M3跟踪数据的桥梁。TPIU可以设置成支持低开销调试的串行引脚跟踪,或者用于更高带宽跟踪的多引脚跟踪。 (注意:如果没有TPIU,那么Contex-M3就没有跟踪能力。)
SW/JTAG-DP 处理器可以设置成有SW-DP 或者 JTAG-DP 调试端口,或者两者都有。调试端口提供对系统中所有的外设寄存器、存储器、处理器寄存器的调试访问。 ROM 表 :自动检测CM3中包含哪些调试组件。
FPB :闪存地址重载与断点单元 ITM :指令跟踪宏单元 ETM :嵌入式跟踪宏单元 DWT :数据观察点与跟踪单元
2. 寄存器组 Cortex‐M3 处理器 拥有R0‐R15 的寄存器组。 返回目录 通用寄存器 数据操作 主堆栈指针(MSP) 2. 寄存器组 Cortex‐M3 处理器 拥有R0‐R15 的寄存器组。 通用寄存器 数据操作 主堆栈指针(MSP) 进程堆栈指针(PSP) 操作系统内核以及异常处理 用户应用程序 连接寄存器 存储子程序返回地址 程序计数器 指向当前的程序地址 返回目录
2. 寄存器组 Cortex‐M3 还搭载了若干特殊功能寄存器: 程序状态字寄存器组(xPSR) 2. 寄存器组 Cortex‐M3 还搭载了若干特殊功能寄存器: 程序状态字寄存器组(xPSR) 中断屏蔽寄存器组(PRIMASK, FAULTMASK, BASEPRI) 控制寄存器(CONTROL)
2. 特殊功能寄存器组 程序状态寄存器(xPSR) 应用程序 PSR(APSR) 中断号 PSR(IPSR) 执行 PSR(EPSR) 2. 特殊功能寄存器组 程序状态寄存器(xPSR) 应用程序 PSR(APSR) 中断号 PSR(IPSR) 执行 PSR(EPSR) 返回目录
2. 特殊功能寄存器组 中断屏蔽寄存器组 PRIMASK FAULTMASK BASEPRI 返回目录
2. 特殊功能寄存器组 控制寄存器(CONTROL) 控制寄存器用于定义特权级别,还用于选择当前使用哪个堆栈指针 返回目录
3. 操作模式和特权极别 处理模式( handler mode ) 线程模式 ( thread mode ) 3. 操作模式和特权极别 Cortex‐M3 处理器支持两种处理器的操作模式,以及两级特权操作: 处理模式( handler mode ) 线程模式 ( thread mode ) 特权级 用户级 异常处理代码 处理模式 错误用法 主应用程序代码 线程模式
Cortex-M3处理器代码可以是特权执行或非特权执行。 线程模式在复位之后为特权访问 。 这里需要注意的是,处理模式始终是特权访问的。 返回目录
4. 嵌套向量中断控制器(NVIC) 主要有以下特征: 可配置1~240个外部中断。 可配置优先级位数3~8位。 支持电平和脉冲(边沿)中断。 可以动态重新分配中断优先级。 优先级分组。 进入中断时,处理器状态自动保存,退出中断时状态自动恢复,无额外指令开销
NVIC采用尾链(Tail-Chaining)技术,简化了在激活与挂起的中断之间的数据传 送。它用简单的6个周期的取指,取代了传统的串行堆栈通常需要超过30个时钟周期的Push-Pop操作。 为了提高低功耗特性,NVIC设计了三种睡眠方式。其深度睡眠(Deep-Sleep)功能可以输出信号到其他系统模块,使整个器件快速关闭。 Cortex-M3 处理器使用一个可以重复定位的向量表,表中包含了将要执行的函数的地址,可供具体的中断处理器使用。中断被接受之后,处理器从向量表中获取地址。向量表复位时指向零,编程控制寄存器可以使向量表重新定位。
向量表 Cortex-M3支持大量异常,包括11个系统异常,和最多240 个外部中断。 异常产生时,对应的异常处理程序就会执行。为了决定handler 的入口地址,CM3 使用了“向量表查表机制” 返回目录
虽然CM3 是支持240 个外中断的,但具体使用了多少个是由芯片生产商决定。CM3 还有一个NMI(不可屏蔽中断)输入脚。当它被置为有效时,NMI 服务程序会无条件地执行。
5. 存储器映射 Cortex‐M3 支持4GB 存储空间
Cortex-M3 处理器能够以小端格式或大端格式访问存储器中的数据字,而访问代码时始 终使用小端格式。 数据类型 Cortex-M3支持以下数据类型: 1. 32 位字 2. 16 位半字 3. 8 位字节 存储器格式 Cortex-M3 处理器能够以小端格式或大端格式访问存储器中的数据字,而访问代码时始 终使用小端格式。 小端格式:一个字中最低地址的字节为该字的最低有效字节,最高地址的字节为最高有效字节。存储器系统地址 0 的字节与数据线 7-0 相连。 注 :小端格式是 ARM 处理器默认的存储器格式。
CM3 支持 both 小端模式和大端模式。 ●复位时确定使用哪种端模式的,且运行时不得更改。 ●指令预取永远使用小端模式 CM3 支持 both 小端模式和大端模式。 ●复位时确定使用哪种端模式的,且运行时不得更改。 ●指令预取永远使用小端模式 ● 外部私有总线地址区 0xE0000000 至 0xE00FFFFF 也永远使用小端模式。
bit-banding 1. 两个 bit-banding 区域。 分别为 SRAM 和外设存储区域中的 最低的 1MB 2. Cortex-M3 存储器映射有 2 个 32MB 别名区,它们被映射为两个 1MB 的 bit-band 区。 对 32MB SRAM 别名区的访问映射为对 1MB SRAMbit-band 区的访问。 对 32MB 外设别名区的访问映射为对 1MB 外设 bit-band 区的访问
地址 0x23FFFFE0 的别名字映射为 0x200FFFFF 的bit-band 字节的位 0: 0x23FFFFE0=0x22000000+(0xFFFFF*32)+0*4 地址 0x23FFFFFC 的别名字映射为 0x200FFFFF 的bit-band 字节的位 7: 0x23FFFFEC=0x22000000+(0xFFFFF*32)+7*4 地址 0x22000000 的别名字映射为 0x20000000 的bit-band 字节的位 0: 0x22000000=0x22000000+(0*32)+0*4 地址 0x220001C 的别名字映射为 0x20000000 的bit-band 字节的位 0: 0x2200001C=0x22000000+(0*32)+7*4
举例: 1. 在地址 0x20000000 处写入 0x3355AACC 读取地址 0x22000008。本次读访问将读取 0x20000000,并提取比 特 2,值为 1。 3. 往地址 0x22000008 处写 0。本次操作将被映射成对地址 0x20000000 的"读-改-写" 操作, 把比特 2 清 0。 4. 现在再读取 0x20000000,将返回 0x3355AAC8(bit[2]已清零)。 注意:位带别名区的字只有 LSB 有意义。
能用来化简跳转的判断。当跳转依据是某个位时,以前必须这样做: ‹ 读取整个寄存器 位带操作好处: 能用来化简跳转的判断。当跳转依据是某个位时,以前必须这样做: ‹ 读取整个寄存器 ‹ 掩蔽不需要的位 ‹ 比较并跳转 现在只需: ‹ 从位带别名区读取状态位
非对齐数据访问 对齐:以字为单位的传送,其地址 的最低两位必须是 0; 以半字为单位的传送,其地址的 LSB 必须是 0; CM3 支持使用非(地址)对齐的传送,数据存储器的访问无需对齐。 而以前的ARM 处理器只允许对齐的数据传送。 对齐:以字为单位的传送,其地址 的最低两位必须是 0; 以半字为单位的传送,其地址的 LSB 必须是 0; 以字节为单位的传送 ,则无所谓对不对齐。
事实上,在内部是把非对齐的访问转换成若干个对齐的访问的,这种转换动作由处理器 总线单元来完成。 坏处: 但是,因为它 通过若干个对齐的访问来实现一个非对齐的访问,会需要更多的总线周期。事实上,节省内 存有很多方法,但没有一个是通过压缩数据的地址,不惜破坏对齐性的这种歪门邪道。因此, 应养成好习惯,总是保证地址对齐,这也是让程序可以移植到其它 ARM 芯片上的必要条件。
6.总线矩阵 总线矩阵与如下外部总线相连: 1. ICode 总线:从代码空间取指令和向量,32 位总线 2. DCode总线:对代码空间进行数据加载/存储以及调试访问,32位总线。 系统总线:对系统空间执行取指令和向量,数据加载/存储以及调试访问,32 位总线。 非对齐访问。总线矩阵将非对齐的处理器访问转换为对齐访问。
7. 存储器保护单元(MPU) Cortex‐M3 有一个可选的存储器保护单元。 可以对特权级访问和用户级访问分别施加不同的访问限制。当检测到犯规时,MPU 就会产生一个fault 异常; 最常见的就是由操作系统使用MPU,以使特权级代码的数据,包括操作系统本身的数据不被其它用户程序弄坏。 MPU 在保护内存时是按区管理的。它可以把某些内存区域设置成只读,从而避免了那里的内容意外被更改;还可以在多任务系统中把不同任务之间的数据区隔离。
8. 指令集 Cortex‐M3 只使用Thumb‐2 指令集。 8. 指令集 Cortex‐M3 只使用Thumb‐2 指令集。 ARM公司在其Cortex-M3内核中嵌入新的Thumb-2指令集。新的Thumb-2内核技术保留了紧凑代码质量并与现有ARM方案的代码兼容性,提供改进的性能和能量效率。 Thumb-2是一种新型混合指令集,融合了16位和32位指令,用于实现密度和性能的最佳平衡。在不对性能进行折中的情况下,节省许多高集成度系统级设计的总体存储成本。
10. 调试支持 Cortex‐M3 内核搭载了若干种调试相关的特性。最主要的就是程序执行控制,包括停机(halting)、单步执行(stepping)、指令断点、数据观察点、寄存器和存储器访问、性能速写(profiling)以及各种跟踪机制。
小结 1.高性能 2.先进的中断处理功能 3.低功耗 许多指令都是单周期的——包括乘法相关指令; 简化了软件开发和代码维护,使产品面市更快; 内建的嵌套向量中断控制器支持多达 240 条外部中断输入; 在进入异常服务例程时,自动压栈了R0‐R3, R12, LR, PSR 和PC; 3.低功耗 Cortex‐M3 需要的逻辑门数少,所以先天就适合低功耗要求的应用,支持节能模式。内核可以进入睡眠模式,并且以不同的方式唤醒。
ARM7 与Cortex-M3