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

浅谈msp430f5529入门(2)——时钟配置、例程分析

发布时间:2021-01-18 发布时间:
|

前天写了关于DCO,FLL的一些问题,而其他的如XT1,XT2和1xx系列几乎没有区别,而且相比比较简单,就不另外讨论了。现在总结一下55系列的时钟配置,我以TI官网提供的例程为例子进行分析,只要肯折腾,收获是不会少的。而且我发现了例程里的注释有错误,可能会给大家带来学习时的困扰,我在下文会指出。


有人可能会问TI的例程怎么找,我在这里也说一下。在TI官网搜索需要的芯片,在结果的右边会有该芯片的资料,点进去后找到“工具和软件”,点它之后再软件的培训内容里可以找到例程下载,就是名字里有examples的zip。


呵呵,可能已经有人这么尝试过了,但F5529的这里并没有例程。不过这并不表明TI没有提供5529的例程。另辟蹊径吧骚年,我估摸着一个系列的例程都是通用的,于是就再搜了一遍5526,结果就在那里找到了55xx的例程,也就是我下面要分析的例程。


例程下载链接


-----------------------------------可以开宰了------------------------------------


包里有关时钟配置的例程一共有9个,其实弄好前面几个,后面只是大同小异而已。


(1)首先,第一个,最简单的一个,因为它根本就没有配置时钟......不过,它还是很有用,因为它给我们呈现了单片机上电后的时钟状况。


//   ACLK = REFO = 32.768kHz, MCLK = SMCLK = Default 1MHz

#include

这是我用CCS仿真调试时暂停截的图,图示程序已经执行到while(1)里了,打开寄存器窗口看到XT1LFOFFG和DCOFFG置1了。前者被置位就是因为ACLK和FLL处于默认状态一直在向XT1取源,而XT1被禁止失效所以XT1LFOFFG被置位了,而程序还能跑就是因为XT1LF失效时它们两个时钟暂时向REFOCLK取源。后者为什么也置1了呢?它没有向XT1取源啊。呵呵,上一章说过,默认状态的DCO由FLL稳定,而FLL的时钟源XT1出问题所以DCOFFG就置1了。


因此,即使大家不需要调整单片机的时钟,在程序的开头也请先配置一下时钟,养成这个习惯,至少把XT1打开,因为XT1比REFOCLK稳定多了。


(2)第二个例程,很值得去折腾,它设置了FLL来稳定DCO到8MHz。噢不!是16MHz.


//   ACLK = REFO = 32kHz, MCLK = SMCLK = 8MHz

#include

它会卡在这个循环里出不去,和上面(1)的情况一样,ACLK的寄存器里的默认值还是在向XT1申请时钟源,XT1不干活,XT1LFOFFG就置位了。


20行那里其实可以不配置,因为默认就已经是0x0000,而FLL会自动调整UCSCTL0。


这个程序的精髓就在于30-35这4行(啊咧?4行?),这是配置FLL的标准流程,在调整有关FLL的寄存器前,无比要先禁止FLL,不然可能会产生不可预料的结果。


上一章说到,用FLL稳定DCO,只要设置好FLL的时钟,再就是配置DCORSEL和FLLN就好了。利用公式:


·fDCOCLK= D × (N + 1) × (fFLLREFCLK÷ n)

·fDCOCLKDIV= (N + 1) × (fFLLREFCLK÷ n)


就可以计算出所需的值,纳尼?这和注释里的不一样?呵呵,是的,真的是注释错了。程序里(249 + 1) * 32768 = 8MHz计算的是fDCOCLKDIV!而不是注释里写的fDCOCLK!而注释里的那条看起来像公式的根本就不是个东西!


那为什么我测出来的真的是它说的大约8MHz呢?呵呵,因为它说错了,SMCLK并没有使用DCOCLK,它还是默认地使用


关键字:msp430f5529  时钟配置  例程分析 

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

热门文章 更多
浅谈msp430f5529入门(2)----时钟配置.例程分析