Arm Cortex-M低功耗模式基础

时间:2019-07-11 来源:www.diplomataconsultores.com

日本性爱

郎瑞志科

无论嵌入式系统是使用电池运行还是连接到电网,设计绿色系统和最小化功耗是大多数系统的常见要求。现代嵌入式系统中最大的能源消费者之一是微控制器,了解如何最大限度地降低能耗至关重要。即使您看一个单独的微控制器系列,每个处理器架构的低功耗也会略有不同。在本文中,我们将介绍Arm Cortex-M处理器内核中的基本低功耗模式以及如何使用它们。

6010ac78222f4c7b8075e85fb65c0cb4

基本低能耗模式

每个基于Arm Cortex-M处理器的微控制器至少具有三种电源模式;跑步,睡觉和深度睡眠。显然,操作模式就是处理器完全启动并执行嵌入式系统设计。休眠模式将暂停CPU时钟,但会使系统时钟,闪存和外设时钟运行。深度睡眠模式不仅可以停止CPU时钟,还可以关闭系统时钟,闪存和PLL。

微控制器供应商可以完全定制其低功耗模块,以提供不同程度的低功耗。重要的是要注意,微控制器进入睡眠状态越深,它就越接近完全关闭。这很重要,因为当您使用越来越深的睡眠模式时,为微控制器供电并开始执行指令所需的时间会急剧增加。某些提供深度电源模式的处理器需要与处理器引导顺序同时运行。根据您的应用程序,这会对系统的实时性能产生重大影响。

进入低功耗模式

开发人员可以使用两种不同的指令将系统置于低功耗状态;等待事件(WFE)并等待中断(WFI)。执行WFE指令时,它会检查系统控制块(SCB)中事件位的值。如果未设置此位,系统将进入睡眠模式。事件可以由外部源生成,也可以使用发送事件(SEV)指令生成。在大多数情况下,我见过或写过的99%的应用程序都使用了WFI指令。

当遇到WFI指令时,处理器将立即进入SCB中配置的低功耗休眠模式,除非有待处理的中断。一旦处理器处于睡眠状态,它将在触发中断时唤醒。某些处理器甚至可能有一个可选的唤醒中断控制器,允许开发人员配置允许处理器被唤醒的源。这使开发人员能够更精细地控制其系统如何维持最低功耗睡眠模式。

进入所需睡眠模式的C代码非常简单。在大多数开发环境中,您需要做的是编写以下代码行:

__WFI;

如果您正在使用CMSIS,您还可以通过编写以下内容来调用WFI函数:

__WFI();

现在您可能想知道如何配置输入的低功耗模式。 SCB寄存器中有一个SLEEPDEEP位。如果设置为1,处理器将进入深度睡眠模式。如果该位清零,处理器将进入休眠模式。正如我之前提到的,芯片供应商通常会增强睡眠模式,因此需要根据设计微控制器的人员来配置其他寄存器。

额外的低功耗特性

除了能够进入低功耗模式之外,还有另一个有趣的低功耗模式功能,称为Sleep-On-Exit。 Sleep-On-Exit允许处理器在执行完中断后立即返回休眠状态。这允许开发人员通过避免主应用程序和中断之间不必要的上下文切换来节省时间,在这种情况下,时间就是能量。允许处理器在中断时唤醒,执行必要的工作然后返回休眠状态。

结论

Cortex-M处理器的低功耗模式是降低嵌入式系统功耗的关键之一。正如我们所看到的,开发人员可以使用WFI指令将系统置于低功耗模式,然后在触发先前配置的唤醒事件或中断时唤醒。每个微控制器供应商都能够自定义其功耗模式,我们将看到一个具有三种默认功耗模式的微控制器,可以简化处理器,其中包含具有十几种功耗模式和复杂状态机的组件从一种模式转换到另一种模式的方式。