MSP430主系統(tǒng)時鐘以及430的低功耗設(shè)置
如何將系統(tǒng)時鐘設(shè)置到外部高頻晶體振蕩器,430的MCLK默認(rèn)的是DCO的,如何安全的從DCO切換到外部晶體振蕩器,這是一個很重要的步驟,因為經(jīng)過此步驟,可以極大地提高430的處理能力,DCO在內(nèi)部,可以為cpu提供強勁穩(wěn)定的時鐘
#include
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
volatile unsigned int i;
P5DIR |=BIT4;//設(shè)置P5.4為輸出
P5SEL |=BIT4;//設(shè)置片內(nèi)主系統(tǒng)時鐘的輸出
//由這段代碼設(shè)置如何將DCO切換到高頻晶體振蕩器
BCSCTL1 &=~XT2OFF;//~0x80
do
{
IFG1 &=~OFIFG;//OFIFG為1表示外部晶體振蕩器失效
for(i = 0xff;i>0;i--);//IFG1是Interrupt Flag 1
}
while((IFG1 & OFIFG));//表示振蕩器已經(jīng)起振
BCSCTL2 |= SELM_2;//#define SELM_2 (0x80) /* MCLK Source Select 2: XT2CLK/LFXTCLK */
while(1);
}
低功耗模式的設(shè)置:
msp430內(nèi)部有4種低功耗模式,在進入低功耗模式的時候,cpu停止,一般是由外部事件的響應(yīng)才能喚醒cpu
由于IAR軟件比較給力,所以進入低功耗模式的常用格式
比如:
進入低功耗模式2:LPM2;
退出低功耗模式2:LPM2_EXIT;
開啟外部中斷:_EINT():
關(guān)閉外部中斷:_DINIT();
430外部中斷的模式
#include
main( void )
{
BCSCTL1 "=DIVA_2;//(0x20) /* ACLK Divider 2: /4 */
WDTCTL = WDT_ADLY_1000;//直接將看門狗定時器變成定時器,定時時間是1000毫秒
IE1 =WDTIE;//打開定時器中斷
P2DIR |= BIT3;
while(1)
{
unsigned int i;
_BIS_SR(LPM3_bits +GIE);//進入低功耗模式3,這種時候,cpu停止工作,同時打開總的中斷 //_BIS_SR是一個本增函數(shù),
//_BIS_SR()是一個本增函數(shù),通過本函數(shù)可以對寄存器進行直接的操作
//這句話等價于_EINT();
// LPM3;
P2OUT &=~BIT3;//相當(dāng)于把第五位輸出0
for(i = 180000;i>0;i--);//延時
P2OUT |= BIT3;//p3.5輸出1
}
}
#pragma vector =WDT_VECTOR
__interrupt void watchdag_timer(void)
{
//__BIC_SR_IRQ(LPM3_bits);//從中斷中,將低功耗模式退出,將cpu從睡眠模式喚醒
LPM3_EXIT;//退出低功耗模式
}