单片机
返回首页

MSP430F169——CLOCK

2022-08-22 来源:csdn

时钟在单片机上十分重要,尤其是以低功耗盛名的TI MSP430系列单片机上,更显得尤为重要,何出此言?我们知道,频率越低,功耗越低,在满足各种设计需要的情况下,我们尽可能将单片机工作频率降低,此时单片机的功耗也就随之降低。MSP430系列单片机之所以有如此低的功耗,正是因为其有一个强大的时钟系统!


那么在430f169这款单片机上,我们该如何去学习它的时钟系统呢?


接下来,我将带领大家学习这个时钟系统,让大家对msp430f169的时钟系统有一定了解。


时钟系统模块设计要求:

高频率:用于系统硬件需求和外部事件的快速反应

低频率:用于降低电流消耗

稳定的频率:以满足定时应用,如实时时钟RTC

低成本:用于时钟精度要求不高的场景

MSP430F169单片机时钟系统概述:

来自MSP430F169单片机用户手册的时钟系统原理图

一、三种时钟信号源

1.低频LFXT1CLK(32.768KHz)

可以使用标准晶振,振荡器或者外部时钟源输入4MHz~32MHz。XT1CLK可以作为内部FLL模块的参考时钟。


低频晶振(32.768KHz)经过XIN和XOUT引脚直接连接到单片机,不需要其他外部器件(内部有12pF的负载电容)。此时LFXT1振荡器工作于低频模式(XTS=0)。


如果单片机外接高速品体振荡器或谐振器时,0SCOFF=0可使LFXT1振荡器工作于高频模式(XTS=1)。此时高速品体振荡器或谐振器经过XIN和XOUT引脚连接,并且需要外接电容,电容的大小根据晶体振荡器或谐振器的特性来选择。


如果LFXT1CLK信号没有用作SMCLK或MCIK信号,可用软件将OSCOFF=1以禁止LFXT1工作,从而减少单片机耗电。


BCSCTL1:

XTS(BIT6)——LFXT1高/低速模式选择。0:LFXT1工作在低速晶振模式(默认);1:LFXT1工作在高速晶振模式。


2.高频XT2CLK(8MHz)

可以使用标准晶振,振荡器或者外部时钟源输入4MHz~32MHz。


XT2振荡器产生XT2CLK时钟信号,它的工作特性与LFXT1振荡器工作在高频模式时类似。如果XT2CLK没有用作MCLK和SMCLK时钟信号,可用控制位XT2OFF禁止XT2振荡器。

BCSCTL1:

XT2OFF(BIT7)——XT2高速晶振控制。0:XT2高速晶振开;1:XT2高速晶振关。


3.内部振荡器DCOCLK(1MHz)

通过FLL模块来稳定。


当振荡器失效时,DCO会被自动选为MCLK的时钟源。


DCO振荡器的频率可通过软件对DCOx. MODx和RSEL.x位的设置来调整。当DCOCLK信号没有用作SMCLK和MCLK时钟信号时,可以用控制位SCGO禁止直流发生器。


在PUC信号之后,DCOCLK被自动选作MCLK时钟信号,根据需要,MCLK的时钟源可以另外设置为LFXT1或者XT2。设置顺序如下:

(1)让OSCOFF=1;

(2)让OFIFG=0;

(3)延时等待至少50ps;

(4)再次检查OFIFG,如果OFIFG=1,重复(3) ,(4)步骤,直到OFIFG=0为止。


DCOCTL:

DCOx(BIT7、BIT6、BIT5)——DCO频率选择,选择8种频率,可分段调节DCOCLK频率。该频率选择是建立在RSELx选定的频段上。DCOx、RSELx与内部时钟的关系如图:

在这里插入图片描述

MODx(BIT4、BIT3、BIT2、BIT1、BIT0)——DAC调制器设定。控制切换DCOx和DCOx+1选择的两种频率,来微调DCO的输出频率。如果DCOx常数是7,表示已经选择最高频率,此时MODx失效,不能用来进行频率调整。

BCSCTL1:

RSELx(BIT2、BIT1、BIT0)——DCO振荡器的频段选择,该3位控制某个内部电阻以决定标称频率。0:选择最低的标称频率…7:选择最高的标称频率。

