ADSP BF706 低功耗模式及喚醒

2021-10-20 18:24:14 字數 1483 閱讀 2971

最近在做這個工作,就先寫這一片低功耗模式和喚醒方式。

在文件中,寫有低功耗模式主要有兩種:

deep sleep mode

hibernate mode

前者主要關閉核心和系統的時鐘,當進入deep sleep mode 之後cces不能**,處理器會進入idle狀態。經測試,這種模式下,若4v的電壓,進入低功耗後功耗為40mw左右,程式中各變數的狀態保持。

後者模式,能達到最小的功耗,因為它把內部的vdd_int 電都關閉了,當喚醒之後,整個程式會重新執行一遍,這樣的話沒有存到flash的值就會重新清空。這種模式下的功耗大約是deep sleep mode 的一半。喚醒之後從什麼狀態開始執行,可以從文件中一張圖可以看到:

從上面這種圖就可以看到,deepsleep 可以通過喚醒事件喚醒到正常狀態,hibernate模式喚醒之後是從reset開始執行的。

對於喚醒方式,文件中寫有:

為了使用者使用便捷,自然是當串列埠接收到資料的時候就可以從低功耗模式喚醒並識別指令。

在上圖,兩種模式都可以使用ws0,ws1,ws2三種方式,通過引腳的高低電平來喚醒。如何才能串列埠發指令把低功耗模式喚醒呢,要知道在低功耗模式下,串列埠是無法工作的。

所以,就想了個辦法,如果將喚醒引腳和串列埠的rx連線在一起,是不是在接收到指令的時候就會有高低電平呢。

傳送指令會有協議,第一位為啟動位,電平由高到低。如果設定喚醒引腳低電平喚醒,那傳送位元組的時候低功耗模式就會被喚醒,但是,喚醒之後不一定能識別這個傳送的指令,因為啟動位被用來作為喚醒作用了… …

當我用波特率115200的串列埠喚醒低功耗,是只能喚醒無法響應指令的。當波特率較低的時候,比如9600,那可以做到既喚醒又響應指令。

**如下:

在這裡插入**片void enterdeepsleep(void)

```adi_pwr_setpowermode(0,adi_pwr_mode_deep_sleep);這是使用的是cces-bf706例程中的函式,平台自己整合有這個函式。這個函式裡面的引數也可以改變低功耗模式,比如把adi_pwr_mode_deep_sleep 換成 adi_pwr_mode_hibernate,就是hibernate模式。

上面暫存器的配置是根據文件中來配置中斷源的選擇以及喚醒方式。

在設定喚醒方式之前,需要配置引腳為復用功能的引腳,中斷事件僅:dpm0 event。

低功耗這一塊暫時就是這些了,至於低功耗後的電流,功耗多少就根據電路的實際情況來測吧。adsp的功耗模式也不多,就兩種,都是比較好操作的,喚醒方式也是比較明白的。

halt低功耗模式

1.stm8l152有5種低功耗模式,wait mode,low power run mode,low power wait mode,active halt mode,halt mode.2.在halt模式下,cpu和外設時鐘停止,可以通過外部中斷或者復位來喚醒。3.本實驗設計為 led燈亮,緊接...

低功耗等待模式

1.該模式在低功耗執行模式的基礎上,通過wfe指令進入。指定的事件到達時,從該模式退出,進入低功耗等待模式。cpu停止工作,中斷禁止。2.本實驗無明顯現象 clk config 切換lsi為主時鐘 clk hsicmd disable 關閉hsi等所有不使用的外設,adc在此模式下無效 關閉所有中斷...

DDR低功耗模式

ddr規格 ddr工作狀態圖 ddr 重新整理描述 電特性 工作模式簡介 1.1 自重新整理模式 self refresh mode ddr4 sdram中自重新整理超市是用來儲存儲存陣列中的資料,即使在系統中其他的部分都已經斷電的情況下,仍可以保持其功能。dram內部存在乙個計數器來調整自重新整理...