無論是嵌入式系統(tǒng)在電池上運行還是連接到電網(wǎng),設(shè)計綠色并最小化能源消耗的系統(tǒng)都是大多數(shù)系統(tǒng)的常見要求?,F(xiàn)代嵌入式系統(tǒng)中最大的能源消費者之一是微控制器,并且了解如何最大程度地減少其能源消耗至關(guān)重要。即使您查看一個微控制器家族,每個處理器架構(gòu)都將具有略有不同的低功率功能。在這篇文章中,我們將研究ARM Cortex-M處理器核心中的基本低功率模式以及如何使用它們。
基本低能模式
每個基于ARM Cortex-M處理器的微控制器都至少具有三種功率模式;跑步,睡眠和深度睡眠。顯然,運行模式是處理器完全供電的地方,并執(zhí)行嵌入式系統(tǒng)設(shè)計的所有操作。睡眠模式將停止CPU時鐘,但會使系統(tǒng)時鐘,閃光燈和外圍時鐘運行。深度睡眠模式不僅會停止CPU時鐘,還可以關(guān)閉系統(tǒng)時鐘,閃光燈和PLL。
微控制器供應(yīng)商能夠完全自定義其低功率模塊以提供不同程度的低功率。例如,NXP KINETIS-L處理器不僅具有標準的Cortex-M低功率模式,還具有諸如低滲透睡眠模式和非常低的泄漏睡眠模式之類的模式,它們僅繪制電流的微或納米壓縮。
重要的是要注意,微控制器的睡眠越深,完全關(guān)閉的距離就越近。這一點很重要,因為隨著您使用越來越深的睡眠模式,備份微控制器并開始執(zhí)行指令所需的時間可能會大大增加。一些提供非常深的功率模式的處理器需要與處理器啟動序列相同的時間才能再次運行。根據(jù)您的應(yīng)用程序,這可能會對系統(tǒng)的實時性能產(chǎn)生重大影響。
進入低功率模式
開發(fā)人員可以使用兩種不同的說明將其系統(tǒng)置于低功率狀態(tài)。等待事件(WFE)和互換等待(WFI)。執(zhí)行WFE指令后,它將檢查系統(tǒng)控制塊(SCB)中事件位的值。如果未設(shè)置鉆頭,則將系統(tǒng)放置在睡眠模式中。事件可以由外部來源或使用發(fā)送事件(SEV)指令生成。在大多數(shù)情況下,我看到或編寫的應(yīng)用程序中有99%都使用了WFI指令。
當遇到WFI指令時,除非有待處理中斷,否則處理器將立即進入SCB中配置的低功率睡眠模式。一旦處理器入睡,當中斷時,它將醒來。某些處理器甚至可能具有可選的喚醒間斷控制器,該處理器允許開發(fā)人員配置允許哪些源喚醒處理器。這為開發(fā)人員提供了對系統(tǒng)可以在最低功率睡眠模式下保留多長時間的精細控制。
進入所需睡眠模式的C代碼非常直截了當。在大多數(shù)開發(fā)環(huán)境中,所有人都需要做的就是編寫以下代碼行:
__wfi;
如果您使用的是CMSI,也可以通過寫作來呼叫WFI函數(shù):
__wfi();
現(xiàn)在,您可能想知道如何配置輸入哪種低功率模式。在SCB寄存器中,有一個SleepDeep位,如果設(shè)置為1,則將處理器置于深度睡眠模式。如果將鉆頭清除為0,則處理器將進入睡眠模式。正如我前面提到的,硅供應(yīng)商通常會增強睡眠模式,因此還需要根據(jù)設(shè)計您的微控制器來配置其他寄存器。
額外的低功率功能
除了能夠進入低功率模式外,還有另一個有趣的低功率模式功能,稱為“睡眠”。一旦執(zhí)行完成的中斷,就可以讓處理器立即重新入睡。這使開發(fā)人員可以節(jié)省時間,在這種情況下,時間是能量,通過避免不必要的上下文在主應(yīng)用程序和中斷之間進行切換。允許處理器在中斷中醒來,進行必要的工作,然后重新入睡。
結(jié)論
Cortex-M處理器上的低功率模式是減少嵌入式系統(tǒng)用途的能源消耗量的主要密鑰之一。如我們所見,開發(fā)人員可以使用WFI指令將其系統(tǒng)置于低功率模式中,然后一旦觸發(fā)了先前配置的喚醒事件或中斷,系統(tǒng)就會喚醒。每個微控制器供應(yīng)商都能自定義其功率模式,我們將看到具有三種默認電源模式的微控制器,其始終以十幾個功率模式和復(fù)雜的狀態(tài)計算機,這些機器可以促進處理器如何從一種模式移動到另一種模式。