对于MSP430F5529时钟系统的理解

发布者:VelvetSoul最新更新时间:2020-06-14 来源: eefocus关键字:MSP430F5529  时钟系统  时钟周期 手机看文章 扫描二维码
随时随地手机看文章

大一下学期才开始自学单片机,真真切切的感受到自己是个弱鸡,专业知识一点不会,看个书都费劲,周围又没有什么人可以交流交流或者带带我,那个酸爽就别提了,学的我一度想挠黑板。没办法,那也只能硬着头皮学,就是硬看,多看几遍或者看上一段时间就差不多才能理解意思。中断、IO口还比较好理解,到了时钟系统就一脸懵,看了好多遍,一直到暑假才算大致理解了,写篇博文当做梳理,也希望能帮到大家。


首先理解一下时钟系统到底是干啥用的,这个问题曾经困扰了我好久。


(1)时钟系统一个作用是使cpu与各部分协调同步。因为各部件的工作速度不一致,导致它们在协同工作时出现沟通不便,效率低下的情况。有了时钟系统,运行快的部件即使已经执行完当前指令,在时钟系统进入下一个周期之前,它都要停下慢的部件执行完毕,直到下一个时钟信号的发出,所有部件再同时开始下一个指令的执行。


(2)触发某些部件的工作或运行,或者为某些部件提供动力。(这里我也理解的不是很深,就不展开讲了)


(3)计时的作用,配置好的每一个时钟周期的时间长度都是一样的,这样就可以利用其周期个数来进行一些与时间相关的任务。


那么时钟系统是如何起作用的呢?


首先先来说一下振荡器的知识。百度的定义是振荡器(oscillator)是一种能量转换装置——将直流电能转换为具有一定频率的交流电能,其构成的电路叫振荡电路。 直白一点就是说它可以把直流信号变成交流信号,既然是交流信号就会有一定的周期和频率。通过对交流信号的控制就可以得到一定的周期了,也就是时钟信号。


我们在学习时钟系统的时候还会遇到几个名词:晶振、晶体谐振器和晶体振荡器。这些又是什么呢?


我们的原则:有问题找百度。 但是百度上的原话有点乱(不知道是我理解力有限还是咋地反正奇怪的很),我重新组织一下,就是说从一块石英晶体上按一定方位角切下的薄片(简称为晶片),称为石英晶体谐振器,简称为石英晶体或晶体、晶振;而在封装内部添加IC组成振荡电路的晶体元件称为晶体振荡器。其产品一般用金属外壳封装,也有用玻璃壳、陶瓷或塑料封装的。


再来百度一下晶振的原理:


石英晶体振荡器是利用石英晶体(二氧化硅的结晶体)的压电效应制成的一种谐振器件,它的基本构成大致是:从一块石英晶体上按一定方位角切下薄片(简称为晶片,它可以是正方形、矩形或圆形等),在它的两个对应面上涂敷银层作为电极,在每个电极上各焊一根引线接到管脚上,再加上封装外壳就构成了石英晶体谐振器,简称为石英晶体或晶体、晶振。其产品一般用金属外壳封装,也有用玻璃壳、陶瓷或塑料封装的 。


若在石英晶体的两个电极上加一电场,晶片就会产生机械变形。反之,若在晶片的两侧施加机械压力,则在晶片相应的方向上将产生电场,这种物理现象称为压电效应。如果在晶片的两极上加交变电压,晶片就会产生机械振动,同时晶片的机械振动又会产生交变电场。在一般情况下,晶片机械振动的振幅和交变电场的振幅非常微小,但当外加交变电压的频率为某一特定值时,振幅明显加大,比其他频率下的振幅大得多,这种现象称为压电谐振,它与LC回路的谐振现象十分相似。它的谐振频率与晶片的切割方式、几何形状、尺寸等有关 。


我们可以理解成该谐振器件两侧加一个交变电压,可以产生一个交变信号,我们就是要利用该交变信号产生时钟信号。


现在我们大概了解了晶振的原理,那么晶振、晶体振荡器、晶体谐振器到底有啥区别呢?看上面的百度里好像这三个概念区分的不是很清楚。我又上网查了一些资料,发现我们平时说的晶振概念比较笼统,它包含晶体振荡器和晶体谐振器,石英晶体与IC进行封装,若封装内部可以自行驱动,也就是说该器件无需外加驱动就可以自行输出周期信号,那么就是晶体振荡器;而如果封装内部不能自行驱动,需要外加时钟电路进行驱动,就叫做晶体谐振器。简单来说就是晶体振荡器是有源器件,晶体谐振器是无源器件,而晶振是他们的一个统称。


对于MSP430F5529来说,其内部有内置的五个振荡器,也叫做时钟来源我们来依次认识一下(具体的寄存器使用不是本文重点,所以只做定性介绍):


第一类:

VCOCLK:内部超低功耗低频振荡器,典型频率为12kHz(典型频率大概就是正常工作的频率),特点是低成本、低功耗,但是精度不能保证;

