白皮书Copyright©2013-2017ARMLimitedoritsaffiliates.Allrightsreserved.Page1of26ARMCortex-M处理器入门ARMCortex-M处理器家族介绍和比较JosephYiu,高级嵌入式技术经理,ARM三月2017WhitepaperCopyright©2013-2017ARMLimitedoritsaffiliates.Allrightsreserved.Page2of26概要ARMCortex-M处理器家族现在有8款处理器成员。在本文中,我们会比较Cortex-M系列处理器之间的产品特性,重点讲述如何根据产品应用选择正确的Cortex-M处理器。本文中会详细的对照Cortex-M系列处理器的指令集和高级中断处理能力,以及SoC系统级特性,调试和追踪功能和性能的比较。1简介今天,ARMCortex-M处理器家族有8款处理器成员。除此之外,ARM的产品系列还有很多其他的处理器成员。对很多初学者,甚至某些芯片设计经验丰富但是不熟悉ARM系列处理器的设计者来说,也是很容易混淆这些产品的。不同的ARM处理器有不同的指令集,系统功能和性能。本文会深入展现Cortex-M系列处理器之间的关键区别,以及它们和ARM其他系列处理器的不同。1.1ARM处理器家族多年来,ARM已经研发了相当多的不同的处理器产品。如下图中(图1):ARM处理器产品分为经典ARM处理器系列和最新的Cortex处理器系列。并且根据应用范围的不同,ARM处理器可以分类成3个系列。ApplicationProcessors(应用处理器)–面向移动计算,智能手机,服务器等市场的的高端处理器。这类处理器运行在很高的时钟频率(超过1GHz),支持像Linux,Android,MSWindows和移动操作系统等完整操作系统需要的内存管理单元(MMU)。如果规划开发的产品需要运行上述其中的一个操作系统,你需要选择ARM应用处理器.Real-timeProcessors(实时处理器)–面向实时应用的高性能处理器系列,例如硬盘控制器,汽车传动系统和无线通讯的基带控制。多数实时处理器不支持MMU,不过通常具有MPU、Cache和其他针对工业应用设计的存储器功能。实时处理器运行在比较高的时钟频率(例如200MHz到1GHz),响应延迟非常低。虽然实时处理器不能运行完整版本的Linux和Windows操作系统,但是支持大量的实时操作系统(RTOS)。MicrocontrollerProcessors(微控制器处理器)–微控制器处理器通常设计成面积很小和能效比很高。通常这些处理器的流水线很短,最高时钟频率很低(虽然市场上有此类的处理器可以运行在200Mhz之上)。并且,新的Cortex-M处理器家族设计的非常容易使用。因此,ARM微控制器处理器在单片机和深度嵌入式系统市场非常成功和受欢迎。WhitepaperCopyright©2013-2017ARMLimitedoritsaffiliates.Allrightsreserved.Page3of26图1:处理器家族表1总结了三个处理器系列的主要特征。ApplicationprocessorsReal-timeprocessorsMicrocontrollerprocessors设计特点高时钟频率,长流水线,高性能,对媒体处理支持(NEON指令集扩展),高时钟频率,较长的流水线,高确定性(中断延迟低)通常较短的流水线,超低功耗系统特性内存管理单元(MMU),cachememory,ARMTrustZone®安全扩展内存保护单元(MPU),cachememory,紧耦合内存(TCM)内存保护单元(MPU),嵌套向量中断控制器(NVIC),唤醒中断控制器(WIC),最新ARMTrustZone®安全扩展.目标市场移动计算,智能手机,高能效服务器,高端微处理器工业微控制器,汽车电子,硬盘控制器,基带微控制器,深度嵌入系统(例如,传感器,MEMS,混合信号IC,IoT)表1:处理器特性总结ApplicationProcessors(withMMU,supportLinux,MSmobileOS)RealTimeProcessorsMicrocontrollersanddeeplyembeddedSystemcapability&performanceARM7TMseriesARM920TTM,ARM940TTMARM946TM,ARM966TMARM926TMCortex-M3Cortex-M1(FPGA)Cortex-M0Cortex-M0+Cortex-M4Cortex-R4Cortex-R5Cortex-R7Cortex-A8Cortex-A9Cortex-A5Cortex-A15Cortex-A7ARMCortexProcessorsClassicARMProcessorsCortex-A57Cortex-A53Cortex-A12ARM11TMseriesCortex-R8Cortex-A17Cortex-A72Cortex-A73Cortex-A32Cortex-A35Cortex-R52Cortex-M7Cortex-M23Cortex-M33WhitepaperCopyright©2013-2017ARMLimitedoritsaffiliates.Allrightsreserved.Page4of261.2Cortex-M处理器家族Cortex-M处理器家族更多的集中在低性能端,但是这些处理器相比于许多微控制器使用的传统处理器性能仍然很强大。例如,Cortex-M4和Cortex-M7处理器应用在许多高性能的微控制器产品中,最大的时钟频率可以达到400Mhz。当然,性能不是选择处理器的唯一指标。在许多应用中,低功耗和成本是关键的选择指标。因此,Cortex-M处理器家族包含各种产品来满足不同的需求:处理器描述Cortex-M0面向低成本,超低功耗的微控制器和深度嵌入应用的非常小的处理器(最小12K门电路)Cortex-M0+针对小型嵌入式系统的最高能效的处理器,与Cortex-M0处理器接近的尺寸大小和编程模式,但是具有扩展功能,如单周期I/O接口和向量表重定位功能Cortex-M1针对FPGA设计优化的小处理器,利用FPGA上的存储器块实现了紧耦合内存(TCM)。和Cortex-M0有相同的指令集Cortex-M3针对低功耗微控制器设计的处理器,面积小但是性能强劲,支持可以处理器快速处理复杂任务的丰富指令集。具有硬件除法器和乘加指令(MAC).并且,M3支持全面的调试和跟踪功能,使软件开发者可以快速的开发他们的应用Cortex-M4不但具备Cortex-M3的所有功能,并且扩展了面向数字信号处理(DSP)的指令集,比如单指令多数据指令(SMID)和更快的单周期MAC操作。此外,它还有一个可选的支持IEEE754浮点标准的单精度浮点运算单元Cortex-M7针对高端微控制器和数据处理密集的应用开发的高性能处理器。具备Cortex-M4支持的所有指令功能,扩展支持双精度浮点运算,并且具备扩展的存储器功能,例如Cache和紧耦合存储器(TCM)Cortex-M23面向超低功耗,低成本应用设计的小尺寸处理器,和Cortex-M0相似,但是支持各种增强的指令集和系统层面的功能特性。M23还支持TrustZone安全扩展Cortex-M33主流的处理器设计,与之前的Cortex-M3和Cortex-M4处理器类似,但系统设计更灵活,能耗比更高效,性能更高。M33还支持TrustZone安全扩展表2:Cortex-M处理器家族不同于老的经典ARM处理器(例如,ARM7TDMI,ARM9),Cortex-M处理器有一个非常不同的架构。例如:-仅支持ARMThumb®指令,已扩展到同时支持16位和32位指令Thumb-2版本-内置的嵌套向量中断控制负责中断处理,自动处理中断优先级,中断屏蔽,中断嵌套和系统异常处理。-中断处理函数可以使用标准的C语言编程,嵌套中断处理机制避免了使用软件判断哪一个中断需要响应处理。同时,中断响应速度是确定性的,低延迟的-向量表从跳转指令变为中断和系统异常处理函数的起始地址。-寄存器组和某些编程模式也做了改变。这些变化意味着许多为经典ARM处理器编写的汇编代码需要修改,老的项目需要修改和重新编译才能迁移到Cortex-M的产品上。软件移植具体的细节记录在ARM文档:ARMCortex-M3ProcessorSoftwareDevelopmentforARM7TDMIProcessorProgrammers©2013-2017ARMLimitedoritsaffiliates.Allrightsreserved.Page5of261.3Cortex-M系列处理器的共同特性Cortex-M0,M0+,M3,M4andM7之间有很多的相似之处,例如:-基本编程模型(章节Error!Referencesourcenotfound.)-嵌套向量中断控制器(NVIC)的中断响应管理-架构设计的休眠模式:睡眠模式和深度睡眠模式(章节Error!Referencesourcenotfound.)-操作系统支持特性(章节Error!Referencesourcenotfound.)-调试功能(章节Error!Referencesourcenotfound.)-易用性例如,嵌套向量中断控制器是内置的中断控制器图2:Cortex-M处理器的嵌套向量中断控制器支持许多外围设备的中断输入,一个不可屏蔽的中断请求,一个来自内置时钟(SysTick)的中断请求(见章节3.3)和一定数量的系统异常请求。NVIC处理这些中断和异常的优先级和屏蔽管理。NVIC以及异常处理模型的更多的内容在章节3.2描述。其他Cortex-M处理器间的异同点会在本文的其余部分讲解。2Cortex-M处理器指令集2.1指令集简介大多数情况下,应用程序代码可以用C或其他高级语言编写。但是,对Cortex-M处理器支持指令集的基本了解有助于开发者针对具体应用选择合适的Cortex-M处理器。指令集(ISA)是处理器架构的一部分,Cortex-M处理器可以分为几个架构规范NVICSysTick(SystemTickTimer)PeripheralsNMIIRQsCortex-MprocessorCoreConfigurationregistersInternalbusinterconnectSystemexceptionsBusinterfacePeripheralWhitepaperCopyright©2013-2017ARMLimitedoritsaffiliates.Allrightsreserved.Page6of26架构描述ARMv6-MCortex-M0,Cortex-M0+和Cortex-M1支持的架构ARMv7-MCortex-M3,Cortex-M4和Cortex-M7支持的架构.ARMv7-M扩展的DSP类型指令(SMID)也被称为ARMv7E-M.ARMv8-M这个架构进一步分为:Baseline子规范–Cortex-M23对应的架构Mainline子规范–Cortex-M33对应的架构FormoreinformationaboutARMv8-Marchitecture,pleaseseeinARMv8-M关于ARMv8-M架构的更多信息,请参见ARMv8-M的ARMv8-MArchitectureTechnicalOverview表3:Cortex-M处理器ARM架构规范的规范所有的Cortex-M处理器都支持