CM3(Cortex-M3)内核是嵌入式MCU的中央处理单元(CPU)。完整的基于CM3的MCU还需要很多其他组件,如图2-1所示。芯片制造商得到CM3的IP核的使用授权后,就可以把CM3内核用在自己的芯片设计中,添加存储器、外设、I/O及其他功能模块。不同的芯片制造商设计出的MCU会有不同的配置,包括存储器容量、类型、外设等,都各具特色。
图2-1 基于CM3内核的MCU结构
CM3具有下列特点。
内核是ARMv7-M体系结构,如图2-2所示。
哈佛结构。哈佛结构的处理器采用独立的指令总线和数据总线,可以同时进行取指令和数据读/写操作,从而提高了处理器的运行性能。
内核支持低功耗模式。CM3加入了类似8位单片机的内核低功耗模式,支持3种功耗管理模式,即睡眠模式、停止模式和待机模式。这使整个芯片的功耗控制更加有效。
引入分组堆栈指针机制,把系统程序使用的堆栈和用户程序使用的堆栈分开。如果再配上可选的存储器保护单元(MPU),处理器就能满足对软件健壮性和可靠性有严格要求的应用。
支持非对齐数据访问。CM3的一个字为32位,但它可以访问存储在一个32位单元中的字节/半字类型数据,这样,4个字节类型或2个半字类型数据可以被分配在一个32位单元中,提高了存储器的利用率。对一般的应用程序而言,这种技术可以节省约25%的SRAM使用量,从而在应用时可以选择SRAM较小、价格更低的MCU。
图2-2 CM3核结构
定义了统一的存储器映射。各芯片制造商生产的基于CM3内核的MCU具有一致的存储器映射,这使得用户对CM3的MCU的选型及代码在不同MCU上的移植非常便利。
位绑定操作。详见2.5.5节。
高效的Thumb-2指令集。CM3使用的Thumb-2指令集是一种16/32位混合编码指令,兼容Thumb指令。由应用程序编译生成的Thumb-2代码大小接近Thumb编码程序存储器占用量,达到了接近ARM编码的运行性能。
32位硬件除法和单周期乘法。CM3加入了32位除法指令,弥补了以往ARM处理器没有除法指令的缺陷。改进了乘法运算部件,32位的乘法操作只要1个时钟周期,使得CM3在进行乘加运算时,接近DSP的性能。
三级流水线和转移预测。现代处理器大多采用指令预取和流水线技术,以提高处理器的指令执行速度。高性能流水处理器中加入的转移预测部件,即在处理器从存储器预取指令时,如果遇到转移指令,则能自动预测转移是否会发生,并从预测的方向进行取指令操作,从而提供给流水线连续的指令流,流水线就可以不断地执行有效指令,保证了其性能的发挥。
内置嵌套向量中断控制器(NVIC)。CM3首次在内核上集成了嵌套向量中断控制器。CM3中断延迟只有12个时钟周期,还使用了尾链技术,使得背靠背(Back-to-Back)中断的响应只要6个时钟周期,而ARM7需要24~42个时钟周期。ARM7内核不带中断控制器,具体MCU的中断控制器由各芯片制造商自己加入,这给用户使用及程序移植带来了很大的麻烦。基于CM3的MCU却具有统一的中断控制器,给中断编程带来了便利。
拥有先进的故障处理机制。支持多种类型的异常和故障诊断,使故障诊断容易。
支持串行调试。CM3在保持ARM7的JTAG(Join Test Action Group)调试接口的基础上,还支持串行单总线调试(Serial Wire Debug,SWD)。
极高性价比。基于CM3的MCU相比于ARM7 MCU,在相同的工作频率下,其平均性能要高出约30%,其代码尺寸比ARM编码小约30%,价格更低。