MSP430 頻率(時鐘)配置
MSP430時鐘:
1、在MSP430單片機中壹***有四個時鐘源:
(1)LFXT1CLK,為低速/高速晶振源,通常接32.768kHz晶振
(2)XT2CLK,可選高頻振蕩器,外接標準高速晶振,通常是接8Mhz,也可以接400kHz~16Mhz;
(3)DCOCLK,數控振蕩器,為內部時鐘,由RC震蕩回路構成,受溫度和電壓的影響較大;若外部不接穩定的晶振電路,直接由內部時鐘工作,則會因環境變化而導致性能不穩定。
(4)VLOCLK,內部低頻振蕩器,12kHz標準振蕩器。(要得到標準的12k則必須外接32768等晶振)
2、在MSP430單片機內部壹***有三個時鐘系統:
(1)ACLK:輔助時鐘,通常由LFXT1CLK或VLOCLK作為時鐘源,可以通過軟件控制更改時鐘的分頻系數;
(2)MCLK:主時鐘,為系統內核提供時鐘,它可以通過軟件從四個時鐘源選擇或者從四個時鐘源分頻後選擇為主時鐘;
(3)SMCLK:子時鐘,也是可以由軟件選擇時鐘源。
3、MSP430的時鐘設置包括3個寄存器,DCOCTL、BCSCTL1、BCSCTL2、BCSCTL3
DCOCTL,DCO控制寄存器,地址為56H,初始值為60H
DCO2 DCO1 DCO0 MOD4 MOD3 MOD2 MOD1 MOD0
DCO0~DCO2: DCO Select Bit,定義了8種頻率之壹,而頻率由註入直流發生器的電流定義。
MOD0~MOD4: Modulation Bit,頻率的微調。
壹般不需要DCO的場合保持默認初始值就行了。
BCSCTL1,地址為57H,初始值為84H
XT2OFF XTS DIVA1 DIVA0 XT5V RSEL2 RSEL1 RSEL0
RSEL0~RSEL2: 選擇某個內部電阻以決定標稱頻率.0最低,7最高。
XT5V: 1.
DIVA0~DIVA1:選擇ACLK的分頻系數。DIVA=0,1,2,3,ACLK的分頻系數分別是1,2,4,8;
XTS: 選擇LFXT1工作在低頻晶體模式(XTS=0)還是高頻晶體模式(XTS=1)。
XT2OFF: 控制XT2振蕩器的開啟(XT2OFF=0)與關閉(XT2OFF=1)。
正常情況下把XT2OFF復位就可以了.
BCSCTL2,地址為58H,初始值為00H
SEM1 SELM0 DIVM1 DIVM0 SELS DIVS1 DIVS0 DCOR
DCOR: 0,選擇內部電阻;1,選擇外部電阻
DIVS0~DIVS1: DIVS=0,1,2,3對應SMCLK的分頻因子為1,2,4,8
SELS: 選擇SMCLK的時鐘源, 0:DCOCLK; 1:XT2CLK/LFXTCLK.
DIVM0~1: 選擇MCLK的分頻因子, DIVM=0,1,2,3對應分頻因子為1,2,4,8.
SELM0~1: 選擇MCLK的時鐘源, 0,1:DCOCLK, 2:XT2CLK, 3:LFXT1CLK
我用的時候壹般都把SMCLK與MCLK的時鐘源選擇為XT2。
其它:
1. LFXT1: 壹次有效的PUC信號將使OSCOFF復位,允許LFXT1工作,如果LFXT1信號沒有用作SMCLK或MCLK,可軟件置OSCOFF關閉LFXT1.
2. XT2: XT2產生XT2CLK時鐘信號,如果XT2CLK信號沒有用作時鐘MCLK和SMCLK,可以通過置XT2OFF關閉XT2,PUC信號後置XT2OFF,即XT2的關閉的。
3. DCO振蕩器:振蕩器失效時,DCO振蕩器會自動被選做MCLK的時鐘源。如果DCO信號沒有用作SMCLK和MCLK時鐘信號時,可置SCG0位關閉DCO直流發生器。
4. 在PUC信號後,由DCOCLK作MCLK的時鐘信號,根據需要可將MCLK的時鐘源另外設置為LFXT1或XT2,設置順序如下:
(1)清OSCOFF/XT2
(2)清OFIFG
(3)延時等待至少50uS
(4)再次檢查OFIFG,如果仍置位,則重復(1)-(4)步,直到OFIFG=0為止。
(5)設置BCSCTL2的相應SELM。
實例分析
1、CPU運行在VLO時鐘下:
這是最慢的時鐘,在約12千赫茲下運行。因此,我們將通過可視化的LED閃爍的紅色慢慢地在約每3秒鐘率。我們可以讓時鐘系統默認這種狀態,設置專門來操作VLO。我們將不使用任何ALCK外設時鐘在此實驗室工作,但妳應該認識到,ACLK來自VLO時鐘。
#include<msp430g2131.h>
/*---------------------------------------------------------------------------------------------*/
Void main()
{
WDTCTL = WDTPW + WDTHOLD; // 關閉看門狗定時器
BCSCTL1 |= XT2OFF; //XT2關閉 ACLK=32768hz DCO為默認值約800k
BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO =12khz(大約)
// BCSCTL3 |= LFXT1S_0; // LFXT1 = 32.768khz (大約)
IE1 &= ~OFIE; //清除時鐘錯誤中斷
IFG1 &= ~OFIFG; // Clear OSCFault flag
BCSCTL2 |= SELM_3+SELS;// mclk時鐘源為LFXT1CLK,smclk=LFXT1CLK=32768hz
// BCSCTL2 |= SELM_0+SELS; // mclk時鐘源為DCOCLK,smclk=LFXT1CLK=32768hz
__delay_cycles(1000); //小延時等待振蕩穩定
P1DIR=BIT0; //P1.0配置輸出
P1OUT=BIT0; //P1.0輸出高電平
While()
{
P1OUT^= BIT0; //P1.0電平反轉;
_delay_cycles(100000);
}
}
/*---------------------------------------------------------------------------------------------*/