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.

MSP430F6723的时钟源配置,按照官方例程,DCO不工作是什么原因?



以下是时钟源初始化程序,程序全速运行发现MCLK\SMCLK只有540KHZ,然后单步调试发现程序死在do while里面出不来。

SFRIFG1 &= ~OFIFG; // Clear fault flags           //单步调试发现程序执行完这句后,UCSCTL0 = 0x00F8,DCOFFG一直未为1,然后就一直在这里死循环。如果把do while去掉,DCOFFG就一直为0,ALCK\MCLK\SMCLK输出都正常,只不过不能确定ALCK是内部REFO的还是外部晶振。

麻烦TI的技术支持帮忙看看,谢谢了!这个问题实在是太困扰了,新产品准备采用这个芯片,现在问题不解决都不敢用了。

// Setup LFXT1
UCSCTL6 &= ~(XT1OFF); // XT1 On
UCSCTL6 &= ~XCAP_3;
UCSCTL6 |= XCAP_2; // Internal load cap ~8.5PF

// Loop until XT1 fault flag is cleared
do
{
UCSCTL7 &= ~XT1LFOFFG; // Clear XT1 fault flags
} while (UCSCTL7 & XT1LFOFFG); // Test XT1 fault flag
UCSCTL6 &= ~(XT1DRIVE_3); // XT1 stable, reduce drive strength

// Initialize DCO to 2.45MHz
__bis_SR_register(SCG0); // Disable the FLL control loop
UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx
UCSCTL1 = DCORSEL_2; // Set RSELx for DCO = 4.9 MHz
UCSCTL2 = 74; // Set DCO Multiplier for 2.45MHz
// (N + 1) * FLLRef = Fdco
// (74 + 1) * 32768 = 2.45MHz

__bic_SR_register(SCG0); // Enable the FLL control loop

// Worst-case settling time for the DCO when the DCO range bits have been
// changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx
// UG for optimization.
// 32 x 32 x 2.45 MHz / 32,768 Hz = 76563 = MCLK cycles for DCO to settle
__delay_cycles(76563);
UCSCTL7 &= ~(XT2OFFG | XT1LFOFFG | DCOFFG);

// Loop until XT1, XT2 & DCO fault flag is cleared
/*
do
{
UCSCTL7 &= ~(XT2OFFG | XT1LFOFFG | DCOFFG);
// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags           //单步调试发现程序执行完这句后,UCSCTL0 = 0x00F8,DCOFFG一直未为1,然后就一直在这里死循环。如果把do while去掉,DCOFFG就一直为0,ALCK\MCLK\SMCLK输出都正常,只不过不能确定ALCK是内部REFO的还是外部晶振。
} while (SFRIFG1 & OFIFG); // Test oscillator fault flag
*/