MSP 430的时钟初始化的问题,晶振不振?
下面的程序是我的时钟初始化程序,但是有一个问题,那就是,每次系统运行,都会卡在while ()那里循环,不能向下继续执行,也就是说,检查晶振一直是异常的,但是我一点停止,然后点继续运行,它就可以运行下去了。也就是说,这时候时钟出错标志没有了。这个是为什么呢? 而且有时候用在别的主程序程序上又好像没有这个问题。
void Clock_Init(void)
{
//DIVA1,0=0:ACLK divider number=1
//XTS=0:LFXT1 low Freq. XT2OFF=0:XT2 Oscilator ON,XT5V=0: should always be reset
/*BCSCTL1 = DIVA_0 + RSEL2 + RSEL1 + RSEL0;//0Xx87;;
BCSCTL1 &=~ (XT2OFF + XTS + XT5V);
//SELM1,0=2:MCLK source select DCOCLK, DIVM1,0=0:MCLK divider number=1,
//SELS=0: SMCLK resource select XT2CLK, DEIS1,0=0:SMCLK divider number=1
//DCOR=0: Internal resistor enable(DCO start)
BCSCTL2 = SELS + DIVS_0 + SELM_0 + DIVM_0;//0x08;
*/
uint i;
P11DIR = BIT2 + BIT1 + BIT0; // P11.2,1,0 to output direction
P11SEL = BIT2 + BIT1 + BIT0;
P7SEL|=BIT0+BIT1;
P5SEL |= BIT2 + BIT3; // 启动XT1 XT2
UCSCTL6&=~(XT1OFF+XT2OFF+XT2BYPASS);
UCSCTL6|=XT2DRIVE_3;
/*****************************************************************/
while (SFRIFG1 & OFIFG) // 等待时钟系统正常工作
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); //清各时钟出错标志位
SFRIFG1 &= ~OFIFG; //清总时钟标志位
//for(i = 0; i <100; i++);
__delay_cycles(6000);
}
/*************************************************************/
UCSCTL4= SELM_5+ SELA_5 + SELS_5;// 设置时钟源
UCSCTL0=0X0000;
UCSCTL1=0X0071;
UCSCTL2=0X0008;
UCSCTL3=0X0054;
//UCSCTL5|=DIVM__32;
}
[解决办法]
好像我在用149的时候也有这个问题,后来不管它,只要正常运行的时候没有问题就不理了