新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSP430F5418學(xué)習(xí)筆記----UCS時(shí)鐘模塊配置

MSP430F5418學(xué)習(xí)筆記----UCS時(shí)鐘模塊配置

作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏
引言:一年前開始用TI公司的x14x系列超低功耗單片機(jī)MSP430F149,感覺(jué)與普通的51系列相比,各個(gè)外設(shè)的功能強(qiáng)大了一些,使用起來(lái)沒(méi)有很大的區(qū)別,但有一個(gè)重要的區(qū)別就是外部晶振需要正確配置才能使用?,F(xiàn)在在用TI的x54x系列的MSP430F5418芯片,發(fā)現(xiàn)它的各個(gè)外設(shè)的集成度更高了(比如所有的外部時(shí)鐘和內(nèi)部時(shí)鐘由一個(gè)Unified Clock System(UCS)模塊統(tǒng)一管理,內(nèi)部Uart,IIC,SPI之類的串行接口由Universal Serial Communication Interfaces(USCI)模塊統(tǒng)一管理),使用起來(lái)更靈活了,由此帶來(lái)的影響就是配置起來(lái)也就更麻煩了。(呵呵,要想擁有更強(qiáng)大的功能,還不得花更多的精力去研究它的使用方法?)

剛剛才把F5418的UCS模塊調(diào)通,特此慶祝一番~~

本文引用地址:http://butianyuan.cn/article/201611/322782.htm

動(dòng)手之前,首先要閱讀TI提供的430x54x Family User Guide(slau208d)和MIXED SIGNAL MICROCONTROLLER,了解一下這種全新的芯片的時(shí)鐘模塊的框圖,有個(gè)整體把握:



下面是我翻譯的MIXED SIGNAL MICROCONTROLLER第18頁(yè)對(duì)UCS的介紹(覺(jué)得翻譯不好可別拍磚哦):

@振蕩器和系統(tǒng)時(shí)鐘 (MIXED SIGNAL MICROCONTROLLER, P18)

在MSP430x5xx家族的器件中,時(shí)鐘系統(tǒng)由統(tǒng)一時(shí)鐘系統(tǒng)Unified Clock System(UCS)模塊提供,它包含了一個(gè)32KHz鐘表石英晶體(XT1 LF Mode),一個(gè)內(nèi)部低功率,低頻率震蕩器(VLO),一個(gè)內(nèi)部平衡的低頻震蕩器(REFO),一個(gè)集成的內(nèi)部數(shù)字可控震蕩器(DCO),和一個(gè)高頻石英晶體振蕩器(XT1 HF模式或XT2).這個(gè)UCS模塊的設(shè)計(jì)符合了系統(tǒng)對(duì)低成本和低功耗的要求,它包含數(shù)字鎖頻環(huán)(FLL),通過(guò)連接一個(gè)數(shù)字的調(diào)制器,使DCO頻率穩(wěn)定成一個(gè)可編程倍數(shù)的鐘表石英晶體頻率.其內(nèi)部DCO提供了一個(gè)快速開啟的時(shí)鐘源,并能夠在低于5us內(nèi)穩(wěn)定.
統(tǒng)一時(shí)鐘系統(tǒng)模塊提供了如下時(shí)鐘信號(hào):
·Auxiliary輔助時(shí)鐘(ACLK),可由32KHz鐘表晶體,高頻晶體,內(nèi)部低頻振蕩器(VLO),平衡的低頻振蕩器(REFO)或內(nèi)部數(shù)字控制振蕩器(DCO)提供.
·Main系統(tǒng)時(shí)鐘(MCLK),供CPU使用,信號(hào)提供與ACLK相同.
·Sub-Main系統(tǒng)子時(shí)鐘(SMCLK),供外設(shè)模塊使用,信號(hào)提供與ACLK相同.
·ACLK/n,由ACLK分頻后緩沖輸出,分頻系數(shù)可為1,2,4,8,16,32.

當(dāng)你不做任何時(shí)鐘配置時(shí),你仍然可以像使用普通單片機(jī)一樣正常使用它,那么它是時(shí)鐘默認(rèn)是怎么配置的呢?這時(shí)候你就得了解USC模塊的默認(rèn)配置了,這部分在430x54x Family User Guide中第64頁(yè)有講解。我的翻譯:

@Unified Clock System(UCS)操作---430x54x Family User Guide slau208d,P64

