|
最近開始學(xué)習(xí)MSP430系列一款新CPU,F(xiàn)5529。按照之前學(xué)430的方法,我開始了解他的時(shí)鐘部分,我參照TI官方例程學(xué)習(xí),其中有段程序讓我在實(shí)驗(yàn)室困惑了很久,這句注釋如下:
ACLK=n/a, MCLK=SMCLK=BRCLK=default DCO=1.048576 MHZ
都知道 msp430的時(shí)鐘系統(tǒng)靈活多變,他的USC模塊有三個(gè)時(shí)鐘(MCLK,SMCLK,ACLK)和五個(gè)時(shí)鐘源(XT1CLK,VLO,REFOCLK,DCO,XT2)
PUC之后,UCS模塊的默認(rèn)配置如下:
1. XTI為L(zhǎng)F模式,作為XT1CLK的時(shí)鐘源。XT1CLK作為ACLK.
2. DCOCLKDIV作為MCLK
3. DCOCLKDIV作為SMCLK
4. FLL模塊使能,XTI作為FLL基準(zhǔn)時(shí)鐘FLLREFCLK
5. XIN,XOUT管腳為普通I/O
6. XT2IN,XT2OUT腳為普通I/O
讓我困惑的是后半句,MCLK=SMCLK=BRCLK=defaultDCO=1.048576 MHZ
首先我不太清楚1.045M是怎么來的,后來在5/6系列的Family User’s Guide中找到了相關(guān)解釋
As previously stated,FLL operation with XT1 is selected by default. If the crystal pins (XIN, XOUT)are
shared withgeneral-purpose I/Os, XT1 will remain disabled until the PSEL bits associatedwith the crystal
pins are set. If XIN andXOUT are not shared with general-purpose I/O, XT1 is enabled. When a 32,768
Hz crystal is used forXT1CLK, the fault control logic immediately causes ACLK to be sourced by the
REFOCLK, because XT1 isnot stable immediately (see Section5.2.12). Once crystal startup is obtained
and settled, the FLL stabilizes MCLK and SMCLK to1.048576 MHz and fDCO = 2.097152 MHz.
這段英文前半段解釋了FLL和XT1上電后默認(rèn)狀態(tài)。關(guān)鍵在后句,說一段晶振啟動(dòng)比穩(wěn)定,ACLK將取自外部的32.768KHZ晶振,F(xiàn)LL將使MCLK和SMCLK穩(wěn)定為1.048576M和fDCO = 2.097152 MHz.
我想1.048576M應(yīng)該取自這個(gè)地方,但是此處的fDCO = 2.097152 MHz.
出不多是1.048576M的兩倍,為什么說MCLK=SMCLK=BRCLK=default DCO=1.048576 MHZ,于是我將這句話粘貼去百度,結(jié)果大部分是照搬TI官方的例程,對(duì)著注釋也沒太關(guān)注。
經(jīng)過自己的摸索,發(fā)現(xiàn)其實(shí)是這樣的;剛才在說PUC后的默認(rèn)狀態(tài)是MCLK,SMCLK都是取自DCODIV的,而DCODIV從字面上看是DCO的分頻,而坐幾分頻是由UCSCTL2中的FLLD決定的,該位的默認(rèn)狀態(tài)是001,即2分頻。所以應(yīng)該是MCLK=SMCLK=DCODIV=DCO/2.所以說TI官網(wǎng)的那個(gè)注釋嚴(yán)格來說是不對(duì)的。
那DCO的默認(rèn)頻率是多少呢?上面的2.097152M又是怎么來的。我覺得網(wǎng)友們普遍提到DCO的默認(rèn)值是1.048576M的說法是不夠準(zhǔn)確的,應(yīng)該是通過使用DCO產(chǎn)生的MCLK和SMCLK是1.048576M,而不是DCO本身,DCO的默認(rèn)值應(yīng)該翻倍。這里有出現(xiàn)了一個(gè)要關(guān)注的東西FLL,4,5系列內(nèi)有FLL,這是1,2系列所沒有的,所以即便不外接晶振,只是用內(nèi)部DCO也可獲得很穩(wěn)定的頻率,那FLL與DCO的產(chǎn)生有什么關(guān)系呢?我從5/6系列的Family User’s Guide截了一個(gè)圖(可惜不能顯示),看到DCOCLK和DCOCLKDIV從FLL模塊輸出,通過用戶手冊(cè),我理解到DCO的產(chǎn)生途徑有兩種:
第一種就是直接配置UCSCTL0和UCSCTL1寄存器中的DCORSELx,DCOx,MODx來設(shè)置。其中DCORSELx負(fù)責(zé)DCO頻率范圍的選擇,DCOx負(fù)責(zé)頻率階梯的選擇,MODx負(fù)責(zé)混合兩個(gè)DCO頻率。由于1系列單片機(jī)內(nèi)部沒有FLL因此DCO的頻率不太精確,從5/6系列的Family User’s Guide看到這種方式設(shè)置DCO頻率有一個(gè)很大的范圍。
第二種就是通過FLL自動(dòng)調(diào)節(jié)DCO。根據(jù)手冊(cè)中公式
fDCOCLK = D × (N + 1) × (fFLLREFCLK ÷ n)
fDCOCLKDIV = (N + 1) × (fFLLREFCLK ÷n)
這里的D是FLLD,N是FLLN,他們都是UCSCTL2中的位,n由UCSCTL3中的FLLREFDIV決定,默認(rèn)狀態(tài)下D取2,N去31,n 取1。
7. 那FLLREFCLK又怎么確定呢?本文上面提到 FLL模塊使能,XTI作為FLL基準(zhǔn)時(shí)鐘FLLREFCLK
此外手冊(cè)中對(duì)REFO也作了介紹:內(nèi)部參考時(shí)鐘可以在沒有外部晶振,對(duì)成本有很敏感的場(chǎng)合得到很好的應(yīng)用,內(nèi)部參考時(shí)鐘可以會(huì)產(chǎn)生一個(gè)很穩(wěn)定的頻率,其典型值為32.768K,他也可作為FLLREFCLK,這樣外部低頻晶振和REFO可以為系統(tǒng)提供靈活多變的時(shí)鐘
PUC后,XT1不能作為FLLREFCLK的時(shí)鐘源,個(gè)人認(rèn)為FLLREFCLK會(huì)選擇REFO。那我就來驗(yàn)證下自己的是否正確。(默認(rèn)D=2,N=31,n=1, FLLREFCLK=32.768K)
fDCOCLK = D × (N + 1) × (fFLLREFCLK ÷ n)
fDCOCLKDIV = (N + 1) × (fFLLREFCLK ÷n)
2*(31+1)*32768=2.097152M與用戶指南中默認(rèn)一致。
|
|