1、MSP430 的时钟模块由低速晶体振荡器 LFXT1、高速晶体振荡器 XT2(MSP430X11X,MSP430X12X 没有)、数字控制振荡器 DCO、琐相环 FLL(MSP430X16X 以上包括)和增强型琐相环 FLL+等部件组成。 MSP430X1XX 基本时钟模块有三个时钟输入源 LFXT1CLK(低速 32768Hz,高速450Hz 到 8MHz)、XT2CLK(450Hz 到 8MHz)、DCOCLK,提供以下三种时钟信号 1.ACLK 辅助时钟:由 LFXT1CLK 信号经 1、2、4、8 分频后得到,可以由软件选作各个外围模块的时钟信号,一般用于低速外设。 2.MCLK 系统
2、主时钟:MCLK 可由软件选择来自 LFXT1CLK、XT2CLK、DCOCLK三者之一,然后经 1、2、4、8 分频得到,MCLK 主要用于 CPU 和系统。 3.SMCLK 子系统时钟:可由软件选自 LFXT1CLK 和 DCOCLK(MSP430X11X、MSP430X12X 系列,因其不含 XT2),或 XT2CLK 和 DCOCLK,然后经 1、2、4、8 分频得到。SMCLK 主要用于高速外围模块。系统频率与系统的工作电压密切相关(MSP430 工作电压 1.8V3.6V,编程电压 2.7V3.6V),所以不同的工作电压,需要选择不同的系统时钟。当两个外部振荡器失效时,DCO 振荡
3、器会自动被选作 MCLK 的时钟源。PUC 信号之后,DCOCLK 被自动选作 MCLK 和 SMCLK 的时钟信号,LFXT1CLK 被选作 ACLK 的时钟信号,根据需要 MCLK 和 SMCLK 的时钟源可以另外设置。控制时钟模块的三个寄存器为 DCO 控制寄存器 DCOCTL、基本时钟系统控制寄存器 1BCSCTL1、基本时钟控制寄存器 2BCSCTL2 1.DCOCTL 7 6 5 4 3 2 1 0 DCO2 DCO1 DCO0 MOD4 MOD3 MOD2 MOD1 MOD0 DCO.0DCO.2 定义 8 种频率之一(DCO=0DCO=8),可分段调节 DCOCLK频率,相领两
4、种频率相差 10%。 MOD.0MOD.4 定义在 32 个 DCO 周期中插入的 fdco+1 周期个数,而余下的周期为 fdco 周期,控制切换 DCO 和 DCO+1 选择的两种频率,如果 DCO 常数为7,表示已经选择最高频率,此时不能利用 MOD.0MOD.4 进行频率调整。 DCOCTL POR 后初始值为 60H。 2.BCSCTL1 7 6 5 4 3 2 1 0 XT2OFF XTS DIVA1 DIVA0 XT5V RSEL2 RSEL1 RSEL0 BCSCTL1 初始值为 84H XT2OFF 控制 XT2 的开启和关闭 0 XT2 振荡器开启 1 XT2 振荡器关闭(
5、默认) XTS 控制 LFXT1 工作模式 0 低频模式(默认) 1 高频模式 DIVA1、DIVA0 控制 ACLK 分频 0 0 不分频(默认) 0 1 2 分频 1 0 4 分频 1 1 8 分频 XT5V 此位设置为 0 RSEL0RSEL2 三位控制内部电阻以决定标称频率 0 选择最低标称频率 . 7 选择最高标称频率 3.BCSCLK2 7 6 5 4 3 2 1 0 SELM1 SELM0 DIVM1 DIVM0 SELS DIVS1 DIVS0 DCORSELM1 SELM0 选择 MCLK 时钟源0 0 DCOCLK(默认)0 1 DCOCLK1 0 LFXT1CLK 对于
6、MSP430F11/12X,XT2CLK 对于 MSP430F13/14/15/16X1 1 LFXT1CLKDIVM1 DIVM0 选择 MCLK 分频0 0 不分频0 1 2 分频1 0 4 分频1 1 8 分频SELS 选择 SMCLK 时钟源0 DCLK(默认)1 LFXT1CLK 对于 MSP430F11/12X,XT2CLK 对于 MSP430F13/14/15/16XDIVS1 DIVS0 选择 SMCLK 分频0 0 不分频0 1 2 分频1 0 4 分频1 1 8 分频DCOR 选择 DCO 电阻0 内部电阻1 外部电阻时钟模块的应用一、设置 MCLK=XT2,SMCLK=D
7、COCLK,将 MCLK 由 P5.4 输出(MSP430X14X 中引脚P5.4 和 MCLK 复用)#include “msp430x14x.h“void main(void)unsigned int i;WDTCTL= WDTPW+WDTHOLD; /Stop watchdog to prevent to overflowP5DIR | = 0X10; /Set P5.4 to output P5SEL | = 0X10; /Set P5.4 to MCLK modeBCSCTL1 /Enable XT2doIFG1 /Clear OFIFGfor(i=0xff;i0;i-); /Set
8、 a delaywhile(IFG1 /check-up the OFIFGBCSCTL2 | = SELM_2; /Set XT2CLK the clock of MCLKfor(;);二、 设置 ACLK=MCLK=LFXT1=HF,将 ACLK 用 P2.0(复用)输出。#include “msp430x14x.h“void main(void)unsigned int i,j;WDTCTL = WDTPW+ WDTHOLD;P1DIR =0x02;P2DIR =0x01;P2SEL=0x01;BCSCTL1 | = XTS;doIFG1 for(i=0xff;i0;i-);while(IFG1 BCSCTL2 | = SELM_3;for(;);