本帖最后由 Shuyang 于 2019-1-22 15:56 编辑
3.4 时钟系统配置实例
下面我们就来举几个例子,学习如何配置时钟。
首先请大家再来回顾一下,默认情况下MSP430G2553单片机的MCLK和SMCLK都来源于DCO,频率约为1.1MHz;ACLK来源于外部晶振,频率为32.768kHz。请特别注意默认的MCLK和SMCLK的频率是未经校正的,如果需要精确地1MHz,还是要用上一节学到的指令来配置。另外ACLK默认的外部晶振如果电路板上没有焊接的话,单片机会自动切换到内部VLO。
例1 将MSP430G2553的时钟设置为:MCLK和SMCLK均为1MHz,ACLK设为32.768kHz - BCSCTL1 = CALBC1_1MHZ; // 要取得精确的1MHz,一定要调取校正参数
- DCOCTL = CALDCO_1MHZ; // ACLK保持默认即可
复制代码
例2 将MSP430G2553的时钟设置为:MCLK和SMCLK均为16MHz,ACLK设为VLO - BCSCTL1 = CALBC1_16MHZ; // 调取16MHz校正参数
- DCOCTL = CALDCO_16MHZ;
- BCSCTL3 |= LFXT1S_2; // 设为VLO
复制代码
低频晶振源是由BCSCTL3中的LFXT1Sx控制的。将LFXT1Sx置为10即可用VLO作为低频时钟源。
在MSP430G2553.h头文件中,可以找到寄存器对应的宏定义: - #define LFXT1S_0 (0x00) /* Mode 0 for LFXT1 : Normal operation */
- #define LFXT1S_1 (0x10) /* Mode 1 for LFXT1 : Reserved */
- #define LFXT1S_2 (0x20) /* Mode 2 for LFXT1 : VLO */
- #define LFXT1S_3 (0x30) /* Mode 3 for LFXT1 : Digital input signal */
复制代码
例3 将MSP430G2553的时钟设置为:MCLK为4MHz,SMCLK为2MHz - BCSCTL1 = CALBC1_8MHZ; // 先将DCO设为8MHz
- DCOCTL = CALDCO_8MHZ;
- BCSCTL2 |= DIVM_1 + DIVS_2; // 再对MCLK 2分频,SMCLK 4分频
复制代码
MSP430G2单片机出厂时没有提供4MHz和2MHz的校正参数,但我们可以灵活利用分频功能来得到想要的频率。先将DCO频率设为8MHz,再将DIVM和DIVS寄存器设为2分频和4分频,即可得到4MHz和2MHz的频率。
例4 将MSP430G2553的时钟设置为:MCLK设为32.768kHz外部晶振
MSP430G2553包装中提供了一个32.768kHz的外部晶振,但出厂时未焊接。要使用外部晶振,需要将晶振焊接在LaunchPadQ2处。另外晶振要想起振,需要配合2个12.5pF的外围电容。MSP430G2553内部专门内置了电容配合晶振使用,以减少外围电路复杂程度。BCSCTL3寄存器的XCAPx可以配置此电容。
1) 开启晶振并设置为合适的模式; 2) 清除OFIFG标志位; 3) 等待至少50us; 4) 检查OFIFG,如果未能清除成功则重复2-4步骤。
其中OFIFG是MSP430的低频晶振失效标志位,如果外部晶振或是内部VLO晶振发生故障,此位将被置为高电平,且单片机会自动切换DCO作为MCLK的时钟源。当MSP430上电时OFIFG也会被置为高电平,因此在设置外部晶振或是VLO作为MCLK时钟源时,必须先将OFIFG清除。
本例具体代码如下: - ...
- BCSCTL3 |= LFXT1S_0 + XCAP_3; // clock system setup
- while(IFG1 & OFIFG) // wait for OSCFault to clear
- {
- IFG1 &= ~OFIFG;
- _delay_cycles(100000);
- }
- _bis_SR_register(SCG1 + SCG0); // clock system setup
- BCSCTL2 |= SELM_3;
- ...
复制代码
|