TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430f5529 的DCO频率设置

最近在测试DCO频率时  对于设置有一些疑问,请各位大神帮忙解释一下

我外部晶振XT2是8M的, 在测试产生 4M 8M 16M 32M MCLK时 发现产生8M的不正确,请问该如何配置呢?

UCSCTL1  和  UCSCTL0  关系不是很清楚啊

以下是代码

void main(void)
{

WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
P7SEL |= BIT7; P7DIR |= BIT7;//测量MCLK用

P5SEL |= BIT2+BIT3;
UCSCTL6 &= ~XT2OFF; //打开XT2

/*********************寄存器配置部分********************8M晶振**********/

/*16.47
__bis_SR_register(SCG0);
UCSCTL0 = 0x0000;
UCSCTL1 = DCORSEL_4;   //DCO频率范围在28.2MHZ以下
UCSCTL2 = FLLD_0 + 1;   //D=1,N=1
UCSCTL3 = SELREF_5 + FLLREFDIV_0; //n=1,FLLREFCLK时钟源为XT2CLK  8M;DCOCLK=D*(N+1)*(FLLREFCLK/n);
UCSCTL4 = SELM__DCOCLK; //MCLK的时钟源为DCOCLK
__bic_SR_register(SCG0);   //Enable the FLL control loop*/
__bis_SR_register(SCG0);
UCSCTL0 = 0x0000;
UCSCTL1 = DCORSEL_4; //DCO频率范围在28.2MHZ以下
UCSCTL2 = FLLD_0 + 1; //D=1,N=1
UCSCTL3 = SELREF_5 + FLLREFDIV_1; //n=2,FLLREFCLK时钟源为XT2CLK;DCOCLK=D*(N+1)*(FLLREFCLK/n);
UCSCTL4 = SELM__DCOCLK; //MCLK的时钟源为DCOCLK
__bic_SR_register(SCG0); //Enable the FLL control loop
while(1);

}

Susan Yang:

UCSCTL0寄存器设置为0x0000,因为这些位在运行期间由FLL自动修改。您可以在用户指南的统一时钟系统(UCS)部分中阅读更多相关信息。当设备开始运行时,它们不会保持在0x0000。

更多信息您可以看一下

e2echina.ti.com/…/16107

user4463015:

回复 Susan Yang:

感谢,是因为我没有检测晶振是否起振!太感谢了

Susan Yang:

回复 user4463015:

很高兴您能解决问题!

user4463015:

回复 Susan Yang:

再问您个问题,用XT2做为FLL的时钟源,应该如何设置呢?

Susan Yang:

回复 user4463015:

应该是

UCSCTL3 |= SELREF_5; //设置FLL参考时钟源为XT2CLK

user4463015:

回复 Susan Yang:

我也是这样设置的,但是计算出来的DCO总是有问题,比如我用XT2 8M的晶振,想产生一个分频的4M mclk 配置的为
__bis_SR_register(SCG0);
UCSCTL0 = 0x0000;
UCSCTL1 = DCORSEL_3; //
UCSCTL2 = FLLD_0 + 1; //D=1,N=1
UCSCTL3 = SELREF_5 + FLLREFDIV_2; //n=2,FLLREFCLK时钟源为XT2CLK;DCOCLK=D*(N+1)*(FLLREFCLK/n);
UCSCTL4 = SELM__DCOCLK; //MCLK的时钟源为DCOCLK
__bic_SR_register(SCG0); //Enable the FLL control loop

得到的竟然是7.2M左右。

灰小子:

回复 user4463015:

程序的注释里写的很明白啊

DCOCLK=D*(N+1)*(FLLREFCLK/n);

赞(0)
未经允许不得转载:TI中文支持网 » MSP430f5529 的DCO频率设置
分享到: 更多 (0)