天天看點

Arm Cortex-M低功耗模式基礎

無論嵌入式系統是使用電池運作還是連接配接到電網,設計綠色系統并最大限度地降低能耗是大多數系統的常見要求。現代嵌入式系統中最大的能源消費者之一是微控制器,并且了解如何最小化其能耗是至關重要的。即使您檢視單個微控制器系列,每個處理器架構的低功耗也會略有不同。在這篇文章中,我們将介紹Arm Cortex-M處理器核心中的基本低功耗模式以及如何使用它們。

Arm Cortex-M低功耗模式基礎

基本的低能量模式

每個基于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指令将系統置于低功耗模式,然後一旦觸發了先前配置的喚醒事件或中斷,系統就會喚醒。每個微控制器供應商都能夠自定義其功耗模式,我們将看到具有三種預設功耗模式的微控制器,通過具有十幾種功耗模式和複雜狀态機的部件,可以簡化處理器從一種模式移動到下一種模式的方式。