MSP430F5529学习笔记(2)- 时钟系统详解

写在前~本章将会详细的讲解msp430f5529单片机的时钟系统及其使用方法。如有不妥的地方欢迎各位大佬斧正!!!


目录

什么是时钟系统和时钟源

MSP430f5529时钟源和时钟系统介绍

产生时钟信号的时钟源:

时钟配置


什么是时钟系统和时钟源

       在单片机中,单片机每开始一个周期的工作就需要一个节拍来告诉它,这就相当于我们的心脏每跳动一次,血液被泵到身体各处一次一样。那么单片机的时钟就是单片机工作所需要的节拍,单片机的取指令、译指令等工作都需要以这样的时钟周期为最小周期。

       而实际上这样一个时钟就是一个方波信号,在每一个上升沿或者下降沿会迫使单片机工作一次。产生这样有规律的方波信号的源头就叫做时钟源(振荡器),因此单片机工作的快慢就和这个时钟源的频率有关系,频率越高,单片机完成一次工作的时间就越短,频率越低,单片机完成一次工作的时间就越长。但并不意味着可以无脑的选择最高频率,对很多不需要大量处理,只是控制的情况,为了增加可靠性,降低编程难度,降低功耗,往往选用低频的的时钟源,单片机是数字逻辑电路,频率越高,逻辑门变化越快,运算速度越快,功耗就会增大。(这里消耗电量最大的是逻辑门的通断)因此要根据用户手册和实际情况去选择合适的时钟源。

MSP430f5529时钟源和时钟系统介绍

       MSP430f5529 以低功耗为主推功能,其实现低功耗一方面就是动态的去配置相应的时钟以降低功耗,通过UCS单元产生三路信号:

MCLK(Master clock主时钟,供CPU使用。MCLK配置的越高,cpu的执行速度就越快,功耗就越高。注意:一旦关闭MCLK,CPU也将停止工作。因此在超低功耗系统中可以通过间歇启用MCLK的方法降低系统功耗。MCLK也可经分频后给CPU使用。

SMCLK (Subsystem master clock)子系统时钟,供高速外设使用。

ACLK( Auxiliary clock 辅助时钟,供低速外设使用。

       通过这样的设计,不同的部分就可以根据自己的时钟来工作,不需要的时候可以将空闲的时钟源关闭,进入低功耗模式。根据时钟不同程度上的关闭,分为7种低功耗模式。

        三个时钟相互独立,关闭任何一种时钟不影响其余时钟工作。可通过对三种时钟不同的关闭方式来实现不同的休眠模式(即当关闭某时钟后其相应的外设也将停止工作)。

产生时钟信号的时钟源:

  1. XT1CLK 外部低频率或高频率振荡源,32.768Khz(LF模式)或4-32Mhz(HF模式);
  2. XT2CLK 外部高频振荡源,4-32Mhz;
  3. VLOCLK 内部低耗低频振荡源,典型为10KHZ,精度一般;
  4. REFOCLK 内部低频参照源,典型值32.768KHZ,常被用作锁相环FLL的基准频率,精度很高,不使用时不消耗电源,其设置往往要参考LPM模式的的设置;
  5. DCOCLK内部数字控制振荡源,通过内部FLL单元稳定而来,并不算是一个通过振荡产生时钟的源。

       当我们给板子上电时,ACLK =REFOCLK = 32.768Khz;FLLREFCLK = REFOCLK = 32.768K;DCOCLK默认为2.097152MHZ,FLL默认2分频,所以MCLK和SMCLK的频率都为1.048576MHZ。

        MSP430f5529 开发板支持将系统时钟在引脚上复用输出,MCLK输出复用P7.7脚,SMCLK输出复用P2.2脚,ACLK复用P1.0脚,实验板上只引出P1.0和P2.2,而P7.7未被引出。这样方便了我们通过测量的方式去检测时钟系统的配置情况。

时钟配置

接下来我们通过代码来配置这三个时钟:

 #include <msp430.h> 

 void main(void)
 {
     WDTCTL = WDTPW | WDTHOLD;   // 关闭看门狗
     P1DIR |= BIT0;              //P1.0配置为输出
     P1SEL |= BIT0;              //P1.0输出ACLK
     P2DIR |= BIT2;              //P2.2配置为输出
     P2SEL |= BIT2;              //P2.2输出SMCLK
     while(1);
 }

运行上面的代码,可在P1.0和P2.2引脚通过示波器检测到子系统时钟和辅助系统时钟的频率。

UCSCTL4 |= SELA_1;          //配置ACLK = VCOCLK =9.21Khz
UCSCTL4 |= SELA_2;          //配置ACLK = REFOCLK = 32.86Khz
UCSCTL4 |= SELA_3;          //配置ACLK = DCOCLK = 2.11Mhz
UCSCTL4 |= SELA_4;          //配置ACLK = DCOCLKDIV = 1.06Mhz

使用以上代码可配置内部时钟源。

       修改时钟源,配置ACLK = 32.768Khz,MCLK = SMCLK = DCOCLKDIV=1.05M;

#include <msp430.h>

void main(void)
{
    WDTCTL = WDTPW | WDTHOLD;   // 关闭看门狗
    P1DIR |= BIT0;              //配置P1.0为输出
    P1SEL |= BIT0;              //P1.0输出ACLK
    P2DIR |= BIT2;              // 配置P2.2为输出
    P2SEL |= BIT2;              //P2.2输出SMCLK

    P5SEL   |= BIT4+BIT5;       //P5.4和P5.5选择XT1晶振功能
    UCSCTL3 |= SELREF_0;        //设置FLL参考时钟源为XT1
    do
    {
       UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
                                //清除XT2,XT1,DCO故障失效标志位
       SFRIFG1 &= ~OFIFG;       //清除晶振故障失效中断标志位
    }while(SFRIFG1&OFIFG);      //晶振故障失效中断标志位
    UCSCTL6 &= ~XT1DRIVE_0;     //减少XT1驱动能力
    UCSCTL4 |= SELA_0;          //ACLK = XT1CLK

    while(1);
}

使用以上代码可配置外部中断源。


物联沃分享整理
物联沃-IOTWORD物联网 » MSP430F5529学习笔记(2)- 时钟系统详解

发表评论