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