電源管理及睡眠模式
睡眠模式可以使應用程序關閉MCU 中沒有使用的模塊,從而降低功耗。AVR 具有不同
的睡眠模式,允許用戶根據自己的應用要求實施剪裁。
進入睡眠模式的條件是置位寄存器MCUCR 的SE,然后執(zhí)行SLEEP 指令。具體哪一種
模式( 空閑模式、ADC 噪聲抑制模式、掉電模式、省電模式、Standby 模式和擴展Standby
模式) 由MCUCR 的SM2、SM1 和SM0 決定,如Table 13 所示。使能的中斷可以將進
入睡眠模式的MCU 喚醒。經過啟動時間,外加4 個時鐘周期后, MCU 就可以運行中斷
例程了。然后返回到SLEEP 的下一條指令。喚醒時不會改變寄存器文件和SRAM 的內
容。如果在睡眠過程中發(fā)生了復位,則MCU 喚醒后從中斷向量開始執(zhí)行。
下面的是控制寄存器:
下面是休眠模式的選擇:
? Bit 6 – SE: 休眠使能
為了使MCU 在執(zhí)行SLEEP 指令后進入休眠模式, SE 必須置位。為了確保進入休眠模
式是程序員的有意行為,建議僅在SLEEP 指令的前一條指令置位SE。MCU 一旦喚醒立
即清除SE。
? Bits 7, 5, 4 – SM2..0: 休眠模式選擇位 2、1 和0
如 Table 13 所示,這些位用于選擇具體的休眠模式。
然后介紹一下下每個模式的情況:(這里還是挺重要而,好好看看,這個是實話啊~~哈哈,說實話哦~~~有好幾個我都不怎么會,呵呵,要是我會了,回頭我給補上)
空閑模式
當SM2..0 為000 時, SLEEP 指令將使MCU 進入空閑模式。在此模式下,CPU 停止運
行,而LCD 控制器、SPI、USART、模擬比較器、ADC、USI、定時器/ 計數器、看門
狗和中斷系統(tǒng)繼續(xù)工作。這個休眠模式只停止了clkCPU和clkFLASH,其他時鐘則繼續(xù)工作。
象定時器溢出與USART 傳輸完成等內外部中斷都可以喚醒MCU。如果不需要從模擬比
較器中斷喚醒MCU,為了減少功耗,可以切斷比較器的電源。方法是置位模擬比較器控
制和狀態(tài)寄存器ACSR 的ACD。如果ADC 使能,進入此模式后將自動啟動一次轉換。
ADC 噪聲抑制模式
當SM2..0 為001 時, SLEEP 指令將使MCU 進入噪聲抑制模式。在此模式下,CPU 停
止運行,而ADC、外部中斷、兩線接口地址配置、定時器/ 計數器0 和看門狗繼續(xù)工作。
這個睡眠模式只停止了clkI/O、clkCPU 和clkFLASH,其他時鐘則繼續(xù)工作。
此模式提高了ADC 的噪聲環(huán)境,使得轉換精度更高。ADC 使能的時候,進入此模式將
自動啟動一次AD 轉換。ADC 轉換結束中斷、外部復位、看門狗復位、BOD 復位、兩線
接口地址匹配中斷、定時器/ 計數器2 中斷、SPM/EEPROM 準備好中斷、外部中斷INT0
或INT1,或外部中斷INT2 可以將MCU 從ADC 噪聲抑制模式喚醒。
掉電模式
當SM2..0 為010 時, SLEEP 指令將使MCU 進入掉電模式。在此模式下,外部晶體停
振,而外部中斷、兩線接口地址匹配及看門狗(如果使能的話)繼續(xù)工作。只有外部復
位、看門狗復位、BOD 復位、兩線接口地址匹配中斷、外部電平中斷INT0 或INT1,或
外部中斷INT2 可以使MCU 脫離掉電模式。這個睡眠模式停止了所有的時鐘,只有異步
模塊可以繼續(xù)工作。
當使用外部電平中斷方式將MCU 從掉電模式喚醒時,必須保持外部電平一定的時間。
從施加掉電喚醒條件到真正喚醒有一個延遲時間,此時間用于時鐘重新啟動并穩(wěn)定下來。
喚醒周期與由熔絲位CKSEL 定義的復位周期是一樣的。
省電模式
當SM2..0 為011 時, SLEEP 指令將使MCU 進入省電模式。這一模式與掉電模式只有
一點不同:
如果定時器/ 計數器2 為異步驅動,即寄存器ASSR 的AS2 置位,則定時器/ 計數器2 在
睡眠時繼續(xù)運行。除了掉電模式的喚醒方式,定時器/ 計數器2 的溢出中斷和比較匹配中
斷也可以將MCU 從休眠方式喚醒,只要TIMSK 使能了這些中斷,而且SREG 的全局中
斷使能位I 置位。
如果異步定時器不是異步驅動的,建議使用掉電模式,而不是省電模式。因為在省電模式
下,若AS2 為0,則MCU 喚醒后異步定時器的寄存器數值是沒有定義的。
這個睡眠模式停止了除clkASY 以外所有的時鐘,只有異步模塊可以繼續(xù)工作。
Standby 模式
當SM2..0 為110 時, SLEEP 指令將使MCU 進入Standby 模式。這一模式與掉電模式
唯一的不同之處在于振蕩器繼續(xù)工作。其喚醒時間只需要6 個時鐘周期。
擴展Standby 模式
當SM2..0 為111 時, SLEEP 指令將使MCU 進入擴展的Standby 模式。這一模式與省
掉電模式唯一的不同之處在于振蕩器繼續(xù)工作。其喚醒時間只需要6 個時鐘周期。
下面的就是在不同模式下的時鐘和喚醒源