REFOCLK:内部调整低频参考振荡器,典型频率为32768Hz,作为内部高精度时钟使用,由于本身精度较高,倍频后仍有较高精度,可为FLL模块提供稳定的参考时钟源(关于FLL等后面介绍,这里先混个眼熟),与FLL组合可以在无需外部晶振的情况下提供灵活的大范围系统时钟;

为什么把这两个放在一类呢?因为它们不需要外部晶振就可以提供稳定的振荡频率,只需要合理配置就行了。


还有一类是:

XT1CLK:低频/高频振荡器,可以使用32768Hz的手表振荡器、标准晶体、谐振器或4~32MHz的外部时钟源;

XT2CLK:高频振荡器,可以是标准晶振、谐振器或4~32MHz的外部时钟源

这两个振荡器比较相似,只不过XT1CLK有两种工作模式:低频LF和高频HF模式,而XT2CLK只工作在高频,可以理解成XT2CLK与XT1CLK的高频模式差不多。


我所理解的MSP430F5529上的这两个振荡器更像是两个驱动电路,并不具备自行产生振荡信号的能力,需要用户自行外接晶振或谐振器,然后由该电路驱动来产生振荡信号。


这两个振荡器有两种工作方式,第一种就是上面说的外接晶振或谐振器通过内部电路的驱动来产生振荡信号,另一种就是直接外接一个振荡信号,令XT1CLK和XT2CLK掉电工作在旁路模式(这是官方说法,我的理解就是不再对其供电,把这电路扔到一边,直接与外接的时钟信号进行交流),这时系统就可以直接利用外接的振荡信号来作为参考时钟源。


(比方说在第一种工作方式下外接一个晶体谐振器,利用内部电路进行驱动;第二种工作方式下外接一个晶体振荡器,单片机不需要承担驱动任务,但可以接收到交变信号)


注意:

这两个振荡器还需要注意要自行匹配电容,XT1CLK的低频模式可以通过寄存器配置振荡器的内部电容,或内部电容不够时外接电容,在高频模式或XT2CLK中需要外接电容。

XT1CLK的高频模式和XT2CLK还需要根据外接晶振或谐振器的频率通过配置寄存器来调节振荡电路的驱动力。


最后一类:

DCOCLK:内部数字时钟振荡器,可由FLL稳定后得到。


数字时钟振荡器,反正咱也不知道啥东西,百度里也没有,咱也就不问了。没有给出典型频率,根据我的理解那大概就是没有固定频率。那么一个频率不固定的振荡器是如何作为参考时钟源的呢?


这就不得不讲到FLL(锁频环)。其核心部件为数控振荡器和一个频率积分器。频率积分器的一端会接受外部的一个交变信号(在传给频率积分器之前可再进行分频),叫做FLL的参考时钟FLLREFCLK,FLL内的数控振荡器经过两次分频后同样传给频率积分器一个交变信号(DCOCLK),然后频率积分器会将两个信号频率进行比较,同时调节数控振荡器,直至频率振荡器收到的两个交变信号频率相等。此时设参考时钟频率为f1,分频系数为n,数控振荡器频率为f2,两次分频系数分别为D,(N+1);(至于为什么设为N+1是与寄存器有关,并且考虑到不能为0,不必深究)


那么经频率积分器调整后 :

f1÷n=f2÷[D×(N+1)]f1div n=f2div [Dtimes (N+1)]

f1÷n=f2÷[D×(N+1)]


f2=f1×(N+1)×D÷nf2=f1times(N+1)times Ddiv n

f2=f1×(N+1)×D÷n


通过调整D和N我们就可以得到频率比原参考时钟快几倍的交变信号(注意在选择参考时钟时要选择较精确的时钟信号,比如REFOCLK、XT1CLK,XT2CLK)。


认识了MSP430F5529时钟来源,下面来介绍一下时钟信号。之前讲的振荡器相当于是作为时钟信号的一个参考,以这五个时钟来源作为参考可产生三个时钟信号,分别为:

(1)ACLK(辅助时钟),可通过软件选择XT1CLK、REFOCLK、VLOCLK、DCOCLK、DCOCLKDIV(即DCOCLK经分频后的信号)、XT2CLK作为时钟来源。ACLK可再分频,主要用于低速外设,也可通过外部引脚输出。

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

(3)SMCLK(子系统时钟):时钟来源与ACLK相同,主要用于高速外设,也可经分频后使用。


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


MSP430F5529的时钟系统还有一套对于晶振故障实效的检测和应对方式,这里不展开了,有兴趣的可以自行了解。


时钟系统定性的理解大概就这么多,剩下的就是一大堆寄存器、控制位的用法之类的东西了…唉~

关键字:MSP430F5529  时钟系统  时钟周期 引用地址:对于MSP430F5529时钟系统的理解

上一篇:MSP430编程要点
下一篇:MSP430外部中断源程序

推荐阅读最新更新时间:2024-11-03 11:28