在上電清除信號(hào)(PUC)之后,UCS模塊的默認(rèn)配置是:
·XT1 低頻模式被選擇為XT1CLK時(shí)鐘的振蕩器。XT1CLK被選擇為ACLK的時(shí)鐘源。
·DCOCLKDIV作為MCLK的時(shí)鐘源。
·DCOCLKDIV作為SMCLK的時(shí)鐘源。
·FLL(鎖頻環(huán))運(yùn)行被使能,XT1CLK作為FLL參考時(shí)鐘,即FLLREFCLK。
·XIN和XOUT引腳被設(shè)置為通用IO時(shí),XT1保持禁能直到IO口置為XT1操作模式。
·如果XT2IN和XT2OUT引腳被設(shè)置為通用IO,XT2被禁能。
在初始狀態(tài),F(xiàn)LL以XT1為參考時(shí)鐘的運(yùn)行默認(rèn)使能,但XT1被禁止。要使能XT1,相應(yīng)管腳的PSEL位必須置位。當(dāng)一個(gè)32.768KHz的晶振用作XT1CLK時(shí),出錯(cuò)的控制邏輯電路直接造成REFOCLK作為ACLK的時(shí)鐘源,因?yàn)閄T1不會(huì)立即穩(wěn)定。一旦振蕩開始信號(hào)被獲取到了,F(xiàn)LL就使MCLK和SMCLK穩(wěn)定到1.048576MHz,f(DCO)=2.097152MHz。
狀態(tài)寄存器控制位(SCG0,SCG1,OSCOFF和CPUOFF)配置MSP430的運(yùn)行模式,還使能或禁能UCS模塊的部分功能(參考系統(tǒng)復(fù)位,中斷,運(yùn)行模式等章節(jié))。寄存器UCSCTL0到UCSCTL8配置UCS模塊。

廢話別太多,下面直接看程序:

如果想將MCLK、SMCLK的時(shí)鐘源設(shè)為外部高速晶振(我接的是16MHz),在初始化時(shí)加入以下程序段

//使用XT2振蕩器
P5SEL |= BIT2 + BIT3;//配置管腳為晶振輸入
UCSCTL6 &= ~XT2OFF; //打開XT2振蕩器
do
{
UCSCTL7 &= ~(XT2OFFG; //清除振蕩器XT2失效標(biāo)志
SFRIFG1 &= ~OFIFG; // 清除振蕩器失效標(biāo)志
//上面這句必須有,否則起振了也不會(huì)分配成功
}
while (UCSCTL7 & XT2OFFG); //判斷XT2是否起振
UCSCTL6 &= ~XT2DRIVE0;//設(shè)置驅(qū)動(dòng)電流最小以降低功耗
UCSCTL4 |= SELM__XT2CLK + SELS__XT2CLK; //選擇MCLK、SMCLK為XT2
//UCSCTL5 |= DIVS__2;//SMCLK設(shè)為2分頻

如果想讓外部的XT1,XT2和內(nèi)部DCO同時(shí)使用,并從端口輸出以便于測(cè)試,連接圖示意(參考ti例程)
// MSP430F5418
// -----------------
// /| | XIN|-
// | | | 32kHz
// ---|RST XOUT|-
// | |
// | |
// | XT2IN|-
// | | HF XTAL or Resonator (add capacitors)
// | XT2OUT|-
// | |
// | P1.0|--> ACLK = 32kHz Crystal Out
// | |
// | P1.6|--> SMCLK = High Freq Xtal or Resonator Out
// | |
// | P2.0|--> MCLK = Default DCO Frwequency
// | |
// | |


在初始化是加入以下程序段:


P1DIR = BIT6 + BIT0; //
P1SEL = BIT6 + BIT0; // 配置管腳為時(shí)鐘 SMCLK, ACLK輸出
P2DIR = BIT0; //
P2SEL = BIT0; // 配置管腳為時(shí)鐘 MCLK輸出

P5SEL |= 0x0C; // 配置管腳為晶振XT2輸入
P7SEL |= 0x03; // 配置管腳為晶振XT1輸入


UCSCTL6 &= ~(XT1OFF + XT2OFF); // 打開XT1,XT2振蕩器
UCSCTL6 |= XCAP_3; // 為XT1加載內(nèi)部電容


// 循環(huán)直到XT1,XT2 和 DCO 穩(wěn)定起振
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
// 清除振蕩器XT2,XT1,DCO失效標(biāo)志
SFRIFG1 &= ~OFIFG; // 清除振蕩器失效標(biāo)志
}while (SFRIFG1&OFIFG); // 判斷所有晶振是否起振


UCSCTL6 &= ~XT2DRIVE0; // 根據(jù)晶振頻率減小XT2驅(qū)動(dòng)電流以降低功耗
UCSCTL4 |= SELA__XT1CLK + SELS__XT2CLK;


// 選擇SMCLK時(shí)鐘源為XT2, ACLK時(shí)鐘源為XT1,MCLK默認(rèn)為DCO/2



評(píng)論


技術(shù)專區(qū)

關(guān)閉