新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSP430X5XX的時(shí)鐘系統(tǒng)與低功耗模式

MSP430X5XX的時(shí)鐘系統(tǒng)與低功耗模式

作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò) 收藏

吊了這么半天胃口,來(lái)說(shuō)一下這個(gè)FLL是什么東西。
FLL是Frequency Locked Loop,鎖頻環(huán)。先來(lái)個(gè)特寫(xiě)
FLL的作用是穩(wěn)定DCO的輸出,讓它不受擾動(dòng)的影響。它是一種反饋。前邊我們說(shuō)過(guò),REFO是個(gè)很穩(wěn)定的內(nèi)部時(shí)鐘信號(hào)。FLL可以拿REFOCLK做參考,以此來(lái)自動(dòng)校準(zhǔn)并穩(wěn)定DCOCLK和DCOCLKDIV。除了REFOCLK之外,還可以用XT1或XT2做FLL的參考信號(hào)。當(dāng)啟用FLL之后(默認(rèn)啟用),圖中的DCO,MOD可以不用設(shè)置,F(xiàn)LL會(huì)自行調(diào)整這兩個(gè)值。DCO輸出的頻率與以下幾個(gè)量有關(guān):
FLLD,F(xiàn)LLN,F(xiàn)LLREFDIV,F(xiàn)LLREFCLK
計(jì)算公式如下:
fDCOCLK = D × (N + 1) × (fFLLREFCLK ÷ n)
fDCOCLKDIV = (N + 1) × (fFLLREFCLK ÷ n)
其中
D=1,2,4,8,16,32(對(duì)應(yīng)FLLD=0,1,2,3,4,5)
N=FLLN
n=1,2,4,8,12,16(對(duì)應(yīng)FLLREFDIV=0,1,2,3,4,5)
fFLLREFCLK為REFOCLK,XT1或XT2的實(shí)際頻率。
比如,我們想設(shè)置DCO輸出1MHz的時(shí)鐘信號(hào),可以設(shè)置這樣一組值:
FLLD=1,對(duì)應(yīng)D=2;FLLN=60;FLLREFDIV=2,對(duì)應(yīng)n=4;fFLLREFCLK=fREFOCLK=32.768kHz
所以
fDCOCLK=2×(60+1)×(32.768/4)=999.424kHz,fDCOCLKDIV=fDCOCLK/2=499.712kHz
實(shí)際測(cè)試fDCOCLK=1.006MHz。
4.頻率范圍和電壓等級(jí)
MSP430把內(nèi)核的工作頻率劃分為若干范圍,比如543x和541x的工作頻率就被分為了8個(gè)范圍。每個(gè)范圍又被DCO這個(gè)參數(shù)分為了32個(gè)小段,每個(gè)小段又被MOD分為32個(gè)小小段(待驗(yàn)證)。所以可以把DCO看作是粗調(diào)旋鈕,MOD是微調(diào)旋鈕。另外,需要注意的是,這個(gè)頻率范圍是指DCO的頻率范圍,當(dāng)DCO被禁用的時(shí)候,這個(gè)范圍就沒(méi)意義了。
喜歡超頻的同學(xué)都知道,核心電壓和工作頻率之間有著密切的關(guān)系。430單片機(jī)也是如此,它有4個(gè)電壓等級(jí),涵蓋了從1.2V到2V廣闊的核心電壓范圍。
一般來(lái)說(shuō),核心電壓越高,頻率范圍越大,功耗越大;核心電壓越低,頻率范圍越小,功耗越小。
當(dāng)電壓等級(jí)為1的時(shí)候(默認(rèn)電壓等級(jí)),5418的各個(gè)頻率范圍的可用上下限如下表所示:
5418各頻率范圍上下限詳表
從這個(gè)表中可以看出,除了前邊談到的幾個(gè)參數(shù),還有大量的其他寄存器參數(shù)。具體的含義可以從參考文獻(xiàn)中查知。如果覺(jué)得翻看pdf太累的話(huà),可以向我索要xls格式的詳表(moosewolerATgmailDOTcom),上邊有我加的批注和公式,可以幫助大家方便的設(shè)置頻率。
5.UCS關(guān)鍵寄存器
詳表中我用顏色對(duì)8個(gè)UCS相關(guān)的寄存器進(jìn)行了分組。這8個(gè)寄存器可以分為6組:
  • UCSCTL0、UCSCTL1:DCO配置寄存器。配置DCO頻率范圍。禁用FLL的時(shí)候,設(shè)置DCO的開(kāi)環(huán)輸出頻率。
  • UCSCTL2、UCSCTL3:FLL配置寄存器。這個(gè)已經(jīng)在3.REFO、VLO和DCO中講過(guò)了
  • UCSCTL4、UCSCTL5:MCLK、SMCLK、ACLK配置寄存器。這個(gè)在2. 調(diào)整模塊中講過(guò)了
  • UCSCTL6:外置晶振配置寄存器??梢栽O(shè)定外接晶振的驅(qū)動(dòng)電流,內(nèi)置電容等參數(shù)。
  • UCSCTL7:UCS模塊錯(cuò)誤寄存器。可以指示UCS當(dāng)前的錯(cuò)誤狀態(tài)
  • UCSCTL8:UCS請(qǐng)求寄存器。這個(gè)后面解釋
