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