久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > avr單片機電源管理及其睡眠模式配置說明

avr單片機電源管理及其睡眠模式配置說明

作者: 時間:2016-11-18 來源:網絡 收藏
睡眠模式可以使應用程序關閉 MCU 中沒有使用的模塊,從而降低功耗。AVR 具有不同 的睡眠模式,允許用戶根據自己的應用要求實施剪裁。

/*
狀態寄存器SREG

本文引用地址:http://cqxgywz.com/article/201611/315764.htm

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

I T H S V N Z C

I:全局中斷使能位。

在I置位后,單獨的中斷使能由不同的中斷寄存器控制。若I為0,則禁止中斷。

MCU控制寄存器MCUCR

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

SM2 SE SM1 SM0 ISC11 ISC10 ISC01 ISC00

SE:MCU休眠使能位
為了使 MCU 在執行 SLEEP 指令后進入休眠模式, SE 必須置位。為了確保進入休眠模
式是程序員的有意行為,建議僅在 SLEEP 指令的前一條指令置位 SE。MCU 一旦喚醒立
即清除 SE。

SM1~SM0:MCU休眠模式選擇

SM2 SM1 SM0 休眠模式

0 0 0 空閑

0 0 1 ADC 噪聲抑制模式

0 1 0 掉電模式

0 1 1 省電模式

1 0 0 保留

1 0 1 保留

1 1 0 Standby(1) 模式

1 1 1 擴展Standby(1) 模式


空閑模式 當 SM2..0 為 000 時,SLEEP 指令將使 MCU 進入空閑模式。在此模式下, CPU 停止運
行,而 LCD 控制器、 SPI、 USART、模擬比較器、ADC、 USI、定時器 / 計數器、看門
狗和中斷系統繼續工作。這個休眠模式只停止了clkCPU 和clkFLASH ,其他時鐘則繼續工作。

象定時器溢出與 USART 傳輸完成等內外部中斷都可以喚醒 MCU。如果不需要從模擬比
較器中斷喚醒 MCU ,為了減少功耗,可以切斷比較器的電源。方法是置位模擬比較器控
制和狀態寄存器 ACSR 的 ACD。如果 ADC 使能,進入此模式后將自動啟動一次轉換。

ADC 噪聲抑制模式 當 SM2..0 為 001 時,SLEEP 指令將使 MCU 進入噪聲抑制模式。在此模式下, CPU 停
止運行,而 ADC、外部中斷、兩線接口地址配置、定時器 / 計數器 0 和看門狗繼續工作。
這個睡眠模式只停止了 clkI/O、 clkCPU 和 clkFLASH ,其他時鐘則繼續工作。

此模式提高了 ADC 的噪聲環境,使得轉換精度更高。 ADC 使能的時候,進入此模式將
自動啟動一次AD 轉換。ADC 轉換結束中斷、外部復位、看門狗復位、 BOD 復位、兩線
接口地址匹配中斷、定時器 / 計數器 2 中斷、SPM/EEPROM 準備好中斷、外部中斷 INT0
或 INT1 ,或外部中斷INT2 可以將 MCU 從 ADC 噪聲抑制模式喚醒。

掉電模式 當 SM2..0 為 010 時, SLEEP 指令將使 MCU 進入掉電模式。在此模式下,外部晶體停
振,而外部中斷、兩線接口地址匹配及看門狗 (如果使能的話)繼續工作。只有外部復
位、看門狗復位、 BOD 復位、兩線接口地址匹配中斷、外部電平中斷 INT0 或 INT1 ,或
外部中斷 INT2 可以使 MCU 脫離掉電模式。這個睡眠模式停止了所有的時鐘,只有異步
模塊可以繼續工作。

當使用外部電平中斷方式將 MCU 從掉電模式喚醒時,必須保持外部電平一定的時間。具
體請參見 P65“ 外部中斷 ” 。

從施加掉電喚醒條件到真正喚醒有一個延遲時間,此時間用于時鐘重新啟動并穩定下來。
喚醒周期與由熔絲位 CKSEL 定義的復位周期是一樣的,如 P23“ 時鐘源 ” 所示。

省電模式 當 SM2..0 為 011 時, SLEEP 指令將使 MCU 進入省電模式。這一模式與掉電模式只有
一點不同:

如果定時器 / 計數器 2 為異步驅動,即寄存器 ASSR 的 AS2 置位,則定時器 / 計數器 2 在
睡眠時繼續運行。除了掉電模式的喚醒方式,定時器 / 計數器 2 的溢出中斷和比較匹配中
斷也可以將 MCU 從休眠方式喚醒,只要 TIMSK 使能了這些中斷,而且 SREG 的全局中
斷使能位 I 置位。

如果異步定時器不是異步驅動的,建議使用掉電模式,而不是省電模式。因為在省電模式
下,若 AS2 為 0 ,則MCU 喚醒后異步定時器的寄存器數值是沒有定義的。

這個睡眠模式停止了除 clkASY 以外所有的時鐘,只有異步模塊可以繼續工作。

Standby 模式 當 SM2..0 為 110 時, SLEEP 指令將使 MCU 進入 Standby 模式。這一模式與掉電模式
唯一的不同之處在于振蕩器繼續工作。其喚醒時間只需要 6 個時鐘周期。

擴展 Standby 模式 當 SM2..0 為 111 時, SLEEP 指令將使 MCU 進入擴展的 Standby 模式。這一模式與省
掉電模式唯一的不同之處在于振蕩器繼續工作。其喚醒時間只需要 6 個時鐘周期。 .


*/
#include
#include
void Sleep_init(unsigned char mode)
{
switch(mode)
{
case 0: MCUCR&=~((1<case 1: MCUCR&=~((1<case 2: MCUCR&=~((1<case 3: MCUCR&=~(1<case 6: MCUCR|=1<case 7: MCUCR|=(1<default: MCUCR&=~((1<}

}
void SLEEP_ON(void)
{MCUCR|=1<asm("SLEEP");
}
void SLEEP_OFF(void)
{
MCUCR&=~(1<}



評論


技術專區

關閉