因?yàn)?4xx系列單片機(jī)內(nèi)置晶振(REFO),所以
  • FLL配置寄存器是最重要的一組寄存器,它直接和工作頻率相關(guān)。
  • 其次是DCO配置寄存器,說(shuō)它重要,只是因?yàn)镈CORSEL這個(gè)參數(shù)在這組寄存器中。當(dāng)設(shè)置的頻率無(wú)法達(dá)到的時(shí)候,先確定一下頻率范圍是否合適。
這兩個(gè)寄存器弄明白了,就可以讓UCS輸出正常的工作頻率了。
其他的寄存器都各有各的作用,具體怎么用可以查看參考文獻(xiàn)。
6.MSP430的低功耗模式


A.1 一個(gè)設(shè)置時(shí)鐘頻率的樣例
void McuSetFrequency(void)
{
// 關(guān)看門(mén)狗
WDTCTL = WDTPW+WDTHOLD;

// 關(guān)FLL,等設(shè)置完成后,再開(kāi)啟FLL
__bis_SR_register(SCG0);

// MCLK=SMCLK=1MHz; ACLK=32.768kHz; FLL允許
UCSCTL0 = 0x0000;
UCSCTL1 = 0x0010;
UCSCTL2 = 0x103C;
UCSCTL3 = 0x0022;
UCSCTL4 = 0x0233;
UCSCTL5 = 0x0000;
UCSCTL6 = 0x0101;
UCSCTL7 = 0x0000;
UCSCTL8 = 0x0007;

// 重新開(kāi)啟FLL
__bic_SR_register(SCG0);

// 延時(shí)等待FLL自動(dòng)調(diào)整DCO,250000是根據(jù)8MHz時(shí)鐘設(shè)置的。
// 最慘的狀況是FLL把DCO從0開(kāi)始調(diào)到31后才穩(wěn)定,這個(gè)延時(shí)即是根據(jù)這種情況算得的。
__delay_cycles(250000);

// 等待異常標(biāo)志清除
// 用VLO和REFO做MCLK的時(shí)鐘源的時(shí)候,不需要考慮這些標(biāo)志,直接用。
do
{
// 清異常標(biāo)志
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
SFRIFG1 &= ~OFIFG;
}while (SFRIFG1&OFIFG); // 看看異常是否還在
}


參考文獻(xiàn):
[slau208e] MSP430x5xx Family User Guide
[slas612] MSP430F543x(A), MSP430F541x(A) Mixed Signal Microcontroller
[slac166o] MSP430F54xx Code Examples Rev0


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: MSP430X5XX時(shí)鐘系統(tǒng)低功耗模

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