MSP540F5438A时钟启动

时间:2014-03-10 18:10:33

标签: msp430

我是MSP430的新手,我正在努力更好地了解时钟启动过程。就我目前的目的而言,我将使用4 MHz MCLK将PMMCOREV排除在等式之外,对于PMMCOREV = 0,它在0-8 MHz范围内。

有人会对这些部分有所了解,请检查我的逻辑和假设:

当部件启动时,选择XT1作为FLL参考,并选择DCOCLKDIV作为MCLK输入。 DIVM为0,因此不分割MCLK源。

当系统启动时,晶体还不稳定所以我假设UCS进入故障安全模式并使用REFO(内部修整32K)作为FLL参考。

我已经有点困惑了。如果将分开的DCO用于MCLK,我们如何确保FLL稳定?那么核心是如何运作的呢?

在我看来,MCLK应该是VLO或REFO,直到你能够优雅地提升。

有人可以澄清这些细节并引导我正确指导这些时钟吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

根据你的评论,是的。

启动时DCO将是时钟 - 所以你只需修改UCSCTL寄存器并等待振荡器稳定下来就可以了。

以下是一般步骤:

  1. 逐步更改vcore级别(如果需要,在您的情况下不是)
  2. 启用XT1
  3. 配置驱动器强度
  4. 选择MCLK,SMCLK和ACLK的时钟源并执行您需要执行的任何源部门
  5. 通过检查故障标记,允许XT1,XT2和DCO稳定。
  6. 你的外部水晶是4Mhz - 你想直接用它作为MCLK吗?或者您的角度是将其用作DCO FLL的参考,并将DCO用于MCLK(以获得更高的MCLK频率)?您需要的核心电压取决于您的MCLK频率,而不是您的外部晶振频率。因此,如果您想要使用高于8Mhz的MCLK速率,则需要考虑将PMMCOREV升级到01.

    为方便起见,这里是SLAU208M的UCS寄存器的参考。 http://www.ti.com/lit/ug/slau208m/slau208m.pdf#page=172

    根据您的OP,如果您想使用XT1,我认为您应该执行以下操作:

    //1) Enable XT1 - XT1 will be off by default. You may not need to explicitly
    //   perform this step. According to pg. 162 in SLAU208M, XT1 will be
    //   enabled when you select it as the source for one of the clocks. But I
    //   like being explicit!
    UCSCTL6 &= ~XT1OFF //XT1OFF= 0x0001u
    
    //2) Clear the XT1DRIVE bits - it may not be necessary to clear these bits
    //   explicitly, but XT1's drive strength can be reduced to 0 w/ a 4MHz
    //   crystal. By default, this will be b11, full scale, which will consume
    //   more power, but result in a quicker settling time.
    UCSCTL6 &= ~XT1DRIVE0; //XT1DRIVE0 = 0x0040u
    UCSCTL6 &= ~XT1DRIVE1; //XT1DRIVE1 = 0x0080u
    
    //3) Select XT1 as the clock source for XT1. UCSCTL4 defaults to 0x44 at
    //   power on - DCOCLKDIV (b100). SELM_XT1CLK = b000.
    UCSCTL4 &= SELM__XT1CLK; //SELM__XT1CLK = 0x0000u
    
    //4) Wait for XT1 to stabilize
    do
    {
       //Explicitly clear the XT1 low and high frequency fault flasg, XT2 fault flag,
       //and DCO fault flag. 0X0008u, 0x0002, 0x0004, 0x0001 respectively.
       UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); 
       //Clear the oscillator fault interrupt flag in the special function interrupt
       //flags register.
       SFRIFG1 &= ~OFIFG; //0X0002U
    } while (SFRIFG1&OFIFG); //Test to see if any oscillator fault flags are asserted.
    

    我正在使用IAR系统,不确定您是否使用CCS,如果这些定义的名称不同。我继续为每个操作数键入十六进制。

    在msp4305438A上,您无需对旁路做任何事情。

    这会回答你的问题吗?

    另外,在你的OP中你提到想要使用XT1作为FLL的参考。这是使用UCSCTL3完成的。 SELFREF是您要设置为b000以使用XT1的字段,

    以下是IAR中MSP4305438A标头的定义:

    #define SELREF0             (0x0010u)    /* FLL Reference Clock Select Bit : 0 */
    #define SELREF1             (0x0020u)    /* FLL Reference Clock Select Bit : 1 */
    #define SELREF2             (0x0040u)    /* FLL Reference Clock Select Bit : 2 */