XT2OFFG 、XT1LFOFFG 、 XT1HFOFFG 、 DCOFFG这四个标志位对应着相应振荡源的运行状态, XT2OFFG 、XT1LFOFFG 、 XT1HFOFFG上电时默认都是1,即上电时晶振1和晶振2都是关闭的,如果相应接口上确实接上了晶振,则需要在程序开始时运行一下语句:
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
for(unsigned int i = 0; i < 10000; i++ ); // Delay for Osc. to stabilize
}while (SFRIFG1&OFIFG);
手工清除这四个标志位,因为这四个标志位中任意一个置位都会将OFIFG置位,所以需要同时清除OFIFG,延时一段时间后判断OFIFG位,如果为1,说明某个或几个晶振没有正常起振,再重复上面的步骤,如果为0,说明晶振正常起振,可以使用外部晶振。
总之,430在上电后,默认用内部DCO振荡器以1MHz的频率工作(频率不是很稳定),如果外部晶振没有正常起振,则继续以该状态工作。所以为保证系统外部晶振正常工作,需运行上面的程序,延时一段时间来使外部晶振正常工作。 如果没有运行上述程序,430会一直用dco工作