我是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,直到你能够优雅地提升。
有人可以澄清这些细节并引导我正确指导这些时钟吗?
谢谢!
答案 0 :(得分:0)
根据你的评论,是的。
启动时DCO将是时钟 - 所以你只需修改UCSCTL寄存器并等待振荡器稳定下来就可以了。
以下是一般步骤:
你的外部水晶是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 */