Basic Clock System
MSP430F169单片机的基本时钟系统由高速晶体震荡器,低速晶体震荡器,数字控制震荡器等部件构成。各个震荡器产生的时钟信号可以通过软件的设置分配到 ACLK,MCLK,SMCLK三路重要的时钟信号通道上。
一般来说,单片机的时钟系统必须满足下列要求
■ 高频率,用来系统硬件需求,运算和外部事件的快速响应。
■ 低频率,用于降低系统的电流消耗。
■ 稳定的频率,以满足定时的需要,例如RTC 实时时钟。
注意:下面基本时钟系统所提及的寄存器,控制方式等只适用于MSP430F169单片机。
时钟源概述
基本时钟模块包括 3个时钟输入源:1. LFXT1CLK默认工作在低频模式(32.768kHz)手表晶振也可以通过外接450kHz~8MHz的高速晶体振荡器或谐振器工作在高频模式。2. XT2CLK可选择的高频振荡器,可以通过标准的晶体振荡器、谐振器或外接 450kHz~8MHz的时钟源工作。3. DCOCLK内部数控RC 振荡器。
时钟信号概述通过这些基本的时钟模块,我们可以得到3个有用的时钟信号:1. ACLK辅助时钟(Auxillary Clock)ACLK是LFXT1CLK时钟源经1、2、4、8分频后得到的。ACLK可由软件选择作为各个外围模块的时钟信号,一般用于低速外设。2. MCLK主系统时钟(Main System Clock)MCLK可由软件选择来自LFXT1CLK、XT2CLK、DCOCLK三者之一,然后经 1、2、4、8分频。MCLK通常用于 CPU运行,程序的执行和其他使用到高速时钟的模块。3. SMCLK子系统时钟(Sub System Clock)SMCLK可由软件选择来自XT2CLK或DCOCLK,然后经 1、2 、4、8分频。SMCLK通常用于高速外围模块。
时钟源1. 低速晶体震荡器(LFXT1)手表晶振(32.768kHz)经过XIN和XOUT引脚直接连接到单片机,不需要其他外部器件 (内部有 12pF的负载电容)。此时LFXT1振荡器工作于低频模式(XTS=0) 。如果单片机外接高速晶体振荡器或谐振器时,OSCOFF=0 可使 LFXT1 振荡器工作于高频模式(XTS=1) 。此时高速晶体振荡器或谐振器经过 XIN和 XOUT引脚连接,并且需要外接电容,电容的大小根据晶体振荡器或谐振器的特性来选择。如果LFXT1CLK信号没有用作SMCLK或 MCLK信号,可用软件将 OSCOFF=1以禁止 LFXT1工作以减少单片机耗电。2. 高速晶体震荡器XT2 振荡器产生 XT2CLK 时钟信号,它的工作特性与 LFXT1 振荡器工作在高频模式时类似。如果XT2CLK没有用作MCLK和SMCLK时钟信号,可用控制位 XT2OFF 禁止 XT2振荡器。3. 数控震荡器单片机的XT2振荡器产生的时钟信号可以经过 1、2、4、8分频后当作系统主时钟 MCLK。当振荡器失效时,DCO振荡器会被自动选为MCLK的时钟源。DCO 振荡器的频率可由软件对 DCOx、MODx 和 RSELx 位的设置来调整。当 DCOCLK 信号没有用作SMCLK和MCLK时钟信号时,可以用控制位 SCG0禁止直流发生器。在 PUC 信号之后,DCOCLK 被自动选作 MCLK 时钟信号,根据需要,MCLK 的时钟源可以另外设置为LFXT1或者XT2。设置顺序如下:(1) 让OSCOFF=1(2) 让OFIFG=0(3) 延时等待至少50us(4) 再次检查 OFIFG,如果OFIFG=1,重复(3)、(4)步骤,直到 OFIFG=0为止。
基本时钟寄存器
MSP4630F169单片机的基本时钟系统寄存器
(一) DCOCTL DCO控制寄存器
寄存器名称 寄存器缩写 DCO控制寄存器 DCOCTL 基本时钟系统控制寄存器1 BCSCTL1 基本时钟系统控制寄存器2 BCSCTL2
(二) BCSCTL1 基本时钟系统控制寄存器 1DCOx: DCO频率选择用来选择8种频率,可分段进行调节 DCOCLK频率。该频率是建立在RSELx选定的频段上。MODx:DAC 调制器设定控制切换DCOx和DCOx+1选择的两种频率,来微调 DCO的输出频率。如果DCOx 常数是7,表示已经选择最高频率,此时MODx 失效,不能用来进行频率调整。
XT2OFF:XT2高速晶振控制此位用于控制 XT2振荡器的开启与关闭。0: XT2高速晶振开1: XT2高速晶振关XTS:LFXT1高速/低速模式选择0: LFXT1工作在低速晶振模式(默认)1: LFXT1工作在高速晶振模式DIVAx:ACLK分频选择0: 不分频1: 2分频2: 4分频3: 8分频XT5V:不使用通常此位复位XT5V=0RSELx:DCO震荡器的频段选择该3位控制某个内部电阻以决定标称频率。0: 选择最低的标称频率......7: 选择最高的标称频率(三) BCSCTL2 基本时钟系统控制寄存器 2
SELMx:选择MCLK时钟源0: MCLK时钟源为DCOCLK(默认)1: MCLK时钟源为DCOCLK2: MCLK时钟源为XT2CLK3: MCLK时钟源为LFXT1CLKDIVMx:选择MCLK分频0: 不分频(默认)1: 2分频2: 4分频3: 8分频SELS:选择SMCLK时钟源0: SMCLK时钟源为DCOCLK(默认)1: SMCLK时钟源为XT2CLKDIVSx:选择SMCLK分频0: 不分频(默认)1: 2分频2: 4分频3: 8分频DCOR:选择DCO震荡电阻0: 内部电阻1: 外部电阻
基本时钟范例// 设ACLK=MCLK=LFXT1=HF,将MCLK通过P5.4输出#includevoid main(void){unsigned int i;WDCTL = WDTPW + WDTHOLD; // 停看门狗P5DIR |= 0x10; // P5.4设置为输出状态 (00010000B)P5SEL |= 0x10; // P5.4设置为第二功能口(00010000B),即MCLKBCSCTL1 |= XTS; // ACLK = LFXT1 = HF模式 (can't understand it)do{IFG1 &= ~OFIFG; // 清除振荡器失效标志,~ 为按位取反for(i = 0Xff;i > 0;i--); // 从0加到256,软件延时,稳定时间}while((IFG1 & OFIFG) != 0); // 如果振荡器失效标志存在 (can't understand it)BCSCTL2 |= SELM1 + SELM0; // MCLK = LFXT1 (can't understand it)While(1){_NOP();} (can't understand it)}// 时钟设置函数// 系统时钟设定// DCO设置为 3030KHz// ACLK 为 LFXT1(低频模式)// MCLK 为 XT2CLK// SMLCK为XT2CLKvoid BCSInit (void) (can't understand it){DCOCTL = 0x60 + 0x00;BCSCTL1 = DIVA_0 + 0x07;BCSCTL2 = SELM_2 + DIVM_0 + SELS + DIVS_0;}