×
单片机 > 单片机程序设计 > 详情

MSP430F5529时钟系统深究

发布时间:2020-08-21 发布时间:
|

1、为什么要进行时钟管理?  


时钟系统是一个数字器件的命脉,对于普通的51单片机来说,它的时钟来源只有外部晶振,然后每12个振荡周期完成一个基本操作,所以也叫做12T单片机,但对于当前高级一点的单片机来说,比如MSP430F5529有5个时钟来源,经过UCS(Unified Clock System,通用时钟系统)模块之后,产生MCLK(Master Clock),SMCLK(Subsystem master clock ),ACLK(Auxiliary clock)三个时钟;对于更高端的单片机,比STM32F103ZET6里面有专门用来管理时钟的RCC单元(Reset Clock Control),也就是通常所说的时钟树,在时钟管理上更加强大!


  首先来看两个例子:


  1、MSP430F5529单片机的时钟设计:


  该单片机中通过UCS单元产生三路信号,MCLK供CPU使用,SMCLK供高速外设使用,ACLK供低速外设使用,这样设计后,每个外设都具有自己的时钟源,可以独立工作,不需要的时候可以空闲的时钟源关闭,进入低功耗模式,根据时钟不同程度上的关闭,分为7中低功耗模式;


  2、STM32F103ZET6单片机的时钟设计


  该单片机中通过RCC单元产生SYSCLK,HCLK,PCLK2,PCLK1四路时钟,独立工作,并且默认情况下所有外设时钟都处于关闭状态,即使要使用一个IO口输出,也需要先使能相应GPIO时钟,可见STM32的时钟管理单元更加精妙;


  通过这两个例子,可以看出时钟管理这个单元往往被开发者所忽略是因为一般情况下单片机设计者已经为我们设置好了最优的时钟状态,系统工作都采用默认时钟,我们利用这个默认设置可以完成大部分项目,但是在一些必须要求低功耗的场合,比如智能手环,智能仪表,性能需求不是很高,但是必须要求低功耗,那么如何实现低功耗呢?有两种途径,一是关闭没有用到的外设的时钟,停止工作;二是降低系统CPU工作频率。这两种途径都是通过操作单片机的时钟管理单元实现的,所以掌握时钟的管理尤其重要!


2、器材资料准备


  在这里我们深入探究一下MSP430F5529的UCS单元


实验平台:MSP430F55529launchpad开发板

实验仪器:示波器或者逻辑分析仪

参考资料:MSP430F55529launchpad开发板原理图《MSP-EXP430F5529LP_Schematic》以及MSP430F5529的官方参考手册《MSP430x5xx and MSP430x6xx Family User's Guide》


3、统一时钟系统(Unified Clock System,UCS)  


  1)功能简图

 

2)配置内部时钟源


  编程思路:内部钟源默认都可用,所以直接修改UCSCTL4寄存器配置即可;


1、修改时钟源,将ACLK配置为VLOCLK内部超低功耗振荡器,可以看到,ACLK = VCOCLK = 9.21Khz


加入这行代码:


UCSCTL4 |= SELA_1;          //配置ACLK = VCOCLK

2、修改时钟源,配置ACLK为REFOCLK,内置调整低频参考振荡器,可以看到,ACLK = REFOCLK = 32.86Khz


UCSCTL4 |= SELA_2;          //配置ACLK = REFOCLK

 

3、修改时钟源,配置ACLK为DCOCLK,可以看到,ACLK = DCOCLK = 2.11Mhz


UCSCTL4 |= SELA_3;          //配置ACLK = DCOCLK

 

4、修改时钟源,配置ACLK为DCOCLKDIV,可以看到,ACLK = DCOCLKDIV = 1.06Mhz


UCSCTL4 |= SELA_4;          //配置ACLK = DCOCLKDIV

3)配置外部时钟源


编程思路:


配置XT1/XT2连接晶振的引脚(PXSEL)

清除XT1,XT2,DCO失效标志位

修改UCSCTL4寄存器,选择时钟源

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


#include

2、修改时钟源,配置ACLK = MCLK = SMCLK = XT2CLK =4Mhz


#include


int main(void)

{

    volatile unsigned int i;    //循环变量

    WDTCTL = WDTPW | WDTHOLD;   // stop watchdog timer

    P4DIR |= (BIT1+BIT7);       //P4.7观察现象,P4.1用于示波器观测

    P4OUT |= (BIT1+BIT7);       //输出高电平,点亮LED

    P1DIR |= BIT0;

P1SEL |= BIT0;


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析