下边是msp430的时钟管理子函数,使用于大多数的MSP430芯片。
void Init_Clk(void)
{
unsigned char i;
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
BCSCTL1 &= ~XT2OFF; //打开XT振荡器
BCSCTL2 |= SELM_2 + SELS; //MCLK为8MHZ,SMCLK为1Mhz
do
{
IFG1 &= ~OFIFG; //清楚震荡错误标志
for (i = 0xFF; i > 0; i--); //延时等待
}
while ((IFG1 & OFIFG)); //如果标志为1,则继续循环等待
_NOP();
}
由于在msp430中,微控制器的时钟单元是可以选择的,可以根据功耗来选择时钟。所以需要选择微控制器的时钟。msp430有3种时钟,分别是ACLK、MCLK、SMCLK。需要注意的是DCO的频率会随着温度和电压的变化而变化,频率精度是非常差的,虽然可以通过一些设置来调整它的频率,从而提高精度,但最好还是选用外部的晶振作为时钟。
通常情况下,ACLK作为低速设备的时钟,MCLK作为CPU和系统的时钟,SMCLK作为高速设备的时钟,微控制器的功率是和时钟频率成之比的。