<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > MSP430X5XX的時鐘系統(tǒng)與低功耗模式

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

          作者: 時間:2016-11-25 來源:網絡 收藏

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


          A.1 一個設置時鐘頻率的樣例
          void McuSetFrequency(void)
          {
          // 關看門狗
          WDTCTL = WDTPW+WDTHOLD;

          // 關FLL,等設置完成后,再開啟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;

          // 重新開啟FLL
          __bic_SR_register(SCG0);

          // 延時等待FLL自動調整DCO,250000是根據8MHz時鐘設置的。
          // 最慘的狀況是FLL把DCO從0開始調到31后才穩(wěn)定,這個延時即是根據這種情況算得的。
          __delay_cycles(250000);

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


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


          上一頁 1 2 下一頁

          關鍵詞: MSP430X5XX時鐘系統(tǒng)低功耗模

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();