doit_ourdev 发表于 2014-11-12 09:39:55

求助,msp430f5438A内部时钟倍频问题

最近做一个项目要求低功耗,原先使用的是外部8M晶振,但8M晶振一直起振使功耗无法去到想要的水平(3.6v供电,50微安电流)。如果进入低功耗时强制把外部晶振引脚关掉的话,退出低功耗重新初始化时钟也无法让8M晶振重新起振,这样就无法正常工作。后来为了解决这个问题就想到用内部时钟,但内部时钟倍频始终没办法调整到8M,频率好像被哪里限制了,最高输出的频率测得是2.358M。请各位帮忙看看,谢谢!
下面是我的时钟初始化程序(不好意思,这个程序也是网上找来的):
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后才稳定,这个延时即是根据这种情况算得的。
    __delay_cycles(250000);

    // 等待异常标志清除
    // 用VLO和REFO做MCLK的时钟源的时候,不需要考虑这些标志,直接用。
    do
    {
      // 清异常标志
      UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
      SFRIFG1 &= ~OFIFG;                  
    }while (SFRIFG1&OFIFG);   // 看看异常是否还在
}

按芯片说明倍频是通过UCSCTL2寄存器调整的,但我无论怎么更改都无法把频率调上去,就如上面所说频率好像被哪个地方限制住了,请各位帮忙看看。

doit_ourdev 发表于 2014-11-12 10:17:51

请大家出出主意,这问题困扰了我好久。

doit_ourdev 发表于 2014-11-12 21:13:20

怎么都没人回复我?是不是我的问题有问题?
页: [1]
查看完整版本: 求助,msp430f5438A内部时钟倍频问题