新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 系統(tǒng)時鐘初始化需要注意的問題

系統(tǒng)時鐘初始化需要注意的問題

作者: 時間:2016-11-25 來源:網(wǎng)絡 收藏
MSP430的基本時鐘源有3個:  LFXT1CLK,  XT2CLK,   DCOCLK ; ­
其中: LFXT1CLK:可以用低頻鐘表晶體、標準晶體、陶瓷諧振器或外接時鐘源工作。 ­
­    XT2CLK:可以用標準晶體、陶瓷諧振器或外接450khz~8mhz的時鐘源工作。 ­
­    DCOCLK:它是內(nèi)部數(shù)字控制RC振蕩器,可以調(diào)節(jié)。
MSP430的3種時鐘信號是:  ACLK,  MCLK,  SMCLK;
­
其中: ACLK(輔助系統(tǒng)時鐘):可選時鐘源LFXT1CLK(只能是外部時鐘源),且一般為32768hz手表晶體)。
­MCLK(主時鐘):可選LFXT1CLK,XT2CLK, DCOCLK 三種時鐘源。用于CPU和系統(tǒng)。 ­
­   SMCLK(子時鐘):可選LFXT1CLK,XT2CLK, DCOCLK 三種時鐘源。用于外圍器件.
(Notice:­LFXT1CLK when XT2 oscillator not present on-chip.)
ACLK和MCLK的區(qū)別:ACLK一般用于低速外設 ­
         SMCLK主要用于高速外圍模塊
上電默認是內(nèi)部800K的RC振蕩器,
下面給出了切換LFXT和XT2作為系統(tǒng)時鐘的例子:
切換為LFXT:
do
{
IFG1 &= ~OFIFG;
for (i = 0xFF; i > 0; i--);
}
while ((IFG1 & OFIFG));
BCSCTL2 |= SELM_3;//選擇鐘表時鐘
切換為XT2:
BCSCTL1&=~XT2OFF;//啟動XT2時鐘
do
{
IFG1 &= ~OFIFG;
for (i = 0xFF; i > 0; i--);
}
while ((IFG1 & OFIFG));
BCSCTL2 |= SELM_2;
BCSCTL2 |= SELS;//選擇XT2時鐘
430的時鐘問題
2009年10月04日 星期日 20:59
系統(tǒng)時鐘問題:
系統(tǒng)默認使用DCO,使用外部高速晶振XT2時必須自己開啟XT2,并延時50us等待XT2起振,然后手工清除IFG1中的OFIFG位
!!!!一定要注意操作順序:打開XT2->等待XT2穩(wěn)定->切換系統(tǒng)時鐘為XT2
若后面兩步操作反了,在通常情況下不會出現(xiàn)問題,但是在電壓不穩(wěn)MCU頻繁復位的情況下,非常容易造成MCU死掉,只能掉電后重新上電才能可靠復位。
今天做了一下時鐘的實驗
對于MCLK若選擇了XT2 的話,在外部晶振XT2的使用過程中,需要特別注意的是,一旦外部晶振失效的話帶來什么樣的效果?對于這個效果,經(jīng)過測試發(fā)現(xiàn),當使用XT2作為MCLK和SMCLK的時鐘源時若XT2不穩(wěn)定,丟失一些時鐘信號時這時MCLK會自動轉(zhuǎn)換DCO作為其時鐘源,經(jīng)過測試,而SMCLK確依然用的是XT2(XT2只是波動一下,并非不工作),但是用示波器怎么測不出8M的晶振呢,測其它的怎么能測呢?不過時鐘這一點搞清楚了
振蕩器失效時,msp430也會自動將DCO選作為MCLK的時鐘源,用戶可以在DCO維持下在中斷中檢測OFIFG標志位,設置使用另外一個晶體振蕩器來臨時替代問題時鐘源倆繼續(xù)工作或完成發(fā)生警報等應急處理工作。
MSP430的時鐘周期(振蕩周期)、機器周期、指令周期之間的關系
通用知識
時鐘周期也稱為振蕩周期:定義為時鐘脈沖的倒數(shù)(時鐘周期就是直接供內(nèi)部CPU使用的晶振的倒數(shù),例如12M的晶振,它的時鐘周期就是1/12us),是計算機中的最基本的、最小的時間單位。在一個時鐘周期內(nèi),CPU僅完成一個最基本的動作。時鐘脈沖是計算機的基本工作脈沖,控制著計算機的工作節(jié)奏。時鐘頻率越高,工作速度就越快。
機器周期:在計算機中,常把一條指令的執(zhí)行過程劃分為若干個階段,每一個階段完成一項工作。每一項工作稱為一個基本操作,完成一個基本操作所需要的時間稱為機器周期。8051系列單片機的一個機器周期由6個S周期(狀態(tài)周期)組成。一個S周期=2個時鐘周期,所以8051單片機的一個機器周期=6個狀態(tài)周期=12個時鐘周期。
指令周期:執(zhí)行一條指令所需要的時間,一般由若干個機器周期組成。指令不同,所需的機器周期也不同。
專用知識:
在430中,一個時鐘周期= MCLK晶振的倒數(shù)。如果MCLK是8M,則一個時鐘周期為1/8us即為125ns;
一個機器周期 =一個時鐘周期,即430每個動作都能完成一個基本操作;
一個指令周期 = 1~6個機器周期,具體根據(jù)具體指令而定。
另:指令長度,只是一個存儲單位與時間沒有必然關系
MSP430的3種時鐘信號:MCLK系統(tǒng)主時鐘;SMCLK系統(tǒng)子時鐘;ACLK輔助時鐘。
(1)MCLK系統(tǒng)主時鐘。除了CPU運算使用此時鐘以外,外圍模塊也可以使用。MCLK可以選擇任何一個振蕩器所產(chǎn)生的時鐘信號并進行1、2、4、8分頻作為其信號源。
(2)SMCLK系統(tǒng)子時鐘。供外圍模塊使用。并在使用前可以通過各模塊的寄存器實現(xiàn)分頻。SMCLK可以選擇DCO和XT2所產(chǎn)生的時鐘信號并進行1、2、4、8分頻作為其信號源。
(3)ACLK輔助時鐘。供外圍模塊使用。并在使用前可以通過各模塊的寄存器實現(xiàn)分頻。但ACLK只能由LFXT1進行1、2、4、8分頻作為信號源。
430的一個時鐘周期=MCLK晶振的倒數(shù)。如果MCLK是8M,則一個時鐘周期為1/8微秒; 一個機器周期=一個時鐘周期,即430每個動作都能完成一個基本操作; 一個指令周期=1~6個機器周期; 也就是說執(zhí)行一條指令最多花6*1/8微秒。
_NOP()是單周期的指令,I/O口賦值是4周期的。


評論


技術專區(qū)

關閉