浅谈msp430f5529入门(1)——时钟模块DCO

2019-10-19来源: eefocus关键字:msp430f5529  时钟模块  DCO

        刚开始摸索430F55系列,我也是菜鸟一名,折腾了两天它的时钟系统,总算自认为有点眉目。想到入门不易,趁热把我的一些体会分享一下。菜鸟才疏学浅,如有不妥之处,请务必指出。


DCO

        5系列中比149多了个FLL——锁频环,初学者对着他确实有点头疼。另外,还有一个名为DCOCLKDIV的时钟源,它只是由DCOCLK分频而得,但请谨记:


        ·PUC后MCLK和SMCLK的默认时钟源并不是DCOCLK,而是DCOCLKDIV!频率是DCOCLK的二分之一!


        ·DCOCLKDIV的分频值为D,由FLLD所确定,PUC后D默认为2,所以DCOCLKDIV的频率是DCOCLK的二分之一。


        如果把锁频环关闭不用的话,这样的DCO和1xx系列的几乎没有区别,只要配置好DCO,MOD,和DCORSEL就行了。


        这里主要说一下这个FLL:


        ·PUC后FLL默认为工作


        ·置位SR中的SCG0或SCG1和将其禁止。


        FLL的主要作用是稳定DCO,利用它硬件可以自动地配置DCO和MOD,使得DCO比以往更加稳定,也就是说DCO和MOD都不用我们用户去操心,即使你配置了它,FLL也会去改变它。那么,这里出现了一个需要注意的问题!:


        ·使用FLL时还需配置DCORSEL!


        根据DCO目标值的范围来配置DCORSEL,若目标值超出DCORSEL所规定的范围,那你所得到的fDCO将不会是所计算的值。详细每个值对应范围请参阅datasheet。


        ·FLL具有它的时钟FLLREFCLK,默认为TX1LF提供,TX1失效自动转为REFCLK。


        ·TX1一般外接32768Hz晶振,所以TX1LF模式的频率为32768Hz。


        ·REFOCLK为低频修正内部参考振荡器,典型值为32768Hz。


        ·PUC后,TX1默认是关闭的,也就是说FLLREFCLK是由REFOCLK提供,但不论哪个提供,频率都为32768Hz。


        接下来介绍fdco的计算式子,在user guide里面有给出:


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

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


        其中:


        ·D为DCOCLK分频为DCOCLKDIV的分频数,由FFLD确定,可取1,2,4,8,16,32,默认值为2。


        ·N由FLLN确定,值取1-1023,最小值为1,如果写0会被置位1,默认值为31。


        ·n为FLLREFCLK的分频值,游FLLREFDIV确定,可取1,2,4,8,12,16.默认值为1。


        ·fFLLREFCLK默认由REFOCLK提供,除非打开了TX1,但值都为32768Hz。


        这样,我们就能计算出PUC后,fDCOCLKDIV的值为1,048,576Hz。所以MCLK和SMCLK的默认频率为1MHz,但应注意的是:fDCOCLK的值是这个值得两倍!也就是说PUC后DCOCLK的频率为2MHz。


        所以,对于设置DCO频率,使用FLL的确会方便和稳定很多,根据目标值频率通过公式反推,一般fFLLREFCLK就是32768,n为1,D为2,这些值取默认值就好,那么我们只要计算出N,只要N的值落在了1023之内,它就符合范围,而且一般都不会超出的。那么只要设置好DCORSL和FLLN,我们就可以得到想好的DCO频率了。但一定要记住:


        ·MCLK和SMCLK的默认时钟源是fDCOCLKDIV!是(N + 1) × (fFLLREFCLK÷ n)!


        根据以上两条公式,我将DCOCLK和DCOCLKDIV的关系理解为,fFLLREFCLK,N,n,这三个值确定了DCOCLKDIV,而DCOCLK则是在DCOCLKDIV的基础上乘上了D,是DCOCLKDIV确定了DCOCLK。


        关于XT1LF和REFOCLK,虽说它们两个都是32768Hz,不过如果PUC后不处理XT1,而让ACLK和FLLREFCLK的时钟源自动转为REFOCLK,那么XT1LFOFFG(XT1晶振失效标志位(低频模式))将会一直被置位,而OFIFG也跟着一直置位。


        所以,解决办法无非是两种:


        1.操作简单的方法,重新配置ACLK和FLLREFCLK的时钟源,一般就是将它们的源取为REFOCLK。只需两行代码:


   UCSCTL3 |= SELREF_2;                      // Set DCO FLL reference = REFO

  UCSCTL4 |= SELA_2;                        // Set ACLK = REFO

        2.打开XT1LF,只要将XT1成功起振,并成功取为时钟源,TX1LFOFFG便不会被置位。因为ACLK和FLLREFCLK的时钟源默认就是XT1LF,所以我们只需(1)将XIN和XOUT的I/O口选为XIN和XOUT模式,使得晶振接通,(2)再将XT1OFF置0,打开晶体振荡器,(3)配置XCAP,选择好电容,一般TX1是32768Hz的话,电容取12pf,不过这个是默认值,所以可以不配置。


  P5SEL |= BIT4+BIT5;                       // Port select XT1

  UCSCTL6 &= ~(XT1OFF);                     // XT1 On

  UCSCTL6 |= XCAP_3;                        // Internal load cap

        我测试过这两种方法,第一种获得的时钟频率,无论是ACLK还是MCLK和SMCLK,与目标值有约百分之零点几到一点几的误差,而且频率有波动。而第二种使用了外部晶振,频率非常接近目标值,ACLK只相差了0.5Hz,而且非常稳定,几乎没有波动。


        所以,我推荐在不考虑功耗和要求精确的情况下,尽量使用XT1LF。



        参照TI提供的例程,在设置DCORSEL和FLLN前,需要暂时禁止FLL,即将SR中的SCG0置位,然后再配置UCSCTL1和UCSCTL2,配置好后再将SCG0置0,如下:


  __bis_SR_register(SCG0);                // Disable the FLL control loop

