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

MSP5418 DCO时钟问题请教

平台: MSP430F5418
问题描述:XT1和XT2均未接外部晶振, 时钟代码如下:

void InitSysClk(void)
{
    int i,XT2_Work=0;
    int RetryTime=5;

    UCSCTL0 = DCO4;
    UCSCTL1 = DCORSEL_7;
    UCSCTL3 = DCORSEL_5+FLLREFDIV_0; //XT2 as FLL reference, FLL div=1
    UCSCTL4 = SELA_2+SELS_5+SELM_5;//ACLK=REFCLOCK,MCLK=SMCLK=XT2/DCO
    UCSCTL6 &= ~XT2OFF;
    //检测XT2
    {
        UCSCTL7 &= ~(XT2OFFG + DCOFFG);
        // Clear XT2,DCO fault flags
        SFRIFG1 &= ~OFIFG; // Clear fault flags
        for(i=0;i<0xFFFF;i++); // Delay for Osc to stabilize
        if ((SFRIFG1&OFIFG) == 0)
        {
            XT2_Work = 1;
            break;
        }
    }while ((RetryTime–)>0); // Test oscillator fault flag
       if (XT2_Work == 0)//XT2不起振,初始化DCO
    {
        UCSCTL4 = SELA_2 + SELS_3 + SELM_3;
    }
    __no_operation();
}

由于没有外接XT2, 最后应该是初始化了DCO, 使用示波器测量SMCLK, 测试了5pcs板子, 时钟差别比较大
14.75Mhz, 13.25Mhz, 15.475Mhz, 15.15Mhz,13.75Mhz

问题:  使用内部DCO为什么不同板子时钟差距这么大, 如何能让DCO比较准确的固定在一个频率上

Ho Cong:

补充一下:  是否启用FLL效果会好一些? 如果启用FLL, 还有如下疑问: 1. 由于没有XT1和XT2, FLLREFCLK是不是就只能选择REFOCLK(32.768Khz) (UCSCTL3 bit6-4) 2. 由于FDCOCLK=D*(N+1)(FLLREFCLK/n), 那DCORSEL(UCSCTL1 bit6-4)是否还有作用?作用是什么?

Ho Cong:

回复 Ho Cong:

没有高手指点一下么?

目前我测试的结果:如果按以下设置,其实UCSCTL2其实是默认值, FFLLREFCLK是32.768K    UCSCTL1 = DCORSEL_7;    UCSCTL2 = FLLD_1+(0x32-1);    UCSCTL3 = SELREF_2+FLLREFDIV_0;    UCSCTL4 = SELA_2+SELS_3+SELM_3;那么由公式FDCOCLK = D*(N+1)*(FFLLREFCLK/n) = 2*(49+1)*32768/1 = 3.2768Mhz但实际测试得出频率在14Mhz左右,而且波动范围较大,是否和DCORSEL的选择有关?如果将UCSCTL2 改成FLLD_1+(320-1)        (计算得出FDCOCLK 为20M)那么程序无法运行….但在debug模式下,在这里设置一个断点就能正常运行,如果不设断点,也无法运行….求教原因,求大神指点

Shi JianHua:

首先,MCLK可以输出,smclk也可以同时输出,默认的dco大多是800k~1000k,差不多,你亮的差这么多,还真不清楚,打开fll确实可以稳定一部分,但是如果你想统一,还是建议你用外部,这样你就不用考虑时钟的问题了。我的设计基本上都留着外部晶振接口,以防不测。

Shi JianHua:

回复 Ho Cong:

干的多了,自然经验就丰富了,弯路都少走了,这就是老板要有经验的开发工程师的意义。

赞(0)
未经允许不得转载:TI中文支持网 » MSP5418 DCO时钟问题请教
分享到: 更多 (0)