MSP430時(shí)鐘分析
我一共用了兩種系列的430單片機(jī),MSP430F149和MSP430F437,系列的不同,時(shí)鐘的設(shè)置也略有不同,下面從149的時(shí)鐘一步一步來(lái)說(shuō)吧!
在f149中,基礎(chǔ)時(shí)鐘是被叫做basic clock module,
其一共有三個(gè)時(shí)鐘源:
一個(gè)LFXT1CLK,為低速/高速晶振源,通常接32.768khz,也可以接(400khz~8Mhz)
一個(gè)為XT2CLK,外接標(biāo)準(zhǔn)高速晶振,通常是接8Mhz,也可以接(400khz~8Mhz)
還有一個(gè)叫DCOCLK,為內(nèi)部晶振,有RC震蕩回路構(gòu)成。
在430內(nèi)部一共有三個(gè)時(shí)鐘系統(tǒng)
一個(gè)為ACLK,通常由LFXT1CLK作為時(shí)鐘源,可以通過(guò)軟件控制改時(shí)鐘的分頻系樹(shù)。
一個(gè)為MCLK,即Main CLK,一聽(tīng)就知道是主時(shí)鐘單元,為系統(tǒng)內(nèi)核提供時(shí)鐘,它可以通過(guò)軟件從三個(gè)時(shí)鐘源選擇,
一個(gè)為SMCLK,稱(chēng)作輔助主時(shí)鐘,也是可以由軟件選擇時(shí)鐘源。
Basic Clock Module Registers(基礎(chǔ)時(shí)鐘寄存器)
DCO control register DCOCTL
Basic clock system control 1 BCSCTL1
Basic clock system control 2 BCSCTL2
SFR interrupt enable register 1 IE1
SFR interrupt flag register 1 IFG1
DCOCTL寄存器是用來(lái)配置DCOCLK的,這里暫且不提
BCSCTL1 與BCSCTL2 寄存器則顯得比較重要,這兩個(gè)寄存器控制了你整個(gè)系統(tǒng)中430的工作時(shí)鐘系統(tǒng)。
BCSCTL1寄存器:
7 6 54 3 210
XT2OFF XTS DIVAx XT5V RSELx
XT20FF: 用來(lái)控制XT2晶振的開(kāi)啟和關(guān)閉,置1時(shí)關(guān)閉,置0時(shí),開(kāi)啟
XTS: 用來(lái)選擇低速晶體的工作模式(可忽略)
DIVAx: 用來(lái)選擇ACLK的分頻系數(shù)
XT5V: 無(wú)用
RSELx: 選擇電阻(沒(méi)用過(guò),一般置0)
BCSCTL2
7 6 5 4 3 2 1 0
SELMx DIVMx SELS DIVSx DOCR
SELMx:選擇MCLK的時(shí)鐘源,
00 DCOCLK
01 DCOCLK
10 XT2CLK
11 LFX1CLK
DIVMx: MCLK的分頻
00 1分頻
01 2分頻
10 4分頻
11 8分頻
SELS:SMCLK的時(shí)鐘源,0時(shí)為內(nèi)置DCO,1時(shí)為外置高速XT2
DIVSx:SMCLK的分頻,同MCLK分頻
DCOR:控制頻率的電阻是內(nèi)部還是外部(沒(méi)用過(guò))
實(shí)例初始化程序
void Init_CLK(void)
{
unsigned int i;
BCSCTL1=0x00;//XT2開(kāi)啟,LFXTCLK為低頻模式,ACLK分頻為0
do
{
IFG1&=~OFIFG;
for(i=0x20;i>0;i--);
}
while((IFG1&OFIFG)==OFIFG); //當(dāng)OSCFault=1 即晶振不起振則等待
BCSCTL2=0X00;
BCSCTL2|=SELM1; //MCLK 時(shí)鐘為XT2,
BCSCTL2|=SELS; //SMCLK時(shí)鐘為XT2
}
評(píng)論