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.

MSP430F5529 XT1不配置就会出错



现在想要把MCLK通过FLL倍频到25MHZ。但是发现,如果不打开并配置好XT1,好像某个标志位就会一直置位,导致程序无法运行。如果XT1无法正常工作,系统不是会自动切换到REFO吗?我现在不用XT1,但还要把它打开,很麻烦啊?有没有人能够解释一下啊。非常感谢啊!!!!!!

  • 能否把你的晶振配置代码放到论坛上来

  • void MCLK_SET(void)
    {
     P5SEL |= BIT4|BIT5;
     UCSCTL6 |= XCAP_3;//适配电容
     UCSCTL6 &=~ XT1OFF;//打开XT1

    /*上面三句配置XT1,没有的话,MCLK好像就没信号了*/
     SetVCore(3); //提高Vcore电压到最高级,以满足倍频需求
     __bis_SR_register(SCG0);
     UCSCTL0 = 0; 

     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);

     while (SFRIFG1 & OFIFG) 

     {
      UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
      SFRIFG1 &= ~OFIFG;
     }
     UCSCTL4 = UCSCTL4&(~(SELS_7|SELM_7))|SELS_3|SELM_3;//选择DCO输出作为时钟源
    }

  • ZhaoF 你好,

    这段程序中有一段代码就是检查是否所有的时钟源(XT1,XT2,DCO)是否都正常起振,如果有一个没有起振,下面的循环就不会通过。

    while (SFRIFG1 & OFIFG) 

     {
      UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
      SFRIFG1 &= ~OFIFG;
     }
     UCSCTL4 = UCSCTL4&(~(SELS_7|SELM_7))|SELS_3|SELM_3;//选择DCO输出作为时钟源
    }

    所以,如果没有用XTI,可以不用检查这个位。上面的代码中,OFIFG会在任何一个时钟源没有起振的时候置位,可以这样改:

    while (UCSCTL7 & 0x01) //检查DCO是否正常

     {
      UCSCTL7 &= ~ DCOFFG;
      SFRIFG1 &= ~OFIFG;
     }

    跳过XT1的检查。