無論嵌入式系統(tǒng)是使用電池運行還是連接到電網(wǎng),設(shè)計一個綠色且能耗最低的系統(tǒng)是大多數(shù)系統(tǒng)的共同要求?,F(xiàn)代嵌入式系統(tǒng)中最大的能源消耗者之一是微控制器,了解如何將其能源消耗降至最低至關(guān)重要。每個處理器體系結(jié)構(gòu)都將具有略微不同的低功耗功能,即使是在單個微控制器系列中。在這篇文章中,我們將介紹Arm
Cortex-M處理器核心的基本低功耗模式,以及嵌入式開發(fā)人員如何使用它們。
基本低能模式
基于Arm
Cortex-M處理器的每個微控制器將至少具有三種電源模式;跑步,睡覺,深度睡眠。顯然,運行模式是處理器完全通電并執(zhí)行嵌入式系統(tǒng)設(shè)計的所有操作。睡眠模式將停止CPU時鐘,但將使系統(tǒng)時鐘、閃存和外圍時鐘保持工作狀態(tài)。深度睡眠模式不僅會停止CPU時鐘,還會關(guān)閉系統(tǒng)時鐘、閃存和PLL。
微控制器供應(yīng)商能夠完全定制其低功耗模塊,以提供不同程度的低功耗。例如,NXP
Kinetis-L處理器不僅具有標(biāo)準Cortex-M低功耗模式,還具有低泄漏睡眠模式和極低泄漏睡眠模式等模式,這些模式僅消耗微安或納安的電流。
需要注意的是,微控制器進入睡眠狀態(tài)越深,就越接近完全關(guān)閉。實現(xiàn)這一點很重要,因為嵌入式開發(fā)人員使用越來越深的睡眠模式時,微控制器啟動和開始執(zhí)行指令所需的時間可能會急劇增加。一些提供深度電源模式的處理器需要與處理器引導(dǎo)序列相同的時間才能再次運行。根據(jù)你的應(yīng)用程序,這可能會對系統(tǒng)的實時性能產(chǎn)生重大影響。
進入低功耗模式
開發(fā)人員可以使用兩種不同的指令將系統(tǒng)置于低功耗狀態(tài);等待事件(WFE)和等待中斷(WFI)。當(dāng)執(zhí)行WFE指令時,它檢查系統(tǒng)控制塊(SCB)中事件位的值。如果未設(shè)置該位,則系統(tǒng)將進入睡眠模式。事件可以由外部源或使用Send
Event(SEV)指令生成。在大多數(shù)情況下,我看到或編寫的應(yīng)用程序中99%都使用了WFI指令。
當(dāng)遇到WFI指令時,處理器將立即進入SCB中配置的低功耗休眠模式,除非有掛起的中斷。一旦處理器進入休眠狀態(tài),它將在觸發(fā)中斷時喚醒。一些處理器甚至可能有一個可選的喚醒中斷控制器,允許開發(fā)人員配置允許喚醒處理器的源。這為嵌入式開發(fā)人員提供了更精細的控制,可以控制系統(tǒng)在最低功耗睡眠模式下保持多長時間。
進入所需睡眠模式的C代碼非常簡單。在大多數(shù)開發(fā)環(huán)境中,只需編寫以下代碼行:
__WFI;
如果你使用的是CMSIS,你也可以通過編寫以下命令來調(diào)用WFI函數(shù):
__WFI();
現(xiàn)在你可能想知道如何配置進入的低功耗模式。在SCB寄存器中有一個SLEEPDEEP位,如果設(shè)置為1,將使處理器進入深度睡眠模式。如果位被清除為0,處理器將進入睡眠模式。正如我前面提到的,硅供應(yīng)商通常會增強睡眠模式,因此還需要根據(jù)微控制器的設(shè)計人員配置額外的寄存器。
額外的低功耗功能
除了能夠進入低功耗模式外,還有另一個有趣的低功耗模式功能,稱為退出時睡眠。退出時睡眠允許處理器在執(zhí)行的中斷完成后立即返回睡眠狀態(tài)。這允許嵌入式開發(fā)人員通過避免在主應(yīng)用程序和中斷之間進行不必要的上下文切換來節(jié)省時間,在這種情況下,時間就是能量。允許處理器在中斷中喚醒,完成必要的工作,然后返回睡眠狀態(tài)。
結(jié)論
Cortex-M處理器上的低功耗模式是降低嵌入式系統(tǒng)能耗的主要關(guān)鍵之一。正如我們所看到的,嵌入式開發(fā)人員可以使用WFI指令將其系統(tǒng)置于低功耗模式,一旦觸發(fā)先前配置的喚醒事件或中斷,系統(tǒng)將立即喚醒。每個微控制器供應(yīng)商都能夠定制其電源模式,我們將看到微控制器在整個過程中只有三種默認電源模式,包括十幾種電源模式和復(fù)雜的狀態(tài)機,以便于處理器從一種模式移動到下一種模式。