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.

F5510系统时钟问题

Other Parts Discussed in Thread: MSP430F5510

MSP430F5510外围外接XT1=32.768KHz,XT2=12MHz。现目前要使用USB功能,但是之前有问题是XT2只能被USB使用,导致系统的主时钟MCLK和SMCLK 只能使用内部的DCO=12MHz,但是系统跑起来很不稳定,配置时钟输出来看到了SMCLK和MCLK系统在12.4MHz左右,方波的过冲很大。我么AD采样,定时器都是一SMCLK作为时钟源进行的分频,请问是否有什么方式既能USB工作,又能系统工作稳定?期待您们的回复!

  • MCLK和SMCLK 只能使用内部的DCO=12MH,是怎么产生的?FLL用了没有?频率参考时钟源是哪个?

    建议您参考5529开发板中时钟信号的配置。

  • USB的时钟是通过外部时钟进行倍频的,当芯片包括XT2,那么会将XT2作为USB时钟的参考时钟源。CLKref>1.5MHz. 而SMCLK是来源于DCO, FLL也可以以XT1为参考时钟源。所以DCO的精度也很高。不存在系统不稳定的问题。

  • 我利用的就是USB开发包里面的系统时钟设置,配置如下。

    #ifndef _USB_

    static U8 Init_Clock(void)

    {

             P5SEL |= BIT2+BIT3;                       // Port select XT2

             P5SEL |= BIT4+BIT5;                       // Port select XT1

             UCSCTL6 &= ~(XT2OFF+XT1OFF);                       // Set XT2 XT1 On

    #if defined ( _XTAL_32M)

             UCSCTL6 |= XCAP_3;                         // Internal load cap

             UCSCTL5 |= 0x0011;                         //SMCL=MCLK=16Mhz

    #elif defined (_XTAL_16M)

             //UCSCTL6 |= XCAP_3;

             UCSCTL5 |= 0x0000;                       //16/1=16Mhz

    #elif defined (_XTAL_12M)

             //UCSCTL6 |= XCAP_3;

      UCSCTL5 |= 0x0000; //SMCL=MCLK=12Mhz

    #endif

             do{

               UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);                               // Clear XT2,XT1,DCO fault flags

               SFRIFG1 &= ~OFIFG;                             // Clear fault flags

             }while (SFRIFG1&OFIFG);                         // Test oscillator fault flag

    #if defined(_XTAL_32M)

    UCSCTL6 |= XT2DRIVE_3;                               // Decrease XT2 Drive according to,16~24 expected frequency  

    #elif defined(_XTAL_16M)

    UCSCTL6 |= XT2DRIVE_2;                               // Decrease XT2 Drive according to,16~24 expected frequency  

    #elif defined (_XTAL_12M)

    UCSCTL6 |= XT2DRIVE0;                               // Decrease XT2 Drive according to,16~8 expected frequency  

    #endif

    UCSCTL4 |= SELA__XT1CLK + SELS_5 + SELM_5;       // ACLK=XT1 SMCLK = MCLK = XT2

           return 0;

    }

    #else

    static U8 Init_Clock(void)

    {

       //Initialization of clock module

       //PIN Select

       P5SEL |= BIT2+BIT3;                       // Port select XT2

       P5SEL |= BIT4+BIT5;                       // Port select XT1

       //Open XT1

       UCSCTL6 &= ~(XT1OFF);

       do{

         UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);       // Clear XT2,XT1,DCO fault flags

          SFRIFG1 &= ~OFIFG;                             // Clear fault flags

       }while (SFRIFG1&OFIFG);                         // Test oscillator fault flag

       //use REFO for FLL and ACLK

       UCSCTL3 = (UCSCTL3 & ~(SELREF_7)) | (SELREF__REFOCLK); //

       UCSCTL4 = (UCSCTL4 & ~(SELA_7)) | (SELA__XT1CLK); //ACLK driven by XT1

       //MCLK will be driven by the FLL (not by XT2), referenced to the REFO

       Init_FLL_Settle(USB_MCLK_FREQ / 1000, USB_MCLK_FREQ / 32768);   //Start the FLL, at the freq indicated by the config

       //constant USB_MCLK_FREQ

       XT2_Start(XT2DRIVE_0);                                           //Start the "USB crystal"

       return 0;

    }

    #endif

    我把ACLK、MCLK还有SMCLK 通过PIN映射出来,用示波器测试发现MCLK和SMCLK极其不稳定,如11.5MHZ、12.6MHz摆动。并且测试出SMCLK的幅度只有50mv。系统很多时钟源都来源于SMCLK,所以如Timer和ADC都相继出现问题。

     

     

     

     

  • 在使用USB功能时,建议采用内部DCO作为系统的MCLK或ACLK,否则有可能在USB初始化时失败,造成USB不能正常工作。