BCSCTL2:

DCOR(BIT0)——选择DCO振荡电阻。0:内部电阻;1:外部电阻。


二、三种时钟源

1.ACLK 辅助时钟

ACLK 是LFXT1CLK经1、2、4、8分频后得到的。可作为各个外围模块的时钟信号,一般用于低速外设。

BCSCTL1:

DIVAx(BIT5、BIT4)——ACLK分频选择,分频选择关系如下图:

在这里插入图片描述

宏定义:DIVA_0(1分频/不分频)、DIVA_1(2分频)、DIVA_2(4分频)、DIVA_3(8分频)


2.MCLK 系统主时钟

MCLK可由LFXT1CLK、XT2CLK、DCOCLK三者其一经1、2、4、8分频后得到,常用于CPU运行、程序的执行和其他使用高速时钟的模块。

BCSCTL2:

SELMx(BIT7、BIT6)——选择MCLK时钟源,时钟选择关系如下图:

在这里插入图片描述

宏定义:SELM_0(DCOCLK默认)、SELM_1(DCOCLK)、SELM_2(XT2CLK)、SELM_3(LFXT1CLK)


DIVMx(BIT5、BIT4)——MCLK分频选择,分频选择关系如下图:

在这里插入图片描述

宏定义:DIVM_0(1分频/不分频)、DIVM_1(2分频)、DIVM_2(4分频)、DIVM_3(8分频)


3.SMCLK 子系统时钟

SMCLK可由XT2CLK、DCOCLK二者其一经1、2、4、8分频后得到,常用于高速外围模

块。

BCSCTL2:

SELSx(BIT3)——选择MCLK时钟源,时钟选择关系如下图:

在这里插入图片描述

DIVSx(BIT2、BIT1)——SMCLK分频选择,分频选择关系如下图:

在这里插入图片描述

宏定义:DIVS_0(1分频/不分频)、DIVS_1(2分频)、DIVS_2(4分频)、DIVS_3(8分频)


三、三种寄存器

1.DCO控制寄存器——DCOCTL

在这里插入图片描述

2.基本时钟系统控制寄存器1——BCSCTL1

在这里插入图片描述

3.基本时钟系统控制寄存器2——BCSCTL2

在这里插入图片描述

四、代码示例

#include 

#include  'BoardConfig.h'

 

void DelayMs(unsigned int ms)

{

  unsigned int i;

  while(--ms)

  {

    for(i=110;i>0;--i);

  }

}


void main(void)

{

  volatile unsigned int i;

  BoardConfig(0xb0);

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  P5DIR |= 0x10;                            // P5.4= output direction

  P5SEL |= 0x10;                            // P5.4= MCLK option select

  BCSCTL1 &= ~XT2OFF;                       // XT2= HF XTAL

  P2DIR |= 0xff;

 do

  {

  IFG1 &= ~OFIFG;         // Clear OSCFault flag清振荡器失效标志

  for (i = 0xFF; i > 0; i--);       // Time for flag to set

  }

  while ((IFG1 & OFIFG));     // OSCFault flag still set?用外部时钟速度会快很多

  BCSCTL2 |= SELM_2;       // MCLK= XT2 (safe)

  for (;;)                    // Do nothing

  {

    P2OUT = ~P2OUT;

    DelayMs(10000);// 用外部时钟速度会快很多

  }

}


官方代码示例:


// ACLK = LFXT1 = 32.768KHz, MCLK = DCO Max, SMCLK = XT2

#include


int main(void)

{

  WDTCTL = WDTPW +WDTHOLD;                  // Stop Watchdog Timer

  DCOCTL = DCO0 + DCO1 + DCO2;              // Max DCO

  BCSCTL1 = RSEL0 + RSEL1 + RSEL2;          // XT2on, max RSEL

  BCSCTL2 |= SELS;                          // SMCLK = XT2

  P5DIR |= 0x70;                            // P5.6,5,4 outputs

  P5SEL |= 0x70;                            // P5.6,5,5 options


  while(1)

  {

  }

}


时钟配置函数头文件——setclock.h


