写在前~本章将会详细的讲解msp430f5529单片机的时钟系统及其使用方法。如有不妥的地方欢迎各位大佬斧正!!!
目录
什么是时钟系统和时钟源
MSP430f5529时钟源和时钟系统介绍
产生时钟信号的时钟源:
时钟配置
什么是时钟系统和时钟源
在单片机中,单片机每开始一个周期的工作就需要一个节拍来告诉它,这就相当于我们的心脏每跳动一次,血液被泵到身体各处一次一样。那么单片机的时钟就是单片机工作所需要的节拍,单片机的取指令、译指令等工作都需要以这样的时钟周期为最小周期。
而实际上这样一个时钟就是一个方波信号,在每一个上升沿或者下降沿会迫使单片机工作一次。产生这样有规律的方波信号的源头就叫做时钟源(振荡器),因此单片机工作的快慢就和这个时钟源的频率有关系,频率越高,单片机完成一次工作的时间就越短,频率越低,单片机完成一次工作的时间就越长。但并不意味着可以无脑的选择最高频率,对很多不需要大量处理,只是控制的情况,为了增加可靠性,降低编程难度,降低功耗,往往选用低频的的时钟源,单片机是数字逻辑电路,频率越高,逻辑门变化越快,运算速度越快,功耗就会增大。(这里消耗电量最大的是逻辑门的通断)因此要根据用户手册和实际情况去选择合适的时钟源。
MSP430f5529时钟源和时钟系统介绍
MSP430f5529 以低功耗为主推功能,其实现低功耗一方面就是动态的去配置相应的时钟以降低功耗,通过UCS单元产生三路信号:
MCLK(Master clock)主时钟,供CPU使用。MCLK配置的越高,cpu的执行速度就越快,功耗就越高。注意:一旦关闭MCLK,CPU也将停止工作。因此在超低功耗系统中可以通过间歇启用MCLK的方法降低系统功耗。MCLK也可经分频后给CPU使用。
SMCLK (Subsystem master clock)子系统时钟,供高速外设使用。
ACLK( Auxiliary clock )辅助时钟,供低速外设使用。
通过这样的设计,不同的部分就可以根据自己的时钟来工作,不需要的时候可以将空闲的时钟源关闭,进入低功耗模式。根据时钟不同程度上的关闭,分为7种低功耗模式。
三个时钟相互独立,关闭任何一种时钟不影响其余时钟工作。可通过对三种时钟不同的关闭方式来实现不同的休眠模式(即当关闭某时钟后其相应的外设也将停止工作)。
产生时钟信号的时钟源:
- XT1CLK 外部低频率或高频率振荡源,32.768Khz(LF模式)或4-32Mhz(HF模式);
- XT2CLK 外部高频振荡源,4-32Mhz;
- VLOCLK 内部低耗低频振荡源,典型为10KHZ,精度一般;
- REFOCLK 内部低频参照源,典型值32.768KHZ,常被用作锁相环FLL的基准频率,精度很高,不使用时不消耗电源,其设置往往要参考LPM模式的的设置;
- 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;文章来源:https://www.toymoban.com/news/detail-584953.html
#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);
}
使用以上代码可配置外部中断源。文章来源地址https://www.toymoban.com/news/detail-584953.html
到了这里,关于msp430f5529学习笔记(2)时钟系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!