以下是时钟源初始化程序,程序全速运行发现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
*/
Long Huang:
DCOFFG一直未为1–这里多了个未字,是一直为1,所以卡在这
Long Huang:
哪怕不用do while,把 do while注释掉,最后就以下三句:
__delay_cycles(76563);
UCSCTL7 &= ~(XT2OFFG | XT1LFOFFG | DCOFFG);
SFRIFG1 &= ~OFIFG; // Clear fault flags
执行到清0OFIFG还是会出现这种问题,把清0OFIFG这句去掉反而能正常工作。
Bruce Wei:
你好!
请问你期望的时钟配置是什么? ACLK MCLK SMCLK 分别使用什么作为时钟源,需要频率是多高?
Long Huang:
ACLK用外部32.768KHz MCLK SMCLK来自FLL,2.45MHZ。
我现在发现问题所在了,就是第26脚AUXVCC3引脚需要供电,供电后就不存在该问题。如果该脚接地,这个问题又出现了,手册上说明RTC不用该引脚可以接地的,看来是不行啊??作何解释呢?
Jacky Xu:
Vcc几伏供电? 用示波器看下外晶振是否起振
Long Huang:
找到问题所在了,就是第26引脚AUXVCC3引脚悬空或接地,就不行,如果该引脚接VCC就可以通过。
怎么会和这个有关呢?手册上说RTC不用的话,AUX3VCC3是可以接地的。这样,不是矛盾了么?