與51、AVR等單片機(jī)不同msp430的時(shí)鐘信號(hào)源有LFXT1,XT2,DCO三種。
1、LFXT1:可接高速和低速晶振,在低速模式下,它可以外接32k的晶振而不需要負(fù)載電容,這種方式較為常見主要用來(lái)為ACLK提供低速的時(shí)鐘信號(hào),以供低速外設(shè)使用。
2、XT2:高速振蕩器,它可以接一個(gè)0.4~16M的晶振,它相當(dāng)于高速模式下的LFXT1。通常將它配置成一個(gè)高速的振蕩源,為MCLK何SMCLK提供高速時(shí)鐘信號(hào)。
3、DCO:內(nèi)部數(shù)字控制振蕩器,它的頻率可以通過DCOCLK進(jìn)行配置。在系統(tǒng)PUC之后,DCOx=7,MODx=3,表示選擇了最高的頻率。
前面介紹了MSP430中有三個(gè)個(gè)時(shí)鐘信號(hào)源,MSP430的時(shí)鐘信號(hào)也有三種主時(shí)鐘MCLK,子系統(tǒng)時(shí)鐘SMCLK,輔助時(shí)鐘ACLK。
其中MCLK是用給系統(tǒng)使用的,SMCLK用給高速外設(shè)使用的,而ACLK主要用給低速外設(shè)使用。
在系統(tǒng)PUC之后,默認(rèn)SMCLK與MCLK都以DCO作為時(shí)鐘源,震蕩頻率在1.1M左右,ACLK以LFXT1作為時(shí)鐘源,工作在LF模式下內(nèi)部6pF的負(fù)載電容。
一般情況下選擇XT2作為主時(shí)鐘,時(shí)鐘模塊初始化程序如下:
WDTCTL=WDTPW+WDTHOLD;//關(guān)閉看門狗
/*------選擇系統(tǒng)主時(shí)鐘為8MHz-------*/
BCSCTL1&=~XT2OFF;//打開XT2高頻晶體振蕩器
do
{
IFG1&=~OFIFG;//清除晶振失敗標(biāo)志
for(i=0xFF;i》0;i--);//等待8MHz晶體起振
}
while((IFG1&OFIFG));//晶振失效標(biāo)志仍然存在?
BCSCTL2|=SELM_2+SELS;//主時(shí)鐘和從時(shí)鐘都選擇高頻晶振
……………………………………………………。
注意:a.最好將IFG1&=~OFIFG;放入do –while循環(huán)中,我調(diào)了好一陣程序,發(fā)現(xiàn)IFG1似乎置位之
后不能自動(dòng)復(fù)位。
b.在XT2出現(xiàn)錯(cuò)誤的情況下將XT2設(shè)定為MCLK SMCLK的時(shí)鐘源,單片機(jī)會(huì)自動(dòng)的把時(shí)鐘源更換
為DCO振蕩器。當(dāng)時(shí)鐘信號(hào)丟失50us時(shí),振蕩器失效。如果MCLK信號(hào)來(lái)自LFXT1或者XT2,
那么MSP430自動(dòng)把MCLK的信號(hào)切換為DCO,這樣可以保證程序繼續(xù)運(yùn)行。MSP430不對(duì)低頻
模式的LFXT1進(jìn)行監(jiān)測(cè)。
b.BCSCTL2=SELM_2+SELS;語(yǔ)句必須放在while之后,因?yàn)楫?dāng)XT2沒有起振之前,XT2處于錯(cuò)誤
階段,因此在XT2沒有起振之前將它設(shè)定為主時(shí)鐘與子系統(tǒng)時(shí)鐘后,單片機(jī)會(huì)自動(dòng)的將DCO
設(shè)定為SMCLK MCLK的時(shí)鐘源。