010: MSP430时钟系统的配置

要了解MSP430 单片机的时钟系统,首先要了解单片机的时钟源

一,时钟源种类

  MSP430单片机共有三个时钟源:高频时钟源(XT2CLK),低频时钟源(LFXT1CLK),内部时钟源(DCOCLK)

  高频时钟源一般由8M的晶振产生

  低频时钟源一般由32K的晶振产生

  内部时钟源可由RC振荡器产生

二,时钟系统种类:

  MSP430单片机共有三个系统时钟:主系统时钟(MCLK),子系统时钟(SMCLK),辅助系统时钟(ACLK)

  主系统时钟(MCLK)可由软件程序选择来自低频时钟源(LFXT1CLK),高频时钟源(XT2CLK),内部时钟源(DCOCLK)三者之一,然后经过1,2,4,8分频。 一般用于CPU和系统

  子系统时钟(SMCLK)可由软件程序选择来自低频时钟源(LFXT1CLK),高频时钟源(XT2CLK),内部时钟源(DCOCLK)三者之一,然后经过1,2,4,8分频。一般用于其他模块 

  辅助系统时钟(ACLK)只能是有低频时钟源(LFXT1CLK)信号经过1,2,4,8分频得到的。 ACLK 可由软件选为各个外围模块的时钟信号, 一般用于低速外设。

三,MSP430的时钟设置包括3个寄存器,DCOCTL、BCSCTL1、BCSCTL2 

  1>> DCOCTL,DCO控制寄存器,地址为56H,初始值为60H

DCO2 DCO1 DCO0 MOD4 MOD3 MOD2 MOD1 MOD0

 

  DCO0~DCO2: DCO Select Bit,定义了8种频率之一,而频率由注入直流发生器的电流定义。

MOD0~MOD4: Modulation Bit,频率的微调。

  2>> BCSCTL1,Basic Clock System Control 1,地址为57H,初始值为84H

XT2OFF XTS DIVA1 DIVA0 XT5V RSEL2 RSEL1 RSEL0

 

  RSEL0~RSEL2: 选择某个内部电阻以决定标称频率.0最低,7最高。

  XT5V: 1.
  DIVA0~DIVA1:选择ACLK的分频系数。DIVA=0,1,2,3,ACLK的分频系数分别是1,2,4,8;
  XTS: 选择LFXT1工作在低频晶体模式(XTS=0)还是高频晶体模式(XTS=1)。
  XT2OFF: 控制XT2振荡器的开启(XT2OFF=0)与关闭(XT2OFF=1)。
  正常情况下把XT2OFF复位就可以了. (BCSCTL1&=~XT2OFF)

  3>>BCSCTL2,Basic Clock System Control 2,地址为58H,初始值为00H

SEM1 SELM0 DIVM1 DIVM0 SELS DIVS1 DIVS0 DCOR

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

  DIVS0~DIVS1: DIVS=0,1,2,3对应SMCLK的分频因子为1,2,4,8
          DIVS1   DIVS0            SMCLK时钟源
       0             0                       1分频
         0             1                        2分频
         1             0                        4分频
         1             1                        8分频
 
  SELS: 选择SMCLK的时钟源, 0:DCOCLK; 1:XT2CLK/LFXTCLK.
 
  DIVM0~1: 选择MCLK的分频因子, DIVM=0,1,2,3对应分频因子为1,2,4,8.
    DIVM1   DIVM0             MCLK时钟源
       0             0                       1分频
         0             1                        2分频
         1             0                        4分频
         1             1                        8分频
  SELM0~1: 选择MCLK的时钟源, 0,1:DCOCLK, 2:XT2CLK, 3:LFXT1CLK
             SELM1      SELM0            MCLK 时钟源 
               0                 0                        DCOCLK
     0                 1                        DCOCLK
     1                 0                        XT2CLK
     1                  1                       LFXT1CLK
时钟初始化 代码 :
 1 /*
 2  * 时钟配置
 3  */
 4 void Clock_Init()
 5 {
 6   uchar i;
 7   BCSCTL1&=~XT2OFF;                 //打开XT2振荡器
 8   BCSCTL2|=SELM1+SELS+DIVS3;              //MCLK为8MHZ,SMCLK为1MHZ
 9   do{
10     IFG1&=~OFIFG;                   //清楚振荡器错误标志
11     for(i=0;i<100;i++)
12        _NOP();
13   }
14   while((IFG1&OFIFG)!=0);           //如果标志位1,则继续循环等待
15   IFG1&=~OFIFG;
16 }

 

 

 【人生没有白走的路,每一步都算数!】

 

posted @ 2018-09-23 21:48  xiaobingzzh  阅读(1544)  评论(0)    收藏  举报