添加至 MSP430F5438A时钟问题请教 wiki 页面

This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430F5438A时钟问题请教



各位好:

我现在在用430的5438A做一款控制器,使用的板件为自己设计的板件,编译器采用IAR5.30在XP的操作系统上面,

板件上未设计XT1的输入,晶振只设计了一个XT2的晶振,目前在调试中发现的问题是:

在XT2焊接为8M的晶振时,程序调试正常,我现在想把板件的速度提起来,要把主频的速度放到20M,在XT2焊接成20M的晶振时,整个程序停止运行,在查阅资料时发现,可以通过FLL技术来进行倍频,就把晶振又焊接回8M,但是此时无论如何设置,想把主频跑到24M,无论如何设置  UCSCTL2中的 FLLN;,主频始终是8M,没有改变,将程序贴出来,请给与解答,谢谢

  P5SEL |= BIT2 + BIT3;                     // Port select XT2
  UCSCTL6 &= ~XT2OFF;                       // Enable XT2
 
  UCSCTL6 |= XT2DRIVE0 + XT2DRIVE1;         // Enable XT2
  UCSCTL6 |= XT2BYPASS;                     // Enable XT2
 
 
  UCSCTL1 = DCORSEL_4;
  UCSCTL2 = FLLN1;
  UCSCTL3 |= SELREF_5;                      // FLLref = XT2
  UCSCTL4 |= SELA_2 + SELS_3 + SELM_3;               // SMCLK=MCLK=XT2

  // Loop until XT1,XT2 & DCO stabilizes
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
                                            // Clear XT2,XT1,DCO fault flags
    SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag

  • we we,

    请问你把PMM 的Vcore  level提高了吗?默认Vcore为level 0, CPU最高可以跑到8MHz, 要是再高的话,需要提高Vcore, 其Vcc也得达到相应值,不能太低。

  • we we,

    为了达到性能和功耗的最佳匹配,MSP430F5xxx系列的PMM非常灵活,有4个level的核电压,分别可以支持逐步升高的CPU主频,需要的供电电压也逐步提高。示意图如下图,如果想要使得CPU达到最高的25MHz,则需要先将Vcore升至level3,当然此时的供电电压Vcc必须在2.4V~3.6V之间。即主频增高,则需要供电Vcc足够高,Vcore level够,当然,此时功耗也在提高。

    具体数据请查看对应datasheet。同时,TI也提供了‘MSP430F5xx and MSP430F6xx Core Libraries’来帮助用户简化控制,请从http://www.ti.com/lit/zip/slaa448下载源代码,并从网上下载对应文档。

  •   SetVcoreUp(PMMCOREV_3);                     // Set VCore to 1.8MHz for 20MHz
      unsigned char i;
      P5SEL |= BIT2 + BIT3;                     //P5.2和P5.3选择为晶振XT2输入 
      UCSCTL6 &= ~XT2OFF;
      UCSCTL3 |= SELREF_2; 
      UCSCTL4 |= SELA_2;  
      do
      {
        UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
        SFRIFG1 &= ~OFIFG;                          // 清除振荡器失效标志
        for (i = 0xFF; i > 0; i--);                 // 延时,等待XT2起振
      } while (SFRIFG1 & OFIFG);                    // 判断XT2是否起振
      UCSCTL6 &= ~XT2DRIVE0;
      UCSCTL4 |= SELS_5 + SELM_5;                   //选择MCLK、SMCLK为XT2,
      return;

    现在在焊接20M的晶振下,已经能跑起来了,但是我还是没有把倍频的东西搞定,搞不清楚什么原因,能不能麻烦给个示例代码,来呈现一下倍频XT2的例程,谢谢了

  • we we,

    MSP430Ware中没有直接倍频XT2的示例,但是有两个示例:

    1. msp430x54xA_UCS_3.c Software Toggle P1.0 with 12MHz DCO
    2. msp430x54xA_UCS_4.c FLL+, Runs Internal DCO at 2.45MHz with LFXT1 as Ref

    示例1--倍频REFO = 32kHz 到12Mhz,供给MCLK, SMCLK

    示例2-倍频LFXT1 = 32kHz 到2.45Mhz,供给MCLK, SMCLK

    你把两者结合修改一下,改为你想应用的方式吧。2例程总应该有所有你需要主要的事项了。

    附件为示例1.

    希望对你有帮助!O(∩_∩)O~