MSP430F5529中UCS的配置
MSP430(F5529)相比MSP430(F149)來講,功能更加強(qiáng)大。
UCS簡(jiǎn)介
MSP430F5XX/MSP430F6XX系列器件的UCS包含有五種時(shí)鐘源,依次是:XT1CLK、VLOCLK、REFOCLK、DCOCLK和XT2CLK。這五種時(shí)鐘的詳細(xì)介紹請(qǐng)參考該系列芯片的指導(dǎo)手冊(cè),其中XT1CLK、VLOCLK、REFOCLK和XT2CLK跟MSP430F1XX系列沒有太大區(qū)別,學(xué)習(xí)配置起來也比較簡(jiǎn)單。
UCS上電默認(rèn)狀態(tài)
PUC后,UCS模塊的默認(rèn)狀態(tài)如下:
(1)XT1處于LF模式作為XT1CLK時(shí)鐘源。ACLK選通為XT1CLK。
(2)MCLK選通為DCOCLKDIV
(3)SMCLK選通為DCOCLKDIV
(4)FLL使能,且將XT1CLK作為FLL參考時(shí)鐘。
(5)XIN和XOUT腳設(shè)置為通用IO,XIN和XOUT配置為XT1功能前,XT1保持禁用。
(6)如果可用的話,XT2IN和XT2OUT被設(shè)置為通用IO且保持禁止?fàn)顟B(tài)。
清楚UCS上電默認(rèn)狀態(tài)是非常重要的,這對(duì)于理解后面的配置邏輯來說非常重要。
UCS時(shí)鐘源切換
由于REFOCLK、VLOCLK、DCOCLK(這里暫時(shí)這么認(rèn)為)默認(rèn)狀態(tài)下是可用的,所以,切換的時(shí)候只需要通過UCSCTL4來配置ACLK、SMCLK和MCLK的時(shí)鐘源即可,而XT1CLK和XT2CLK需要根據(jù)硬件的具體配置情況確定,所以,這兩者的配置比起前三者來講,就有些不同了。下面,我們做三個(gè)實(shí)驗(yàn):
(1)將MCLK和SMCLK配置REFOCLK、VLOCLK
REFOCLK和VLOCLK是芯片默認(rèn)提供的,只要芯片正常工作,這兩個(gè)時(shí)鐘就會(huì)正常工作,因此,該時(shí)鐘配置非常簡(jiǎn)單,只需要修改UCSCTL4,將SELS和SELM配置為對(duì)應(yīng)的選項(xiàng)VLOCLK或者REFOCLK即可,具體代碼如下:
#include
voidmain(void){
WDTCTL=WDTPW+WDTHOLD;
P1SEL|=BIT0;
P1DIR|=BIT0;//測(cè)量ACLK用
P2SEL|=BIT2;
P2DIR|=BIT2;//測(cè)量SMCLK用
P7SEL|=BIT7;
P7DIR|=BIT7;//測(cè)量MCLK用
//UCSCTL4=UCSCTL4&(~(SELS_7|SELM_7))|SELS_1|SELM_1;//將SMCLK和MCLK配置為VLOCLK
UCSCTL4=UCSCTL4&(~(SELS_7|SELM_7))|SELS_2|SELM_2;//將SMCLK和MCLK配置為REFOCLK
while(1);
}
上面的代碼就實(shí)現(xiàn)了將SMCLK和MCLK切換為VLOCLK和REFOCLK,ACLK的操作也是同樣的,不作過多解釋。
(2)將MCLK和SMCLK配置XT1CLK
我手頭上的開發(fā)板XT1外接的是32.768K的手表時(shí)鐘晶振,XT1CLK的配置要分為以下幾步:
1.配置IO口5.4和5.5為XT1功能。
2.配置XCAP為XCAP_3,即12PF的電容。
3.清除XT1OFF標(biāo)志位。
4.等待XT1起振。
具體的代碼如下:
#include
voidmain(void){
WDTCTL=WDTPW+WDTHOLD;
P1SEL|=BIT0;
P1DIR|=BIT0;//測(cè)量ACLK用
P2SEL|=BIT2;
P2DIR|=BIT2;//測(cè)量SMCLK用
P7SEL|=BIT7;
P7DIR|=BIT7;//測(cè)量MCLK用
P5SEL|=BIT4|BIT5;//將IO配置為XT1功能
UCSCTL6|=XCAP_3;//配置電容為12pF
UCSCTL6&=~XT1OFF;//使能XT1
while(SFRIFG1&OFIFG){
UCSCTL7&=~(XT2OFFG+XT1LFOFFG+DCOFFG);//清除三類時(shí)鐘標(biāo)志位
//這里需要清除三種標(biāo)志位,因?yàn)槿魏我环N
//標(biāo)志位都會(huì)將OFIFG置位
SFRIFG1&=~OFIFG;//清除時(shí)鐘錯(cuò)誤標(biāo)志位
}
UCSCTL4=UCSCTL4&(~(SELS_7|SELM_7))|SELS_0|SELM_0;//將SMCLK和MCLK時(shí)鐘源配置為XT1
while(1);
}
(3)將SMCLK和MCLK配置XT2
將SMCLK和MCLK配置為XT2跟配置為XT1的過程基本相同,唯一不同的是,在配置SMCLK和MCLK為XT2之前,需要將ACLK和REFCLK的時(shí)鐘源,因?yàn)锳CLK和REFCLK的默認(rèn)時(shí)鐘源是XT1,而我們這里并沒有配置啟動(dòng)XT1CLK,所以會(huì)產(chǎn)生XT1時(shí)鐘錯(cuò)誤,即XT1LFFG,因此,我們先將ACLK和REFCLK配置為芯片自帶的時(shí)鐘(REFOCLK或VLOCLK)或者即將啟動(dòng)的時(shí)鐘(XT2),此外,XT2配置時(shí)不需要配置電容,故將SMCLK和MCLK配置為XT2的代碼如下:
#include
voidmain(void){
WDTCTL=WDTPW+WDTHOLD;
P1SEL|=BIT0;
P1DIR|=BIT0;//測(cè)量ACLK用
P2SEL|=BIT2;
P2DIR|=BIT2;//測(cè)量SMCLK用
P7SEL|=BIT7;
P7DIR|=BIT7;//測(cè)量MCLK用
P5SEL|=BIT2|BIT3;//將IO配置為XT2功能
UCSCTL6&=~XT2OFF;//使能XT2
UCSCTL4=UCSCTL4&(~(SELA_7))|SELA_1;//先將ACLK配置為VLOCLK
UCSCTL3|=SELREF_2;//將REFCLK配置為REFCLK
while(SFRIFG1&OFIFG){
UCSCTL7&=~(XT2OFFG+XT1LFOFFG+DCOFFG);//清除三類時(shí)鐘標(biāo)志位
//這里需要清除三種標(biāo)志位,因?yàn)槿魏我环N
//標(biāo)志位都會(huì)將OFIFG置位
SFRIFG1&=~OFIFG;//清除時(shí)鐘錯(cuò)誤標(biāo)志位
}
UCSCTL4=UCSCTL4&(~(SELS_7|SELM_7))|SELS_5|SELM_5;//將SMCLK和MCLK時(shí)鐘源配置為XT2
while(1);
}
做完前面三個(gè)實(shí)驗(yàn),我們就能掌握MSP430F5XX系列時(shí)鐘切換的基本操作了,講的并不詳細(xì),有其他疑問請(qǐng)仔細(xì)閱讀芯片手冊(cè)或者留言討論。
DCO模塊詳解
DCO模塊在MSP430F5XX系列芯片中非常重要,因?yàn)閺腗SP430F4XX開始,MSP430引用了FLL模塊,F(xiàn)LL即鎖相環(huán),可以通過倍頻的方式提高系統(tǒng)時(shí)鐘頻率,進(jìn)而提高系統(tǒng)的運(yùn)行速度。
DCO模塊運(yùn)行需要參考時(shí)鐘REFCLK,REFCLK可以來自REFOCLK、XT1CLK和XT2CLK,通過UCSCTL3的SELREF選擇,默認(rèn)使用的XT1CLK,但如果XT1CLK不可用則使用REFOCLK。
DCO模塊有兩個(gè)輸出時(shí)鐘信號(hào),級(jí)DCOCLK和DCOCLKDIV,其中,倍頻計(jì)算公式如下:
DCOCLK=D*(N+1)*(REFCLK/n)
DCOCLKDIV=(N+1)*(REFCLK/n)
其中:
n即REFCLK輸入時(shí)鐘分頻,可以通過UCSCTL3中的FLLCLKDIV設(shè)定,默認(rèn)為0,也就是不分頻;
D可以通過UCSCTL2中的FLLD來設(shè)定,默認(rèn)為1,也就是2分頻;
N可以通過UCSCTL2中的FLLN來設(shè)定,默認(rèn)值為32。
所以,系統(tǒng)上電后如果不做任何設(shè)置,DCOCLK的實(shí)際值為2097152,DCOCLKDIV的實(shí)際值為1048576。
另外,配置芯片工作頻率還需要配置DCORSEL和DCOx,DCORSEL和DCOx的具體作用如下:
DCORSEL位于UCSCTL1控制寄存器中的4到6位,共3位,將DCO分為8個(gè)頻率段。
DCOx位于UCSCTL0中的8到12位,共5位,將DCORSEL選擇的頻率段分為32個(gè)頻率階,每階比前一階高出約8%,該寄存器系統(tǒng)可以自動(dòng)調(diào)整,通常配置為0。
DCORSEL和DCOx值的具體作用可以參考MSP430F5529的數(shù)據(jù)手冊(cè),閱讀該手冊(cè)相關(guān)部分可以找到如下表格:
可以見,DCORESL的頻率調(diào)節(jié)范圍大致如下:
DCORSEL=0的調(diào)節(jié)范圍約為0.20~0.70MHZ;
DCORSEL=1的調(diào)節(jié)范圍約為0.36~1.47MHZ;
DCORSEL=2的調(diào)節(jié)范圍約為0.75~3.17MHZ;
DCORSEL=3的調(diào)節(jié)范圍約為1.51~6.07MHZ;
DCORSEL=4的調(diào)節(jié)范圍約為3.2~12.3MHZ;
DCORSEL=5的調(diào)節(jié)范圍約為6.0~23.7MHZ;
DCORSEL = 6的調(diào)節(jié)范圍約為10.7~39