最小化ARM Cortex-M CPU功耗的方法与技巧
此外,Cortex-M0+内核也可以通过减少到两级流水线而降低功耗。在通常的流水线处理器中,下一条指令在CPU执行当前指令时被取出。如果程序产生分支,并且不能使用下一条取出的指令,那么被用于取指(分支影子缓冲器)的功耗就被浪费了。在两级流水线中,这个分支影子缓冲器缩小了,因此能耗得以节省(虽然仅有少量),这也意味着在发生流水线刷新时,仅需要不到一个时钟周期就能重新填充流水线(如图5所示)。
5 利用GPIO端口节能
Cortex-M0+内核提供节能特性的另一个地方是它的高速GPIO端口。在Cortex-M3和Cortex-M4内核中,反转一位或GPIO端口的过程是“读-修改-写”一个32位寄存器。虽然Cortex-M0+也可以使用这个方法,但是它有一个专用的32位宽I/O端口,可以采用单时钟周期访问GPIO,使得它能够高效的反位/引脚反转。注意:在Cortex-M0+上,这是一个可选的特性,并不是所有供应商都具备了这个有用的GPIO特性。
6 CPU的休眠模式
减少CPU功耗的最有效方法之一是关闭CPU自身。在Cortex-M架构中有多种不同的休眠模式,每一种都在功耗和再次执行代码的启动时间之间进行了折中考虑(如图6所示)。它也能够让CPU在完成中断服务后自动进入某个休眠模式,而不需要执行任何代码去完成这个工作。这种方法可以为那些常见于超低功耗应用中的任务节省CPU时钟周期。
在深度睡眠模式下,也可以使用唤醒中断控制器(WIC)来减轻NVIC负担。在使用WIC时,为实现低功耗模式下外部中断唤醒CPU,无需为NVIC提供时钟。
7 自主型外设可减轻CPU负荷
自主型片上外设具有降低功耗的优点。大多数MCU供应商已经在本身产品架构中实现了外设之间的自主型交互,例如Silicon Labs的EFM32 MCU使用的外设反射系统(PRS)。自主型外设能够实现十分复杂的外设动作链(触发而不是资料传输),同时保持CPU处于休眠状态。例如使用EFM32 MCU上的PRS功能,应用能够被配置为在CPU休眠的低功耗模式下,当片上比较器检测电压值超过了其预设的门限值,则触发一个定时器去开始减数。当定时器到达0时,触发DAC去开始输出 — 所有事件发生过程中CPU可以一直保持休眠状态。
自动进行如此复杂的交互,这使得外设之间能够完成大量工作而无需CPU参与。此外,带有内建智能的外设(例如传感器接口或脉冲计数器)能够通过预设的条件用于中断唤醒CPU,例如在累积10个脉冲时中断唤醒CPU。在这个例子中,当CPU被特定中断唤醒时,它明确知道需要做什么,而不需要检查计数器或寄存器以判别发生了什么,因此可以节省相当多的时钟周期,更好的完成其他重要任务。
我们已经介绍了多种易于实现的减轻Cortex-M设备上CPU功耗的方法。当然,还有其他因素影响功耗,例如用于加工设备的处理工艺或者用于存储应用代码的存储器技术。工艺和存储技术能够显著影响运行时功耗和低功耗模式下的漏电,因此也应当纳入嵌入式开发人员的整体功耗设计考虑之中。
存储器相关文章:存储器原理
评论