MSP430F5438时钟系统

2019-10-18来源: eefocus关键字:MSP430F5438  时钟系统  辅助时钟

要了解一款芯片,最直观的就是官方给的芯片的特点(FEATURES);要用好一款芯片,就必须从数据手册了解芯片的各个功能;要开发一款芯片,我们就不许从最基本的时钟系统出发。本文着重介绍下MSP430F5438的时钟系统,也是整个5系列的时钟系统,这是我接触的第一款430芯片,如有错误,欢迎指正。

统一时钟系统( Unified Clock System (UCS) )为芯片提供不同的时钟,下图可以看出:5438有4个时钟系统,分别是辅助时钟(ACLK),主时钟(MCLK),子系统时钟(SMCLK),以及专用时钟(MODCLK)。

首先看看这些时钟的来源。


除了专用时钟外,他们都可以来至XT1CLK,VLOCLK,REFOCLK,DCOCLK,DCOCLKDIV,XT2CLK,只需要配置对应的寄存器即可应需选择。其中,XT1CLK来至外部的XIN和XOUT管脚通过OSC寄存器得到,通常用32768Hz晶振;VLO(Very-Low-Power Low-Frequency Oscillator)和REFO(Low-FrequencyReference Oscillator)直接由OSC寄存器产生(属于内部时钟);DCOCLK(Digitally-Controlled Oscillator)和DCOCLKDIV(DCO分频得到)来至FLL(FrequencyLocked Loop)寄存器(属于内部数字时钟);XT2CLK来至外部的XT2IN和XT2OUT管脚。


在5438芯片PUC(Power up clear)即上电清除过后,UCS(Unified Clock System)默认配置为:


1.• XT1 工作在 LF(Low-Frequency)模式 作为ACLK(与第5条冲突,但手册就是这么写的,我也不懂);


2.• DCOCLKDIV 作为 MCLK;


3.• DCOCLKDIV 作为 SMCLK;


4.• FLL 工作,而且 XT1CLK 作为FLL的参考时钟(FLLREFCLK);


5.•XTIN和XTOUT若不配置则作为通用I/O口,XT1禁止;配置后才作为XT1;


6.• XT2IN和XT2OUT作为通用I/O口,XT2禁止。


那么现在就开始配置时钟了。我就选其中一个时钟MCLK(主时钟)的配置讲解,其他的时钟大同小异。

要得到MCLK就得配置上图的寄存器(调整模块)。需要配置的有DIVM(分频选择),SELM(时钟源选择),CPUOFF(关闭CPU,因为是主时钟,所以关闭MLCK就相当于关闭CPU),MCLK_REQEN(MCLK conditional requests条件要求使能),MCLK_REQ(不需要配置,从手册上看作用是:外围模块如果需要其正确的运作需要它自动从UCS模块调整,而不管当前的操作模式)。


下面再讲讲内部时钟源VLO和REFO以及DCO,MODOSC。


REFO是内建的参考时钟,它很稳定,一般作为FLL的时钟基准。MSP430F5438上的REFOCLK是32768Hz。


MODOSC是个专用时钟(我知道可以用在AD采样上),大概5MHz(不知道为什么手册上没有他的资料)。


VLO是一个内建的低频时钟。在5438上,它的频率是6-14kHz。


DCO是Digitally-ControlledOscillator,数控晶振。它可以通过FLL产生频率很高而且比较稳定的时钟。通过配置FLL,它甚至可以产生百兆以上的时钟信号。FLL是FrequencyLocked Loop,锁频环。它能通过反馈稳定DCO的输出,下图是它的框图:

首先它需要一个参考,可以是XT1,XT2,REFO的其中一个,当启用FLL之后(默认启用),图中的DCO,MOD可以不用设置,FLL会自行调整这两个值。DCO输出的频率与以下几个量有关:


FLLD,FLLN,FLLREFDIV,FLLREFCLK


计算公式如下:


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


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


其中


D=1,2,4,8,16,32(对应FLLD=0,1,2,3,4,5)


N=FLLN


n=1,2,4,8,12,16(对应FLLREFDIV=0,1,2,3,4,5)


fFLLREFCLK为REFO,XT1或XT2的实际频率。


时钟系统差不多就这些了,看起来复杂其实挺简单的,自己在板子上动手试试才能了解 到底哪块还没有理解透彻,下面贴出我自己的5438时钟配置。


#include "msp430.h"

 

int main( void )

{

  // Stop watchdog timer to prevent time out reset

  WDTCTL = WDTPW + WDTHOLD;

  

  P11DIR = BIT2 + BIT1 + BIT0;              // P11.2,1,0 to output direction

  P11SEL = BIT2 + BIT1 + BIT0;              // P11.2 to output SMCLK, P11.1

                                            // to output MCLK and P11.0 to

                                            // output ACLK

 

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

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

                                                   //±ØÐëµÄ£¬·ñÔòÒ»Ö±ÓдíÎó±êÖ¾

  

  UCSCTL4 |= SELA__REFOCLK;         // Set ACLK = REFO 

                                    //ÉèÖÃij¸öʱÖÓΪDCO¾Í»á³ö´í,×Ü»á³öÏÖ´íÎó±êÖ¾

                                    //Ò»°ã¶¼ÓÃDCODIVʱÖÓ°É

    

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

  UCSCTL0 = 0x0000;                         // Set lowest possible DCOx, MODx 

                                            //ûʲôÓã¬ÉèÖöàÉÙ¶¼²»Ó°Ïì

  

  UCSCTL1 = DCORSEL_7;                      // Select DCO range 25MHz operation 

                                            //ƵÂʵȼ¶£¬¹Ù·½×ÊÁÏ˵×î¸ß135M£¬ÎÒÅÜÁË30M

  

  UCSCTL2 = FLLD_1 +762;                   // Set DCO Multiplier for 25MHz  

                                            // (N + 1) * FLLRef = Fdco  

                                            // (762 + 1) * 32768 = 25MHz  

                                            // Set FLL Div = fDCOCLK/2 

                                            //2·ÖƵ25M 3·ÖƵ23M 4·ÖƵ11.5M ²»ÖªµÀʲôÇé¿ö

  

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

    

  // Worst-case settling time for the DCO when the DCO range bits have been  

  // changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx  

  // UG for optimization.  

  // 32 x 32 x 25 MHz / 32,768 Hz = 782000 = MCLK cycles for DCO to settle  

  __delay_cycles(782000);  

    

  // Loop until XT1,XT2 & DCO fault flag is cleared  

  do  

  {  

    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);  

                                            // Clear XT2,XT1,DCO fault flags  

    SFRIFG1 &= ~OFIFG;                      // Clear fault flags  

  }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag

 

  while(1);                                 // Loop in place

  

  return 0;

}

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

上一篇:MSP430F5529LP+CC3000学习心得(一)
下一篇:MSP430F5529的IO口管脚的中断学习笔记

关注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