單片機中,功耗最低的單片機要MSP430單片機,這是做手持設備最優(yōu)選擇,MSP430中,用到5種低功耗,LPM0,LPM1,LPM2,LPM3,LPM4,這五種低功耗各種解釋如下 :
CPU的活動狀態(tài)稱為AM(ACTVE MODE)模式。其中AM耗電最大,LPM4耗電最省,僅為0.1uA。另外工作電壓對功耗的影響:電壓越低功耗也越低。 系統(tǒng)PUC復位后,MSP430進入AM狀態(tài)。在AM狀態(tài),程序可以選擇進入任何一種低功耗模式,然后在適當?shù)臈l件下,由外圍模塊的中斷使CPU退出低功耗模式,返回AM模式,再由AM模式選擇進入相應的低功耗模式,如此類推。
CPU的結構:16個寄存器R0-R15,16位算數(shù)邏輯單元ALU和一個指令控制單元。
。寄存器中R4-R15是通用寄存器沒有特殊功能。
R0-R3具有特殊性:
R0:程序計數(shù)器PC(Program counter),存放著下一條要從程序存儲器中取出的指令的地址。
R1:堆棧指針SP(Stack Point),系統(tǒng)堆棧在系統(tǒng)調用子函數(shù)或者進入中斷服務程序時,保護程序計數(shù)器PC。
R2:狀態(tài)寄存器SR(State Register):
R3:常數(shù)發(fā)生器
狀態(tài)寄存器SR
工作模式的選擇由狀態(tài)寄存器SR中的SCG1、SCG0、OSCOFF、CPUOFF位控制。由于在CPU的頭文件中對CPU內的各寄存器和模塊的各種工作模式都作了詳盡的定義,所以編程時盡可能的利用就是了。如:要進入低功耗模式0,可在程序中直接寫:LPM0; 。進入低功耗模式4,可以寫:LMP4;就可以了。退出低功耗模式如下:
LPM0_EXIT; //退出低功耗模式0
LPM4_EXIT; //退出低功耗模式4
LPM0:CPU停止工作,MCLK時鐘停止,SMCLK、ACLK時鐘還在工作。
LPM1:CPU停止工作,MCLK時鐘停止,在活動模式如果DCO沒有作為MCLK和SMCLK時鐘時,則直流發(fā)生器被禁止,否則就保持活動狀態(tài),SMCLK、ACLK時鐘依然還在工作。
LPM2:CPU停止工作,MCLK、SMCLK時鐘停止工作,如果DCO沒有作為MCLK、SMCLK,自動被禁止直流發(fā)生器保持有效,ACLK還處于工作中。
LPM3:CPU停止工作,MCLK、SMCLK時鐘停止工作,DCO時鐘也停止工作,僅ACLK時鐘還處于工作狀態(tài)。
LPM4:CPU停止工作,MCLK、SMCLK時鐘停止工作,DCO時鐘也停止工作,ACLK也停止工作。此時功耗最低。
一般情況下,處理器進入低功耗模式后,由中斷來喚醒,外部中斷或內部中斷。
如果想進入低功耗1,則程序可以為:_BIS_SR(LPM1_bits + GIE);退出低功耗1,則程序可以為:LPM1_EXIT; 進入其他低功耗和退出低功耗一樣。
低功耗執(zhí)行的一個過程:程序從main函數(shù)入口開始執(zhí)行程序,當遇到進入低功耗程序時,如:_BIS_SR(LPM1_bits + GIE);此時相當于下面的程序處于停止狀態(tài)不再執(zhí)行,當有一個中斷來到,則會進入中斷處理程序,自動退出低功耗,如果在中斷中沒有沒有退出低功耗,當中斷服務程序執(zhí)行完成后,又會重新進入低功耗。
不同的低功耗模式就是配置不同的SCG1,SCG0,OscOff,CPUOff.
SCG1:復位使能SMCLK,置位則禁止SMCLK.
SCG0:復位激活DCO,置位且DCOCLK不用于MCLK或SMCLK時禁止DCO。
OscOff:復位則LFXT激活,置位且LFXT不用于MCLK或SMCLK時,LFXT振蕩器禁止--對應著ACLK。
CPUOff:復位則MCLK激活,置位則MCLK停止。
解釋:
(1)POR:POWER ON RESET.上電或復位信號都可以發(fā)生POR。
PUC:POWER UP CLEAR.POR可以出發(fā)PUC,另外看門狗的事件可以出發(fā)PUC。
(2)AM:全部活動
LPM0:CPUOFF=1,CPU被禁止,即MCLK被禁止。
LPM1:CPUOFF=1,SCG0=1。CPU-MCLK禁止,且若DCO未用做MCLK或SMCLK,則DCO禁止。
LPM2:CPUOFF=1,SCG1=1。CPU-MCLK禁止,SMCLK禁止。(DCO未用作MCLK,SMCLK則自動禁止)
LPM3:CPUOFF=1,SCG1=1,SCG0=1.CPU-MCLK禁止,SMCLK禁止,DCO禁止。
LPM4:CPUOFF=1,SCG1=1,SCG0=1,OSCOFF=1.全部禁止,包括ACLK也禁止。
系統(tǒng)工作原理:
單片機各個模塊運行完全獨立。定時器,IO,AD,看門狗等都可以在主CPU休眠的狀態(tài)下獨立運行。
軟件將CPU設定到某一低功耗工作模式下,在需要時使用中斷將CPU從休眠狀態(tài)中喚醒,完成工作后又進入相應的休眠狀態(tài)。
系統(tǒng)響應中斷的過程:如果在中斷處理子程序中修改堆棧中SR的狀態(tài),那么中斷返回后將不再是原來的SR狀態(tài)。
PC入棧,SR入棧。
中斷向量賦給PC。
GIE,CPUOFF,OSCOFF,SCG1清除。
IFG標志位清除。
執(zhí)行中斷處理子程序。
執(zhí)行RETI指令,中斷返回。
SR出棧
PC出棧
進入LPM3:SCG1+SCG0+CPUOFF:也就是只有ACLK是活動的,但是仍支持WDT,TIMER.
編譯器支持直接對位賦值:_intrinsic unsigned short _BIS_SR(unsigned short),位于in430.h
同理要清除SR中某一位的話就用 _BIC_SR();
評論
查看更多