#ifndef __SETCLOCK_H__

#define __SETCLOCK_H__

#define __MSP430_HAS_BASIC_CLOCK__ /* Definition to show that Module is available */


SFR_8BIT(DCOCTL);   /* DCO Clock Frequency Control */

SFR_8BIT(BCSCTL1);  /* Basic Clock System Control 1 */

SFR_8BIT(BCSCTL2);  /* Basic Clock System Control 2 */


/* DCOCTL的位定义 */

#define MOD0 (0x01) /* Modulation Bit 0 */

#define MOD1 (0x02) /* Modulation Bit 1 */

#define MOD2 (0x04) /* Modulation Bit 2 */

#define MOD3 (0x08) /* Modulation Bit 3 */

#define MOD4 (0x10) /* Modulation Bit 4 */

#define DCO0 (0x20) /* DCO Select Bit 0 */

#define DCO1 (0x40) /* DCO Select Bit 1 */

#define DCO2 (0x80) /* DCO Select Bit 2 */

/* BCSCTL1的位定义 */

#define RSEL0 (0x01) /* Resistor Select Bit 0 */

#define RSEL1 (0x02) /* Resistor Select Bit 1 */

#define RSEL2 (0x04) /* Resistor Select Bit 2 */

#define XT5V (0x08) /* XT5V should always be reset */

#define DIVA0 (0x10) /* ACLK Divider 0 */

#define DIVA1 (0x20) /* ACLK Divider 1 */

#define XTS (0x40) /* LFXTCLK 0:Low Freq. / 1: High Freq. */

#define XT2OFF (0x80) /* Enable XT2CLK */

/* BCSCTL1 的 DIVA 的功能定义 */

#define DIVA_0 (0x00) /* ACLK Divider 0: /1 */

#define DIVA_1 (0x10) /* ACLK Divider 1: /2 */

#define DIVA_2 (0x20) /* ACLK Divider 2: /4 */

#define DIVA_3 (0x30) /* ACLK Divider 3: /8 */

/* BCSCTL2的位定义 */

#define DCOR (0x01) /* Enable External Resistor : 1 */

#define DIVS0 (0x02) /* SMCLK Divider 0 */

#define DIVS1 (0x04) /* SMCLK Divider 1 */

#define SELS (0x08) /* SMCLK Source Select 0:DCOCLK / 1:XT2CLK/LFXTCLK */

#define DIVM0 (0x10) /* MCLK Divider 0 */

#define DIVM1 (0x20) /* MCLK Divider 1 */

#define SELM0 (0x40) /* MCLK Source Select 0 */

#define SELM1 (0x80) /* MCLK Source Select 1 */

/* BCSCTL1 的 DIVS 的功能定义 */

#define DIVS_0 (0x00) /* SMCLK Divider 0: /1 */

#define DIVS_1 (0x02) /* SMCLK Divider 1: /2 */

#define DIVS_2 (0x04) /* SMCLK Divider 2: /4 */

#define DIVS_3 (0x06) /* SMCLK Divider 3: /8 */

/* BCSCTL1 的 DIVM 的功能定义 */

#define DIVM_0 (0x00) /* MCLK Divider 0: /1 */

#define DIVM_1 (0x10) /* MCLK Divider 1: /2 */

#define DIVM_2 (0x20) /* MCLK Divider 2: /4 */

#define DIVM_3 (0x30) /* MCLK Divider 3: /8 */

/* BCSCTL1 的 SELM 的功能定义 */

#define SELM_0 (0x00) /* MCLK Source Select 0: DCOCLK */

#define SELM_1 (0x40) /* MCLK Source Select 1: DCOCLK */

#define SELM_2 (0x80) /* MCLK Source Select 2: XT2CLK/LFXTCLK */

#define SELM_3 (0xC0) /* MCLK Source Select 3: LFXTCLK */

#endif

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 单稳态控制电路设计与分析

  • IGBT模块通过控制门极阻断过电流

  • CCFL的工作原理及电子驱动电路解析

  • 开关电源的基本组成及工作原理

  • 比较常见的功率整流器和滤波电路

  • 一个简单的红外耳机电路

    相关电子头条文章