我在使用430f5438A单片机,我使用外部xt2 22.118MHz的晶振,正常能跑起来,但有的时候会出现系统时钟返回默认配置的情况。我的单片机接有uart0和外部中断。我仔细看程序发现我在设置寄存器出错了,但是还能运行,这句 UCSCTL6 |= XT2DRIVE2(晶振的工作范围是24~32MHz)设置错了。应该设置成UCSCTL6 &= ~XT2DRIVE_1(晶振的工作范围是16~24MHz).这个寄存器设置错会导致系统时钟有返回默认值的情况吗?
SetVcoreUp(PMMCOREV_3); // Set VCore to 1.8MHz for 20MHz
unsigned char i;
P5SEL |= BIT2 + BIT3; //P5.2和P5.3选择为晶振XT2输入
UCSCTL6 &= ~XT2OFF;
UCSCTL3 |= SELREF_2;
UCSCTL4 |= SELA_2;
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
SFRIFG1 &= ~OFIFG; // 清除振荡器失效标志
for (i = 0xFF; i > 0; i--); // 延时,等待XT2起振
} while (SFRIFG1 & OFIFG); // 判断XT2是否起振
UCSCTL6 |= XT2DRIVE0;
UCSCTL4 |= SELS_5 + SELM_5; //选择MCLK、SMCLK为XT2,
return; |