单片机MSP430入门--理论③--时钟模块-DCO和BCS寄存器
上期大概给大家汇总介绍了,MSP430时钟模块的3个晶振和3个主要时钟信号,要知道时钟是单片机的脉搏,如果时钟没设置好,单片机将无法工作
本期将重点介绍下,在MSP430环境下的时钟寄存器BCSCTL1,BCSCTL2,以及他们的设置方法
1.0 DCOCTL,DCO寄存控制器
DCO0-DCO2(BIT5-7):定义了8种频率,而频率由直流发生器的不同电流来定义
MOD0-MOD4(BIT0-4):频率的微调
1.1 DCO的调节:
①设置BCSCTL2的DCOR的bit来选择是1为外部电阻还是0为内部电阻,以确定一个基准频率,默认为0
②通过BCSCTL1寄存器的RSELx来进行分频,确定16种时钟频率;
③通过DCOCTL寄存器中,DCOx在标称频率基础上分段粗调,选择频率;
④通过DCOCTL寄存器中,MODx的值对频率进行细调,选择DCOx与DCOx+1之间的频率;
示例:
//DCOCTL初始值为60H,即DCOCTL |= DCO1 +DCO2;
DCOCTL |= DCO0 + DCO1 +DCO2 ;//MAX DCO
//MOD0-MOD4:频率的微调一般保持默认即可
//系统默认BCSCTL1寄存器的RSELx =4
2.0 BCSCTL1(Basic Clock System Control 1)寄存器,地址58H,初始值84H
XT2OFF:控制XT2振荡器的启停,0为开启,1为关闭
XTS:选择LFXT1工作在低频晶体模式(XTS=0)还是高频晶体模式(XTS=1)
DIVA0-DIVA1:选择ACLK的分频系数,当DIVA0跟DIVA1分别组合成0,1,2,3时,对应的ACLK分频系数为1,2,4,8
RSELx(bit0-bit3):当DCOR=1使用外部电阻时,忽略RSEL3,当RSELx=0为最小频率,当为7时为最高
示例:
BCSCTL1 &= ~XT2OFF; //清OSCOFF/XT2
do
{
IFG1 &= ~OFIFG; //清OFIFG
OSC_Delay = 255; //设定延时时间
while(OSC_Delay--); //延时等待约50us
}
while(IFG1&OFIFG); //再次检查OFIFG,直至等于0,才表示已经起振
BCSCTL1 |= RSEL0 +RSEL1 +RSEL2; //三个位111就为7,maxRSEL
BCSCTL1 |= DIVA_2; //对ACLK进行2分频