/********************************************
函数名称:Clock_Init
功能 :系统时钟初始化
参数 :无
返回值 :无
其它 :MCLK = 12MHz, SMCLK = 1MHz
**********************************************/
void Clock_Init(void)
{
u16 time = 10; //定义一个常数,
//外部时钟在这个时间内如果还是不能起振则选择内部时钟
BCSCTL1 &= ~XT2OFF; //开启XT2振荡器
BCSCTL3 |= XT2S_2 + LFXT1S_2;
do
{
IFG1 &= ~OFIFG; //清除振荡器失效标志
__delay_cycles(100); //在外部晶振还没有起振时,时钟来源于内部大概1MHz的DCO
}
while ((IFG1 & OFIFG) && --time);//查询时钟切换成功
if (time == 0) //外部时钟有问题
{
BCSCTL1 |= XT2OFF; //关闭XT2振荡器
}
else //外部时钟正常起振
{
BCSCTL2 = 0X80; //MCLK的时钟源为XT2,分频系数为1
//SMCLK的时钟源为内部DCO,分频系数为1
}
} |