Cortex-M3 是一个 32 位处理器内核。它基于哈佛构架,其指令和数据各使用一条总线,集成了分支预测、单周期乘法、硬件除法等特性。Cortex-M3 增加了MPU,用于重要数据的保护及特权处理。它适用于高确定性的实时应用,适用于汽车车体系统、控制系统及无线网络和传感器等多个应用场合。
Cortex-M3 的特点有以下几个。
(1)功耗低:Cortex-M3 使用了最少的ARM内核,内核的核心部分(0.18um G)的门数仅为 33000 个,并支持扩展时钟门控和集成睡眠模式,使得Cortex-M3 的功耗低,满足目前的白色家电和无线网络市场对低功耗的要求。
(2)位带操作:Cortex-M3 支持两块位带存储区域,其中一块区域是SRAM,另一块区域是外设区。使用位带操作可简化外设控制流程。另外,通过使用布尔变量操作位带别名区可实现对位带区的单位操作,从而降低SRAM的使用率。
(3)采用Thumb®-2 指令集,能够执行硬件除法、单周期乘法和位字段操作,从而获取最佳的性能和代码大小。
(4)低延迟中断处理机制:Cortex-M3 处理器中集成的NVIC可实现硬件中断处理及低延迟,有利于减弱中断处理对处理器性能的影响。NVIC和处理器的紧密集成加快了中断服务程序的执行速度,并减少了进入中断所需的周期数。
(5)Cortex-M3 NVIC 在设计时是可配置的,最多可提供 240 个具有单独优先级、动态重设优先级功能和集成系统时钟的系统中断。
(6)支持两种工作模式(线程模式和处理器模式)及两个等级(有特权和无特权)的代码访问,在不牺牲应用程序安全性的前提下执行复杂的开放式系统。
(7)丰富的连接功能和性能的组合使基于Cortex-M3 的设备可以有效处理多个I/O通道和协议标准,如USB OTG(On-The-Go)。
(8)开发工具的多样化:串行线调试端口或串行线JTAG调试端口。
(9)ARM提供标准的CMSIS标准支持。
Cortex-M0/M3 是针对ARM7TDMI-S用户群体设计的, ARM公司给出了将ARM7TDMI-S升级到Cortex-M0/3 的益处,以及ARM7TDMI-S与Cortex-M0/3 的性能对比,如表 1-3 所示。
表 1-3 ARM7TDMI-S与Cortex-M0/3 的对比关系表
如图 1-1 所示是Cortex-M3 的内部功能接口框图。
NVIC是Cortex-M3 处理器中一个完整的部分,它可以进行高度配置,为处理器提供出色的中断处理能力。在NVIC的标准执行中,它提供了 1 个非屏蔽中断(NMI)和 32 个通用物理中断,这些中断带有 8 级的抢占优先权。NVIC可以通过综合选择配置为 1~240 个物理中断中的任何一个,并带有多达 256 个优先级。
MPU是Cortex-M3 处理器中一个可选的部分,它通过保护用户应用程序中操作系统所使用的重要数据,分离处理任务(禁止访问各自的数据),禁止访问存储器区域,将存储器区域定义为只读,以及对有可能破坏系统的未知的存储器访问进行检测等手段来改善嵌入式系统的可靠性。
对Cortex-M3 处理器系统的调试访问是通过调试访问端口(Debug Access Port)来实现的。该端口可以作为串行线调试端口(SW-DP)[构成一个两脚(时钟和数据)接口]或串行线JTAG调试端口(SWJ-DP)(使能JTAG或SW协议)使用。SWJ-DP在上电复位时默认为JTAG模式,并且可以通过外部调试硬件所提供的控制序列进行协议的切换。
总线矩阵用来将处理器和调试接口与外部总线相连。总线矩阵与下面的外部总线相连。
(1)I-Code总线:该总线用于从代码空间取指令和向量,是 32 位AHB-Lite总线。
(2)D-Code总线:该总线用于对代码空间进行数据加载/存储及调试访问,是 32 位AHB-Lite总线。
(3)系统总线:该总线用于对系统空间执行取指令和向量,数据加载/存储及调试访问,是 32 位AHB-Lite总线。
(4)PPB:该总线用于对 PPB 空间进行数据加载/存储及调试访问,是 32 位APB(v2.0)总线。
总线矩阵还对以下方面进行控制。
(1)非对齐访问:总线矩阵将非对齐的处理器访问转换为对齐访问。
(2)总线矩阵将位带别名访问转换为对位带区的访问:对位带加载进行位域提取;对位带存储进行原子读—修改—写;写缓冲。总线矩阵包含一个单入口写缓冲区,该缓冲区使得处理器内核不受到总线延迟的影响。
图 1-1 Cortex-M3 的内部功能接口框图