UCSCTL1 = DCORSEL_5;                    // Select DCO range 16MHz operation

UCSCTL2 |= 249;                         // Set DCO Multiplier for 8MHz

// (N + 1) * FLLRef = Fdco

// (249 + 1) * 32768 = 8MHz

__bic_SR_register(SCG0);                // Enable the FLL control loop


        关于msp430f5529时钟模块的DCO的分享就到这里。感谢阅读,若有疑问或错误,请留言指出。

关键字:msp430f5529  时钟模块  DCO 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic477696.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:MSP430F5529的IO口管脚的中断学习笔记
下一篇:MSP430学习笔记-看门狗

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MSP430G2553与MSP430F5336系列单片机总结[4]——比较器B的使用
比较器B是什么,顾名思义,它其实就是用来比较模拟电压+输入端和-输入端的电压大小,然后设置输出信号CBOUT的值的,如果 + 端电压高于 - 端电压,则CBOUT置高,否则置低。主要的控制寄存器有CBCTL0,CBCTL1,CBCTL2,CBCTL3,CBINT,CBIV,在MSP430G2553中没有比较器B,但是F5336中有,所以接下来的代码全都是F5336的比较器B使用程序:1.比较器B输入通道CB0接外部模拟输入信号,并且引至比较器+输入端,内部参考电压发生器利用共享电压源产生2.0V参考电压。最后当CB0输入模拟信号电压高于2.0V时,CBOUT输出高电平,当CB0输入模拟信号电压低于2.0V时,输出低电平
发表于 2019-11-06
MSP430F5529 时钟 25MHz 设置方法
MSP430F5529的launchpad是 TI送的比较多的一款开发套件,至少我们实验室就是人手一块,很多人都嫌他慢,确实相比较于STM32F103(72MHz) 和STM32F407(168MHz)的速度而言  默认状态下主频只有1MHz的 MSP430F5529就是个弟弟,而且处理位宽也是只有16位,,, 还不支持位带操作  ,但是就超低功耗这一点就足以让他在单片机界立足 ,废话少说,来正题。这次跟大家分享的是标题所说的  MSP430F5529的升频方案。要升频,首先我们得能‘看见’系统的频率,TI的工程师们充分考虑到了这个问题,他们有得引脚可以直接输出时钟信号!!!在芯片datesheet中
发表于 2019-10-29
MSP430F5529 时钟 25MHz 设置方法
win10下使用Energia开发MSP430F5529LP 基本流程及遇到的问题
energia.nu上下载energia安装驱动,部分电脑可能要禁用数字签名,常规操作不多说,官网上也有禁用数字签名的方法。都装好后打开energia,页面几乎和arduino一样,就是红得晃眼睛。什么东西都不写,先编译一下,就报错 大概意思是一个文件中的浮点数常量超出double范围 从来没见过这种错误,检查了一下自己安装的64位也没啥问题,到处找方法,论坛贴吧资料都很少,最后看到energia.exe附近有个arduino-builder.exe点击运行一下,再回去编译,就ok了,blink烧写进去也完全正常。后来发现还是有点问题,直接把报错的那个文件删除就好,不会有任何问题,亲测。当然最好留个备份,后面有关于这个函数的问题了再
发表于 2019-10-28
win10下使用Energia开发MSP430F5529LP 基本流程及遇到的问题
MSP430F149学习笔记——时钟
由于近期的需要,开始学习TI的MSP430 MCU。脑子不好使记不下来,只能辛苦一一敲在这里,便于大脑短路时随时查阅。首先学习了F149的时钟系统。F149拥有一个名为DCOCLK的内部数控振荡器,可外接两个晶振,通常一个晶振提供32768Hz实时时钟(LFXT1CLK),另一个晶振提供最大8MHz的系统主时钟(XT2CLK)。以上3个时钟源可以产生三个时钟信号:ACLK:辅助时钟。可由LFXT1CLK经1/2/4/8分频得到,可软件配置作为各种外设提供时钟信号。MCLK:主时钟。可由DCOCLK/LFXT1CLK/XT2CLK经1/2/4/8分频得到,作为CPU和系统时钟。SMCLK:副时钟。可由DCOCLK/LFXT1CLK
发表于 2019-10-25
基于MSP430F5529的μc/os嵌入式实时操作系统移植
()    //OS启动时调用,加载用户最高优先级的任务 OSCtxSw()       //任务级调度 OSIntCtxSw()      //中断级调度 OSTickISR()       //时钟中断响应,将检测到延时结束的任务加入就绪队列,    .cdecls C, LIST, "msp430.h";用户钩子,对应os_cpu_c.c中的HOOK函数    .ref     OSIntExit    .ref     OSIntNesting 
发表于 2019-10-25
MSP430F149;一、基本时钟
//  ACLK = LFXT1 = 32768, MCLK = DCO Max, SMCLK = XT2//  //* XTAL's REQUIRED - NOT INSTALLED ON FET *////  //* Min Vcc required varies with MCLK frequency - refer to datasheet *// ////                MSP430F149//           
发表于 2019-10-25
MSP430F149;一、基本时钟
小广播
何立民专栏 单片机及嵌入式宝典

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

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