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





