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