MSP430單片機(jī)的時鐘問題
時鐘簡介:
時鐘周期也稱為振蕩周期:定義為時鐘脈沖的倒數(shù)(時鐘周期就是直接供內(nèi)部CPU使用的晶振的倒數(shù),例如12M的晶振,它的時鐘周期就是1/12us),是計算機(jī)中的最基本的、最小的時間單位。在一個時鐘周期內(nèi),CPU僅完成一個最基本的動作。時鐘脈沖是計算機(jī)的基本工作脈沖,控制著計算機(jī)的工作節(jié)奏。時鐘頻率越高,工作速度就越快。機(jī)器周期:在計算機(jī)中,常把一條指令的執(zhí)行過程劃分為若干個階段,每一個階段完成一項工作。每一項工作稱為一個基本操作,完成一個基本操作所需要的時間稱為機(jī)器周期。8051系列單片機(jī)的一個機(jī)器周期由6個S周期(狀態(tài)周期)組成。一個S周期=2個時鐘周期,所以8051單片機(jī)的一個機(jī)器周期=6個狀態(tài)周期=12個時鐘周期。指令周期:執(zhí)行一條指令所需要的時間,一般由若干個機(jī)器周期組成。指令不同,所需的機(jī)器周期也不同。
MSP430
單片機(jī)上電后,如果不對時鐘系統(tǒng)進(jìn)行設(shè)置,默認(rèn)800 kHz的DCOCLK為MCLK和SMCLK的時鐘源,LFXTl接32768 Hz晶體,工作在低頻模式(XTS=O)作為ACLK的時鐘源。CPU的指令周期由MCLK決定,所以默認(rèn)的指令周期就是1/800 kHz="1".25μs。要得到lμs的指令周期需要調(diào)整DCO頻率,即MCLK=1 MHz,只需進(jìn)行如下設(shè)置:BCSCTLl=XT20FF+RSEL2;//關(guān)閉XT2振蕩器,設(shè)定DCO頻率為1 MHz
DCOCTL=DCO2//使得單指令周期為lμs
MSP430的時鐘周期(振蕩周期)、機(jī)器周期、指令周期之間的關(guān)系
在430中,一個時鐘周期 = MCLK晶振的倒數(shù)。如果MCLK是8M,則一個時鐘周期為1/8us;一個機(jī)器周期 = 一個時鐘周期,即430每個動作都能完成一個基本操作;一個指令周期 = 1~6個機(jī)器周期,具體根據(jù)具體指令而定。另:指令長度,只是一個存儲單位與時間沒有必然關(guān)系。 MSP430根據(jù)型號的不同最多可以選擇使用3個振蕩器。我們可以根據(jù)需要選擇合適的振蕩頻率,并可以在不需要時隨時關(guān)閉振蕩器,以節(jié)省功耗。這3個振蕩器分別為:
(1)DCO 數(shù)控RC振蕩器。它在芯片內(nèi)部,不用時可以關(guān)閉。DCO的振蕩頻率會受周圍環(huán)境溫度和MSP430工作電壓的影響,且同一型號的芯片所產(chǎn)生的頻率也不相同。但DCO的調(diào)節(jié)功能可以改善它的性能,他的調(diào)節(jié)分為以下3步: a:選擇BCSCTL1.RSELx確定時鐘的標(biāo)稱頻率;
b:選擇DCOCTL.DCOx在標(biāo)稱頻率基礎(chǔ)上分段粗調(diào);
c:選擇DCOCTL.MODx的值進(jìn)行細(xì)調(diào)。
(2)LFXT1 接低頻振蕩器。典型為接32768HZ的時鐘振蕩器,此時振蕩器不需要接負(fù)載電容。也可以接450KHZ~8MHZ的標(biāo)準(zhǔn)晶體振蕩器,此時需要接負(fù)載電容。
(3)XT2 接450KHZ~8MHZ的標(biāo)準(zhǔn)晶體振蕩器。此時需要接負(fù)載電容,不用時可以關(guān)閉。
低頻振蕩器主要用來降低能量消耗,如使用電池供電的系統(tǒng),高頻振蕩器用來對事件做出快速反應(yīng)或者供CPU進(jìn)行大量運算。當(dāng)然高端430還有鎖頻環(huán)(FLL)及FLL+等模塊,但是初步不用考慮那么多。
MSP430的3種時鐘信號:MCLK系統(tǒng)主時鐘;SMCLK系統(tǒng)子時鐘;ACLK輔助時鐘。
(1)MCLK系統(tǒng)主時鐘。除了CPU運算使用此時鐘以外,外圍模塊也可以使用。MCLK可以選擇任何一個振蕩器所產(chǎn)生的時鐘信號并進(jìn)行1、2、4、8分頻作為其信號源。
(2)SMCLK系統(tǒng)子時鐘。供外圍模塊使用。并在使用前可以通過各模塊的寄存器實現(xiàn)分頻。SMCLK可以選擇任何一個振蕩器所產(chǎn)生的時鐘信號并進(jìn)行1、2、4、8分頻作為其信號源。
(3)ACLK輔助時鐘。供外圍模塊使用。并在使用前可以通過各模塊的寄存器實現(xiàn)分頻。但ACLK只能由LFXT1進(jìn)行1、2、4、8分頻作為信號源。
PUC復(fù)位后,MCLK和SMCLK的信號源為DCO,DCO的振蕩頻率默認(rèn)為800KHZ。ACLK的信號源為LFXT1。
MSP430內(nèi)部含有晶體振蕩器失效監(jiān)測電路,監(jiān)測LFXT1(工作在高頻模式)和XT2輸出的時鐘信號。當(dāng)時鐘信號丟失50us時,監(jiān)測電路捕捉到振蕩器失效。如果MCLK信號來自LFXT1或者XT2,那么MSP430自動把MCLK的信號切換為DCO,這樣可以保證程序繼續(xù)運行。但MSP430不對工作在低頻模式的LFXT1進(jìn)行監(jiān)測。
為了實現(xiàn)具體的時鐘可以設(shè)置跟時鐘相關(guān)的寄存器,在低端430中是DCOCTL、BCSCTL1和BCSCTL2三個寄存器。而對于高端的430,則要考慮SCFI0、SCFQCTL、FLL_CTL0、FLL_CTL1和BTCTL等幾個寄存器。
在實際應(yīng)用時,如果要求系統(tǒng)跑得快些,時鐘精準(zhǔn)些,就設(shè)置成XT2一般是8MHz;如果沒什么特別的要求,就用系統(tǒng)DCO提供的1M的頻率,如果是要求低功耗或時間相關(guān)的時鐘源,最好用32768Hz的外部晶振。
ACLK是輔助時鐘,一般是低頻的時鐘,使用32768Hz的低頻振蕩或者12KHz的VLO。
MCLK是主時鐘,給CPU提供,這個需要根據(jù)實際情況來,可以是DCO或者是HF的振蕩器。
SMCLK是外設(shè)時鐘,常用的是從DCO獲取時鐘源