MSP430(F5529)學(xué)習(xí)筆記——UCS配置詳解
UCS簡介
MSP430F5XX/MSP430F6XX系列器件的UCS包含有五種時(shí)鐘源,依次是:XT1CLK、VLOCLK、REFOCLK、DCOCLK和XT2CLK。這五種時(shí)鐘的詳細(xì)介紹請參考該系列芯片的指導(dǎo)手冊,其中XT1CLK、VLOCLK、REFOCLK和XT2CLK跟MSP430F1XX系列沒有太大區(qū)別,學(xué)習(xí)配置起來也比較簡單。
UCS上電默認(rèn)狀態(tài)
PUC后,UCS模塊的默認(rèn)狀態(tài)如下:
[html]view plaincopy
- (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)是非常重要的,這對于理解后面的配置邏輯來說非常重要。
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í)鐘配置非常簡單,只需要修改UCSCTL4,將SELS和SELM配置為對應(yīng)的選項(xiàng)VLOCLK或者REFOCLK即可,具體代碼如下:
[cpp]view plaincopy
- #include
- voidmain(void){
- WDTCTL=WDTPW+WDTHOLD;
- P1SEL|=BIT0;
- P1DIR|=BIT0;//測量ACLK用
- P2SEL|=BIT2;
- P2DIR|=BIT2;//測量SMCLK用
- P7SEL|=BIT7;
- P7DIR|=BIT7;//測量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的配置要分為以下幾步:
[cpp]view plaincopy
- 1.配置IO口5.4和5.5為XT1功能。
- 2.配置XCAP為XCAP_3,即12PF的電容。
- 3.清除XT1OFF標(biāo)志位。
- 4.等待XT1起振。
具體的代碼如下:
[cpp]view plaincopy
- #include
- voidmain(void){
- WDTCTL=WDTPW+WDTHOLD;
- P1SEL|=BIT0;
- P1DIR|=BIT0;//測量ACLK用
- P2SEL|=BIT2;
- P2DIR|=BIT2;//測量SMCLK用
- P7SEL|=BIT7;
- P7DIR|=BIT7;//測量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);
- }
評論