新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSP430F5529 (三)統(tǒng)一時(shí)鐘系統(tǒng)UCS-2

MSP430F5529 (三)統(tǒng)一時(shí)鐘系統(tǒng)UCS-2

作者: 時(shí)間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
實(shí)驗(yàn)二:將MCLK和SMCLK配置為XT1(F5529的XT1為32.768KHZ)
/*1.配置IO口5.4和5.5為XT1功能。*/
/*2.配置XCAP為XCAP_3,即12PF的電容。*/
/*3.清除XT1OFF標(biāo)志位。*/
/*4.等待XT1起振。*/
#include <msp430.h>
void main(void){
P1SEL |= BIT0;P1DIR |= BIT0;//測(cè)量ACLK用
P2SEL |= BIT2;P2DIR |= BIT2;//測(cè)量SMCLK用
P7SEL |= BIT7;P7DIR |= BIT7;//測(cè)量MCLK用
P5SEL |= BIT4|BIT5; //配置為XT1功能,電路板上晶振接于這兩腳
UCSCTL6 |= XCAP_3; //配置電容為12pF
UCSCTL6 &= ~XT1OFF; //使能XT1
/*下面是很重要的一步:*/
/* XT1剛剛起振的時(shí)候可能有錯(cuò)誤,導(dǎo)致時(shí)鐘錯(cuò)誤標(biāo)志位置位,必須先清零*/
/*OFIFG即Osc Fault Flag,位于SFRIFG1中*/
while(SFRIFG1 & OFIFG) //如果有時(shí)鐘錯(cuò)誤{
UCSCTL7 &=~(XT2OFFG+DCOFFG+XT1LFOFFG);//清除3種時(shí)鐘錯(cuò)誤標(biāo)志
SFRIFG1&=~(OFIFG);//清除時(shí)鐘錯(cuò)誤標(biāo)志位}
UCSCTL4&=(UCSCTL4&(~(SELS_7|SELM_7)))|SELS_0|SELM_0;
//將SMCLK和MCLK時(shí)鐘源配置為XT1}


實(shí)驗(yàn)三:DCO-FLL數(shù)控振蕩器結(jié)合鎖相環(huán)
DCO模塊在MSP430F5529系列芯片中非常重要,因?yàn)閺?strong>MSP430F4XX開始,MSP430引用了FLL模塊,F(xiàn)LL即鎖相環(huán),可以通過倍頻的方式提高系統(tǒng)時(shí)鐘頻率,進(jìn)而提高系統(tǒng)的運(yùn)行速度。
DCO模塊運(yùn)行需要參考時(shí)鐘REFCLK,REFCLK可以來自REFOCLK、XT1CLK和XT2CLK,通過UCSCTL3的SELREF選擇,默認(rèn)使用的XT1CLK,但如果XT1CLK不可用則使用REFOCLK。
DCO模塊有兩個(gè)輸出時(shí)鐘信號(hào),即DCOCLK和DCOCLKDIV,其中,倍頻計(jì)算公式如下:
DCOCLK = D*(N+1)*(REFCLK/n)
DCOCLKDIV = (N+1)*(REFCLK/n)
其中:n即REFCLK輸入時(shí)鐘分頻,可以通過UCSCTL3中的FLLCLKDIV設(shè)定,默認(rèn)為1,也就是不分頻;
D可以通過UCSCTL2中的FLLD來設(shè)定,默認(rèn)為1,也就是2分頻;
N可以通過UCSCTL2中的FLLN來設(shè)定,默認(rèn)值為32。
所以,系統(tǒng)上電后如果不做任何設(shè)置,DCOCLK的實(shí)際值為2097152,DCOCLKDIV的實(shí)際值為1048576。

另外,配置芯片工作頻率還需要配置DCORSEL和DCOx,DCORSEL和DCOx的具體作用如下:
DCORSEL位于UCSCTL1,共3位,將DCO分為8個(gè)頻率段。
DCOx位于UCSCTL0共5位,將DCORSEL選擇的頻率段分為32個(gè)頻率階,每階比前一階高出約8%,該寄存器系統(tǒng)可以自動(dòng)調(diào)整,通常配置為0。
下表給出了相應(yīng)設(shè)置情況下的頻率調(diào)節(jié)范圍:


/*通過DCO-FLL將32.768KHZ倍頻到25MHZ*/
#include
#include “HAL_PMM.h”
void delay()
{
volatile unsigned int I;
for(I = 0; I != 5000; ++i){_NOP(); }}//延時(shí)函數(shù)
void main(void) {
WDTCTL = WDTPW+WDTHOLD;
P1SEL &= ~BIT1;
P1DIR |= BIT1;

P1SEL |= BIT0; //ACLK
P1DIR |= BIT0;
P2SEL |= BIT2; //SMCLK
P2DIR |= BIT2;
P7SEL |= BIT7; //MCLK
P7DIR |= BIT7;
P5SEL |= BIT4|BIT5;
UCSCTL6 |= XCAP_3;
UCSCTL6 &= ~XT1OFF;//打開XT1,否則XT1LFOFFG可能報(bào)錯(cuò)
SetVCore(3); //提高Vcore電壓到最高級(jí),以滿足倍頻需求該函數(shù)位于HAL_PMM.H中
__bis_SR_register(SCG0);//該語法為固定格式,意為將括號(hào)內(nèi)的變量置位,SCG0與系統(tǒng)工作模式有關(guān),此時(shí)MCLK暫停工作
UCSCTL0 = 0; //先清零,F(xiàn)LL運(yùn)行時(shí),該寄存器系統(tǒng)會(huì)自動(dòng)配置,不用管
UCSCTL1 = DCORSEL_6;
UCSCTL2 = FLLD_1 | 380;//FLLD=1,FLLN=380,則頻率為
2*(380+1)*32.768=24.969MHZ
__bic_SR_register(SCG0);
__delay_cycles(782000);//系統(tǒng)自帶的精確延時(shí),單位us
while (SFRIFG1 & OFIFG) {
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
SFRIFG1 &= ~OFIFG;
}
UCSCTL4 = UCSCTL4&(~(SELS_7|SELM_7))|SELS_3|SELM_3;
//選擇DCO作為時(shí)鐘源
while(1){
P1OUT ^= BIT1;
delay();
}
}


評(píng)論


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

關(guān)閉