历史上的今天
返回首页

历史上的今天

今天是:2024年10月18日(星期五)

正在发生

2019年10月18日 | MSP430F5438时钟系统

2019-10-18 来源:eefocus

要了解一款芯片,最直观的就是官方给的芯片的特点(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;

}

推荐阅读

史海拾趣

中电熊猫(CEC)公司的发展小趣事

随着市场竞争的加剧和技术的不断发展,中电熊猫不断调整市场布局和战略方向。公司坚持开放联合的战略思路,善于搭建平台、取长补短、实现合作共赢。同时,中电熊猫还积极关注国内外市场动态和技术趋势,不断调整和优化产品结构和服务模式。通过这些努力,中电熊猫在保持市场领先地位的同时,也为行业的可持续发展做出了积极贡献。

American Power Design Inc公司的发展小趣事

在电子行业的早期,American Power Design Inc(简称APDI)由一群热衷于电力电子技术的工程师创立。他们研发出了一种高效的电源管理芯片,显著降低了电子设备的能耗和热量产生。这一创新很快吸引了市场的关注,APDI迅速获得了多家大型电子制造商的合作意向。随着技术的不断完善和市场的扩大,APDI逐渐在电源管理领域建立了领导地位。

ATM [Advanced Technical Materials]公司的发展小趣事

20世纪60年代,英国人谢泼德·巴伦产生了发明一款“随时可以取钞票的机器”的想法,并付诸实践。1967年6月27日,世界上第一台ATM在英国伦敦北部的巴克莱银行亮相。这台机器的成功推出,标志着ATM开始进入公众的视野,并逐渐在全球范围内得到广泛应用。

安普康(AMPCOM)公司的发展小趣事

安普康的成功离不开其独特的企业文化和优秀的团队。公司注重员工的培训和发展,为员工提供广阔的职业发展空间和良好的福利待遇。同时,公司还积极营造积极向上、团结协作的工作氛围,使得员工能够充分发挥自己的才能和潜力。这种企业文化不仅吸引了大量优秀人才加入安普康,也使得公司在面对市场挑战时能够保持强大的凝聚力和战斗力。


请注意,这些故事是基于已知信息创作的,并不代表安普康公司的真实发展历程。如需了解安普康公司的真实故事,建议查阅公司官方发布的资料或相关新闻报道。

Advanced Milliwave Laboratories Inc公司的发展小趣事

随着技术的不断成熟和产品的不断优化,AML开始积极拓展市场。公司参与了多个国际电子展会,与全球各地的客户建立了联系。通过展示其独特的技术优势和高质量的产品,AML逐渐在微波技术领域建立了良好的品牌形象。同时,AML还加强了与合作伙伴的合作关系,共同开拓市场,实现互利共赢。

Austek Microsystems公司的发展小趣事

面对行业技术的快速迭代,Austek Microsystems始终保持敏锐的洞察力。公司不断投入研发资金,引进先进的生产设备和技术人才,进行技术升级和产品迭代。通过不断地优化产品性能、提升生产效率,Austek Microsystems逐渐在市场中树立起了技术领先的形象。

问答坊 | AI 解惑

自己对大学4年,研究生2年得总结

呵呵,确实有点兴奋,看到学校很多同学在学校找到了他们满意大工作,自己也曾经失落过,不知道自己到底失败在哪里。 以前还老想,早知道这么多单位都需要笔试,还不如不做项目,天天做题目去,二实际上笔试的应该还是最基础的。11月份的时候我还 ...…

查看全部问答>

CT工作站不能采集图像的故障维修

故障现象:CT工作站不能采集到图像。 故障分析:因为操作人员操作不当从而导致工作站程序丢失。 维修过程:对CT机进行重装工作站,进行初始化以后,机器可以采集到图像,CT机恢复正常工作。…

查看全部问答>

简单的信号处理问题请教

两个输出信号一个是时钟信号,一个是输出信号,我想把这个输出信号8位一组接受并存储下来,用普通的io口检测下来一位一位的存储可以吗?还是要用串口通信什么的?我要用s3c2410处理这个信号,这个信号是由单片机的一个串口输出来的,频率是11.52m, ...…

查看全部问答>

求一个evc的中文资源CEAPPWZCHS.DLL!

初学evc,感觉自己改中文支持很麻烦。 求一个CEAPPWZCHS.DLL支持向导资源。 邮箱 lyhtal@163.com 万分感觉,收到马上给分!…

查看全部问答>

vxworks的例程 能原封不动的写进书里吗?

出版社 约稿 我使用的例子程序能vxworks的例程  能原封不动的写进书里吗? 略有改动行吗? 那位写过书 给说说 …

查看全部问答>

MSP430 FLASH 系列的PCB库文件怎么打开

斑竹好: 下载的MSP430 FLASH 系列的PCB库文件应该用什么软件打开 谢谢…

查看全部问答>

MSP430F5418的低功耗真的耗电2-3uA吗?

我最近使用MSP430F5418发现即使程序刚开始运行就进入LPM3,我三伏的供电也耗电300多uA。 程序就是找到的一个例子如下: void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1DIR = 0xFF; P2DIR = 0xFF ...…

查看全部问答>

跪求天力公司LT-Easy51型51单片机开发板原理图啊???我想自己动手制作一个

有哪位大哥大姐有天力公司LT-Easy51型51单片机开发板原理图啊???我想自己动手制作一个,希望大家帮忙啊。。。我的邮箱zywang5180@qq.com 谢谢了!!!!…

查看全部问答>

STM32中NCE4_2的使用问题

其他的FSMC 的控制线已经用满了,设计用FSMC和CPLD通信,STM32F103的NCE4_2,NWE,NOW,A[0..8],D[0..15]都和CPLD连接,程序上模拟PCCARD,主要程序如下: #define Bank_PCCARD_ADDR     Bank4_PCCARD_ADDR  # ...…

查看全部问答>