MSP430f5529定时器模拟串口
写这篇文章的目的 本人记性贼差,写过的代码总是忘,每次从头看数据手册,因此借CSDN平台,帮助自己第二次甚至第三次写同一个东西的时候能够有所回忆。 打代码之前的思考 了解串口 串口通信需要三根线,RX, TX, GND 串口数据格式,一个开始位+一字节数据+一个结束位 波特率:一种用于衡量每秒钟UART传输位数的单位 程序思路 发送端 假设波特率为9600,也就是每秒钟需要传输9600位的数据,那么每传输一位就需要1/9600s,因此,在发送端我们只需要在发送数据时打开定时器,定时时间为1/9600,每进一次中断把端口设置成要发送的位数据。 接收端 接收端的实现需要依靠定时器的捕获功能,当捕获到端口
[单片机]
<font color='red'>MSP430f5529</font>定时器模拟串口
MSP430F5529 ADC参考
MSP430F5529 ADC参考笔记 1.ADC12_A初始化参数 typedef struct ADC_MemMap { union { uint16_t CTL0; struct { uint16_t SC :1; /* ADC12 Start Conversion */ uint16_t ENC :1; /* ADC12 Enable Conversion */ uint16_t TOVIE :1; /* ADC12 Timer Overflow interrupt enable */ uint16_t OVIE :1; /* ADC12
[单片机]
<font color='red'>MSP430F5529</font> ADC参考
STM32时钟系统详解
1. STM32的时钟源主要有: 内部时钟 外部时钟 锁相环倍频输出时钟 1.1 详细介绍 HSI(内部高速时钟) 它是RC振荡器,频率可以达到8MHZ,可作为系统时钟和PLL锁相环的输入。 HSE(外部高速时钟) 接入晶振范围是4-16MHZ,可作为系统时钟和PLL锁相环的输入,还可以经过128分频之后输入给RTC。 LSI(内部低速时钟) 它是RC振荡器,频率大概为40KHZ,供给独立看门狗或者RTC,并且独立看门口只能依靠LSI作为时钟源。 LSE(外部低速时钟) 通常外接32.768MHZ晶振提供给RTC。 PLL(锁相
[单片机]
STM32<font color='red'>时钟</font><font color='red'>系统</font>详解
MSP430F5529定时器中断
计时器中断控制LED灯亮灭 void main(void) { WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗 // get_clk(); P1DIR |= 0x01; // 将P1.0设为输出 TA0CCTL0 = CCIE; // CCR0中断允许 TA0CCR0 = 50000; TA0CTL = TASSEL_2 + MC_1 + TACLR; // 参考时钟选择SMCLK, 增计数模式, 清除TAR计数器 __bis_SR_register(LPM0_bits + GIE); // 进入LPM0并使能全局中断 } //TA0中断服务程序 #pragma vector=TIMER0_A0_VECTOR
[单片机]
MSP430F5529学习笔记(五)——串口|UART
我们在使用MSP430的时候大家会发现插上usb线后电脑上有两个端口标识,那么在进行串口通信时选择哪个呢。其实如图所示,上面的端口是用来进行串口通信的,下面的则是用来进行程序的下载,大家在使用的时候多加分辨即可。 当然熟悉单片机操作的人可以通过经验判断图中标注UART1的即为串口通信端口,接下来我们就进入MSP430F5529串口的学习,通过学习串口我们可以更好的进行上下位机通信,主从机交互等场景的信息交互。 串口端口配置 与使用其他功能一样我们首先对串口进行基础的配置,如果想使用电脑USB下载线进行与电脑的通信请选择P4.4,P4.5端口(UART1),如使用排针IO的串口请选择P3.4,P3.5端口(UART0),在对
[单片机]
<font color='red'>MSP430F5529</font>学习笔记(五)——串口|UART
STM32F10X时钟系统学习笔记
根据这个图片来解释时钟系统 STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。 ①、HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。 ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。   ③、LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。   ④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。   ⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。 2.系统时钟SYSCLK可来源于三个时钟源: ①、HSI振荡器时钟 ②、
[单片机]
STM32F10X<font color='red'>时钟</font><font color='red'>系统</font>学习笔记
STM8 设置系统时钟
硬件平台:stm8s103 编译环境:IAR for stm8 #include iostm8s103f3.h #include intrinsics.h // // 设置系统时钟使用内部振荡器为16MHz运行。 // void InitialiseSystemClock() { CLK_ICKR = 0; // 复位内部时钟寄存器 CLK_ICKR_HSIEN = 1; // 使能 HSI CLK_ECKR = 0; // 禁用外部时钟 while (CLK_ICKR_HSIRDY == 0); // 等待HSI准备好 CLK_CK
[单片机]
STM8S系统时钟应用(IAR)
STM8上电运行时默认使用内部16M的RC振荡器经8分频后的2M时钟频率作为系统时钟。程序开始运行后可以通过设置相关寄存器来修改主时钟源,可以选择外部晶振作为主时钟源和CPU时钟分频。那么这里就选择比较简单的操作,修改内部RC时钟预分频器获得8M系统时钟。 增加内部RC时钟预分频后的代码如下: #i nclude iostm8s207sb.h #define LED1_FLASH PD_ODR_ODR3 = !PD_ODR_ODR3 // LED闪灯指示 void delay(unsigned int count) { while(count--); } void CLK_init(void) { CLK_C
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved