一、时钟源
MSP430的Basic Clock Module+支持的时钟源有:
- DCOCLK:内部数字控制振荡器,Internal digitally contrlled oscillator。所有MSP430芯片都有。
MSP430G2553的DCO支持的最大频率一般为16MHz,且保存了1MHz、8MHz、12MHz、16MHz四个频率的校正信息。 - VLOCLK:内部超低功耗、低频振荡器,Internal very low power, low frequency oscillator,典型频率12kHz。所有MSP430芯片都有。使用方便,但精准性不是太高。
MSP430G2553的VLO频率在4kHz到20kHz之间,且受温度、供电电压影响较大。 - LFXT1CLK:低频/高频晶体振荡器,Low-frequency/high-frequency oscillator。可以是32.768kHz的晶体或外部时钟(LF模式时),或者是400kHz到16MHz的晶体/晶振/外部时钟源(HF模式时)。不是所有MSP430芯片都支持。
MSP430G2553支持的低频晶体(LFXT1)的典型频率是32.768kHz,且不支持HF模式。 - XT2CLK:高频振荡器,high-frequency oscillator,频率范围最多支持400kHz到16MHz,可以是晶体/晶振/外部时钟源。不是所有的MSP430芯片都支持。
MSP430G2553不支持XT2。
二、时钟信号
MSP430的Basic Clock Module+包含了三个时钟信号:
- MCLK:主时钟,Master clock。可以从以上四个时钟源中选择其一作为MCLK来源,并支持1/2/4/8分频。用于CPU和系统。
- SMCLK:子主时钟,Sub-main clock,可以从以上四个时钟源中选择其一作为SMCLK来源,并支持1/2/4/8分频。用于特定的外设。
- ACLK:辅助时钟,Auxiliary clock,可选择LFXT1CLK或VLOCLK作为ACLK来源,并支持1/2/4/8分频。用于特定的外设,特别是低功耗待机时。
典型的时钟系统框图如下图:
留意只有DCO和VLO是所有MSP430的标配,其他的要看具体型号:
三、DCO频率设置
调整DCO频率可以通过修改BCSCTL1寄存器中的RESELx位段、DCOCTL寄存器的DCOx、MODx位段来实现。如,若要设置DCO频率为1MHz左右,通过查数据手册中“DCO Frequency”表可得0.8MHz~1.5MHz频率对应设置参数为(7,3),即RSELx=7, DCOx=3, MODx=0。但这样做误差很大。
BCSCTL1 &= ~BIT3; // set to DCO(7,3)
BCSCTL1 |= BIT0 + BIT1 + BIT2;
DCOCTL &= ~BIT7;
DCOCTL |= BIT5 + BIT6;
更好的方法是直接将BCSCTL1和DCOCTL寄存器设置成已校准好的值。
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
这样做的频率误差如下图所示。
四、ACLK时钟源设置
ACLK时钟来源由BCSCTL3寄存器中的LFXT1Sx位段设置,可以切换为LFXT1、VLOCLK或外部时钟源;由BCSCTL1寄存器中的DIVAx位段设置分频比。当设置为LFXT1时,还需要根据板子情况设置effective capacitance。
如设置ACLK来源为VLOCLK、四分频:
BCSCTL3 |= LFXT1S_2; //VLO mode
BCSCTL1 |= DIVA_2; //ACLK divided by 4
设置ACLK来源为LFXT1、八分频:
BCSCTL3 |= LFXT1S_0; //32k crystal selected
BCSCTL3 |= XCAP_2; //~8.5pF effective capacitance (for G2553)
BCSCTL1 |= DIVA_3; //ACLK divided by 8