单片机MSP430入门--理论④--时钟模块-BCSCTL2寄存器

上期大概给大家汇总介绍了,在MSP430环境下的时钟寄存器DOCCTL和BCSCTL1寄存器,每个位代表的意义以及他们的设置方法

msp430单片机定时提醒器说明书(单片机MSP430入门理论④--时钟模块BCSCTL2寄存器)(1)

本期将重点介绍下,在MSP430环境下的时钟寄存器BCSCTL2,他每个位的意义以及他们的设置方法

1.0 BCSCTL2(Basic Clock System Control2)寄存控制器(用来设置SMCLK子时钟,MCLK主时钟),地址为58H,初始值为00H

msp430单片机定时提醒器说明书(单片机MSP430入门理论④--时钟模块BCSCTL2寄存器)(2)

SELM0-SELM1: 选择MCLK的时钟源,0和1为DCOCLK,2为XT2CLK,3为LFXT1CLK

DIVM0-DIVM1: 选择MCLK的分频因子,DIVM=0,1,2,3,对应MCLK的分频因子1,2,4,8

SELS: 选择SMCLK的时钟源,0为DCOCLK,1为XT2CLK/LFXTCLK

DIVS0-DIVS1: DIVS = 0,1,2,3,对应SMCLK的分频因子为1,2,4,8

DCOR: 选择电阻,0为内部电阻,1为外部电阻

示例:

设置BCSCTL2,选定MCLK和SMCLK的时钟源XT2,并设置其分频因子

①DCOR一般设置为默认值内部电阻

②选择MCLK的时钟源,BCSCTL2 = SELM_2;

选择SMCLK的时钟源,BCSCTL2 = SELS;

选择MCLK跟SMCLK的时钟源XT2,BCSCTL2 = SELM_2 SELS;

③设置MCLK的分频因子,

BCSCTL2 = DIBM_0;//不分频

BCSCTL2 = DIBM_1;//2分频

BCSCTL2 = DIBM_2;//4分频

BCSCTL2 = DIBM_3;//8分频

④设置SMCLK的分频因子,

BCSCTL2 = DIVM_0; //不分频

BCSCTL2 = DIVM_1; //2分频

BCSCTL2 = DIVM_2; //4分频

BCSCTL2 = DIVM_3; //8分频

3.0 OFIFG是振荡器标志失效标志位,当用外部晶振时,如果外部晶振正常起震了,那OFIFG就会变成0,默认为1,所以没起震的话要继续循环等待,具体源程序如下:

msp430单片机定时提醒器说明书(单片机MSP430入门理论④--时钟模块BCSCTL2寄存器)(3)

在PUC信号后,由DCOCLK作MCLK的时钟信号,根据需要可将MCLK的时钟源另外设置为LFXT1或XT2,设置顺序如下:

  (1)清OSCOFF/XT2

  (2)清OFIFG

  (3)延时等待至少50uS

  (4)再次检查OFIFG,如果仍置位,则重复(1)-(4)步,直到OFIFG=0为止。

  (5)设置BCSCTL2的相应SELM。

具体主要代码如下:

WDTCTL=WDTPW WDTHOLD;//关闭看门狗

/*------选择系统主时钟为8MHz-------*/

BCSCTL1&=~XT2OFF;//打开XT2高频晶体振荡器

do

{

IFG1&=~OFIFG;//清除晶振失败标志

for(i=0xFF;i》0;i--);//等待8MHz晶体起振

}

while((IFG1&OFIFG));//晶振失效标志仍然存在,只有跳出循环的时候才认为晶振起震了

BCSCTL2|=SELM_2 SELS;//主时钟和从时钟都选择高频晶振

BCSCTL2=SELM_2 SELS;语句必须放在while之后,因为当XT2没有起振之前,XT2处于错误阶段,因此在XT2没有起振之前将它设定为主时钟与子系统时钟后,单片机会自动的将DCO设定为SMCLK MCLK的时钟源

msp430单片机定时提醒器说明书(单片机MSP430入门理论④--时钟模块BCSCTL2寄存器)(4)

,