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