大一下学期才开始自学单片机,真真切切的感受到自己是个弱鸡,专业知识一点不会,看个书都费劲,周围又没有什么人可以交流交流或者带带我,那个酸爽就别提了,学的我一度想挠黑板。没办法,那也只能硬着头皮学,就是硬看,多看几遍或者看上一段时间就差不多才能理解意思。中断、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的时钟系统还有一套对于晶振故障实效的检测和应对方式,这里不展开了,有兴趣的可以自行了解。
时钟系统定性的理解大概就这么多,剩下的就是一大堆寄存器、控制位的用法之类的东西了…唉~
上一篇:MSP430编程要点
下一篇:MSP430外部中断源程序
推荐阅读最新更新时间:2024-11-03 11:28