MSP430F5418學(xué)習(xí)筆記----UCS時(shí)鐘模塊配置
剛剛才把F5418的UCS模塊調(diào)通,特此慶祝一番~~
本文引用地址:http://m.butianyuan.cn/article/201611/322782.htm動手之前,首先要閱讀TI提供的430x54x Family User Guide(slau208d)和MIXED SIGNAL MICROCONTROLLER,了解一下這種全新的芯片的時(shí)鐘模塊的框圖,有個(gè)整體把握:
下面是我翻譯的MIXED SIGNAL MICROCONTROLLER第18頁對UCS的介紹(覺得翻譯不好可別拍磚哦):
@振蕩器和系統(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)對低成本和低功耗的要求,它包含數(shù)字鎖頻環(huán)(FLL),通過連接一個(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í)鐘信號:
·Auxiliary輔助時(shí)鐘(ACLK),可由32KHz鐘表晶體,高頻晶體,內(nèi)部低頻振蕩器(VLO),平衡的低頻振蕩器(REFO)或內(nèi)部數(shù)字控制振蕩器(DCO)提供.
·Main系統(tǒng)時(shí)鐘(MCLK),供CPU使用,信號提供與ACLK相同.
·Sub-Main系統(tǒng)子時(shí)鐘(SMCLK),供外設(shè)模塊使用,信號提供與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頁有講解。我的翻譯:
@Unified Clock System(UCS)操作---430x54x Family User Guide slau208d,P64
在上電清除信號(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不會立即穩(wěn)定。一旦振蕩開始信號被獲取到了,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)志
//上面這句必須有,否則起振了也不會分配成功
}
while (UCSCTL7 & XT2OFFG); //判斷XT2是否起振
UCSCTL6 &= ~XT2DRIVE0;//設(shè)置驅(qū)動電流最小以降低功耗
UCSCTL4 |= SELM__XT2CLK + SELS__XT2CLK; //選擇MCLK、SMCLK為XT2
//UCSCTL5 |= DIVS__2;//SMCLK設(shè)為2分頻
如果想讓外部的XT1,XT2和內(nèi)部DCO同時(shí)使用,并從端口輸出以便于測試,連接圖示意(參考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ū)動電流以降低功耗
UCSCTL4 |= SELA__XT1CLK + SELS__XT2CLK;
// 選擇SMCLK時(shí)鐘源為XT2, ACLK時(shí)鐘源為XT1,MCLK默認(rèn)為DCO/2
評論