ARM Cortex™-M 处理器系列是一系列可向上兼容的高能效、易于使用的处理器,这些处理器旨在帮助开发人员满足将来的嵌入式应用的需要。这些需要包括以更低的成本提供更多功能、不断增加连接、改善代码重用和提高能效。 Cortex-M 系列针对成本和功耗敏感的 MCU 和终端应用(如智能测量、人机接口设备、汽车和工业控制系统、大型家用电器、消费性产品和医疗器械)的混合信号设备进行过优化。
为什么选择 Cortex-M
行业标准: ARM Cortex-M 处理器是全球微控制器标准,已许可给 40 个以上的 ARM 合作伙伴,包括 NXP Semiconductors、STMicroelectronics、Texas Instruments 和 Toshiba 等领先供应商。使用标准处理器使 ARM 合作伙伴可以创建具有一致体系结构的设备,同时使它们可以专注于创建优秀的设备实现。
能效:更低的能耗,更长的电池寿命
以更低的 MHz 或更短的活动时段运行。
基于架构的睡眠模式支持。
比 8/16 位设备的工作方式更智能、睡眠时间更长。
--------------------------------------------------------------------------------
更小的代码
更低的硅成本
高密度指令集
比 8/16 位设备每字节完成更多操作
更小的 RAM、ROM 或闪存要求
--------------------------------------------------------------------------------
易于使用
更快的软件开发和重用
多个供应商之间的全球标准
代码兼容性
统一的工具和操作系统支持
--------------------------------------------------------------------------------
高性能
更有竞争力的产品
功能强大的 Cortex-M 处理器
每 MHz 提供更高的性能
能够以更低的能耗实现更丰富的功能
比较 Cortex-M 处理器
Cortex-M 系列是必须考虑不同的成本、能耗和性能的各类可兼容、易于使用的嵌入式设备(如微控制器 (MCU))的理想解决方案。每个处理器都针对十分广泛的嵌入式应用范围提供最佳权衡取舍。
ARM Cortex-M0
ARM Cortex-M3
ARM Cortex-M4
“8/16 位”应用
“16/32 位”应用
“32 位/DSC”应用
低成本和简单性
性能效率
有效的数字信号控制
Cortex-M 系列处理器都是二进制向上兼容的,这使得软件重用以及从一个 Cortex-M 处理器无缝发展到另一个成为可能。
ARM Cortex-M 技术
每个 Cortex-M 系列处理器都有特定的优点,但全部都受一些基本技术的支持,这些技术使 Cortex-M 处理器能够胜任多种嵌入式应用。
RISC 处理器内核
Thumb-2® 技术
-
高性能 32 位 CPU
-
具有确定性的运算
-
低延迟 3 阶段管道
-
16/32 位指令的最佳混合
-
小于 8 位设备 3 倍的代码大小
-
对性能没有负面影响
低能耗模式
嵌套矢量中断控制器 (NVIC)
-
集成的睡眠状态支持
-
多电源域
-
基于架构的软件控制
-
低延迟、低抖动中断响应
-
不需要汇编编程
-
以纯 C 语言编写的中断服务例程
工具和 RTOS 支持
CoreSight 调试和跟踪
-
广泛的第三方工具支持
-
Cortex 微控制器软件接口标准 (CMSIS)
-
最大限度地增加软件成果重用
-
JTAG 或 2 针串行线调试 (SWD) 连接
-
支持多处理器
-
支持实时跟踪
CMSIS
ARM Cortex 微控制器软件接口标准 (CMSIS) 是 Cortex-M 处理器系列的与供应商无关的硬件抽象层。使用 CMSIS,可以为接口外设、实时操作系统和中间件实现一致且简单的处理器软件接口,从而简化软件的重用。借助于 CMSIS,可以缩短新微控制器开发人员的学习过程,从而缩短新产品的上市时间。
深入:嵌套矢量中断控制器 (NVIC)
NVIC 是 Cortex-M 处理器不可或缺的部分,它为处理器提供了卓越的中断处理能力。
Cortex-M 处理器使用一个矢量表,其中包含要为特定中断处理程序执行的函数的地址。接受中断时,处理器会从该矢量表中提取地址。
为了减少门数并增强系统灵活性,Cortex-M 处理器使用一个基于堆栈的异常模型。出现异常时,系统会将关键通用寄存器推送到堆栈上。完成入栈和指令提取后,将执行中断服务例程或故障处理程序,然后自动还原寄存器以使中断的程序恢复正常执行。使用此方法,便无需编写汇编器包装器了(而这是对基于 C 语言的传统中断服务例程执行堆栈操作所必需的),从而使得应用程序的开发变得非常容易。NVIC 支持中断嵌套(入栈),从而允许通过运用较高的优先级来较早地为某个中断提供服务。
在硬件中完成对中断的响应
Cortex-M 系列处理器的中断响应是从发出中断信号到执行中断服务例程的周期数。它包括:
- 检测中断
- 背对背或迟到中断的最佳处理(参见下文)
- 提取矢量地址
- 将易损坏的寄存器入栈
- 跳转到中断处理程序
这些任务在硬件中执行,并且包含在为 Cortex-M 处理器报出的中断响应周期时间中。在其他许多体系结构中,这些任务必须在软件的中断处理程序中执行,从而引起延迟并使得过程十分复杂。
NVIC 中的尾链
在背对背中断的情况下,传统系统会重复完整的状态保存和还原周期两次,从而导致更高的延迟。Cortex-M 处理器通过在 NVIC 硬件中实现尾链技术简化了活动中断和挂起的中断之间的转换。处理器状态会在比软件实现时间更少的周期内自动保存在中断条目上并在中断退出时还原,从而显著提升低 MHz 系统的性能。
NVIC 对迟到的较高优先级中断的响应
如果在为上一个中断执行堆栈推送期间较高优先级的中断迟到,NVIC 会立即提取新的矢量地址来为挂起的中断提供服务,如上所示。Cortex-M NVIC 对这些可能性提供具有确定性的响应并支持迟到和抢占。
NVIC 进行的堆栈弹出抢占
同样,如果异常到达,NVIC 将放弃堆栈弹出并立即为新的中断提供服务,如上所示。通过抢占并切换到第二个中断而不完成状态还原和保存,NVIC 以具有确定性的方式实现了缩短延迟。
从 8/16 位迁移到 ARM Cortex-M
ARM Cortex-M 代码大小优势说明
ARM
使用相对 EEMBC CoreMark 测试大小的代码大小比较。
指令宽度
认为 8 位微控制器使用 8 位指令,基于 ARM Cortex-M 处理器的微控制器使用 32 位指令,这是一种常见的误解。事实上,PIC18 和 PIC16 指令大小分别是 16 位和 14 位。对于 8051 体系结构,虽然某些指令的长度为 1 字节,但许多其他指令的长度为 2 或 3 字节。通常,对于 16 位体系结构也是如此,其中某些指令可能占用 6 字节或更多内存。
ARM Cortex-M3 和 Cortex-M0 处理器利用可提供极佳代码密度的 ARM Thumb®-2 技术。借助于 Thumb-2 技术,Cortex-M 处理器可以支持已扩展为包括更强大的 32 位指令的 16 位 Thumb 指令的根本基础。在许多情况下,C 语言编译器将使用 16 位版本的指令,除非使用 32 位版本可以更有效地执行运算。
指令效率
由于没有同时考虑到 ARM Cortex-M 处理器指令更为强大,此图片是不完整的。在许多情况下,单个 Thumb 指令可相当于数个 8/16 位微控制器指令;这意味着 Cortex-M 设备的代码量更少,因此可以更低的总线速度完成同一任务。
在各处理器体系结构之间比较 16 位乘法运算
8 位示例
16 位示例
ARM Cortex-M
MOV A, XL;2 字节
MOV B, YL;3 字节
MUL AB;1 字节
MOV R0, A;1 字节
MOV R1, B;3 字节
MOV A, XL;2 字节
MOV B, YH;3 字节
MUL AB;1 字节
ADD A, R1;1 字节
MOV R1, A;1 字节
MOV A, B;2 字节
ADDC A, #0;2 字节
MOV R2, A;1 字节
MOV A, XH;2 字节
MOV B, YL;3 字节
MUL AB;1 字节
ADD A, R1;1 字节
MOV R1, A;1 字节
MOV A, B;2 字节
ADDC A, R2;1 字节
MOV R2, A;1 字节
MOV A, XH;2 字节
MOV B, YH;3 字节
MUL AB;1 字节
ADD A, R2;1 字节
MOV R2, A;1 字节
MOV A, B;2 字节
ADDC A, #0;2 字节
MOV R3, A;1 字节
MOV R4,&0130h
MOV R5,&0138h
MOV SumLo,R6
MOV SumHi,R7
(操作数被移入或移出内存映射的硬件乘法单元)
MULS r0,r1,r0
N.B.Cortex-M 乘法实际上执行 32 位乘法,此处我们假设 r0 和 r1 包含 16 位数据。
压缩的数据占用空间
必须注意,Cortex-M 处理器支持 8 位和 16 位数据传输,可以有效利用数据内存。这意味着程序员可以继续使用他们在面向 8/16 位的软件中使用的相同数据类型。
能效优势
对不断增加连接(例如,USB、蓝牙和 IEEE 802.15)、具有复杂模拟传感器(例如,加速计和触摸屏)且成本日益降低的产品的需求,已导致需要将模拟设备与数字功能更紧密地集成,以对数据进行预处理和传输。大多数 8 位设备在不显著增加 MHz(并因此不显著增加功率)的情况下不提供支持这些任务的性能,因此嵌入式开发人员需要寻找具有更高级处理器技术的替代设备。16 位设备以前曾被用来解决微控制器应用中的能效问题。但是,16 位设备相对不高的性能意味着它们通常需要较长的活动工作周期或较高的时钟频率才能完成 32 位设备所完成的相同任务。
使软件开发更加容易
基于 ARM Cortex 处理器的微控制器的软件开发可能比 8 位微控制器产品的开发容易得多。Cortex 处理器不但是完全可通过 C 语言进行编程的,而且还附带各种高级调试功能以帮助定位软件中的问题。除 MCU 开发工具包中包括的所有附加资源外,Internet 上还有大量示例和教程,其中许多来自基于 ARM 处理器的 MCU 供应商的网站。