历史上的今天
返回首页

历史上的今天

今天是:2025年01月11日(星期六)

2021年01月11日 | MSP430F5529火箭板-控制时钟系统输出频率实验(含时钟系统分析)

2021-01-11 来源:eefocus

实验内容:上电控制MSP430F5529 Launch Pad上的主时钟系统达到25Mhz

实验准备:
1、硬件:MSP430F5529 Launch Pad
2、软件:Code Composer Studio集成开发工具(CCS)
3、提升MSP430F5529核心电压的办法及介绍请参考《MSP430F5529火箭板 ----> 关于核心电压提升实验(含电源管理模块和供电监控系统介绍)》文章链接link

一、时钟系统

1、MSP430F5529 Lanuch Pad晶振的物理层分析
  在进入时钟系统之前我们先对MSP430F5529的时钟晶振做一个介绍。
   MSP430F5529 Launch Pad 板载了1个32.768Khz的RTC实时时钟XTAL1和1个4Mhz的外部晶振XTAL2
  默认情况下,MSP430F5529的系统时钟为1Mhz
   XT2的4Mhz晶振与MCU连接引脚如下图所示:
在这里插入图片描述

2、MSP430F5529 Launch Pad时钟的介绍
  MSP430应用程序通常使用一个快时钟和一个慢时钟。在某些情况下,快时钟(称为MCLK)用于驱动CPU和外围设备,而慢时钟保持计时器和外围设备在低功耗模式下运行。这种方法降低了功耗:慢时钟消耗的电量更少,因此,禁用快时钟的次数越多,应用程序消耗的电量就越少。
  这种快速时钟通常是集成在单片机中的数字控制振荡器(DCO)。DCO本身是一个重要的低功耗工具,因为与晶振不同,它有非常快的启动时间,因此可以快速关闭和重新启用。DCO可以被中断激活,并且稳定得足够快来响应它。MCU的低功耗模式只有在经常使用的情况下才有用。
  许多MSP430设备,包括F5529,将DCO与频率锁定环(FLL)模块耦合,使DCO锁定在精确的慢频参考上。这可以很好地控制DCO频率。

MSP430F5529有三个可用的慢时钟:
1、REFO:内部低频修整基准源,是一种不需要晶振起振的高精度、低功率芯片上振荡器,典型值为32.768Khz,常被用作锁相环FLL的基准频率,其设置往往要参考LPM模式的设置。
2、LEFXT1:外部低频振荡源,经典值为32.768Khz,它和REFO一样可以作为锁相环FLL的基准频率,但是它比REFO精度更高、功率更低且更稳定。
3、VLO:(Internal very low)内部低耗低频振荡源,精确度低,范围在12Khz~20Khz之间

下表为F5529推荐的时钟配置:

系统时钟 时钟源频率描述
MCLKDCO、FLL8MhzMCLK是MSP430 CPU时钟。它在所有低功耗模式下被禁用。USB通信没有预定义的MCLK下限,但通常为8Mhz。
SMCLKDCO、FLL8MhzSMCLK驱动高速外设。它在LPM0期间保持活动,但在LPM3、LPM4和LPM5中禁用。LPM0是在USB连接期间允许的最低功率模式。
ACLKREFO32KhzACLK是一个低速时钟,驱动计时器和较慢的外围设备。在低功耗模式下,这是一种非常低功耗的方法来保持单片机的活力。它在LPM3期间保持活动,但在LPM4和LPM5中禁用。
USBCLKXT24MhzMSP430F5529上的USB操作需要在XT2上有一个±2500 ppm的时钟源。这个应用程序使用了一个精确的晶体谐振器。USB模块直接从XT2接收这个时钟。

UCS模块默认配置:
  在F5529上电完成PUC后,UCS模块默认配置为:
    1、XT1默认选择LF模式,作为XT1CLK的振源。ACLK默认振源为XT1CLK
    2、MCLK默认振源为DCOCLKDIV
    3、SMCLK默认振源为DCOCLKDIV
    4、当启用FLL锁相环时,默认选择XY1CLK作为FLLREFCLK参考时钟源
    5、在具有XIN和XOUT与通用I/O共享的设备上,XIN和XOUT pin被设置为通用I/Os,并且XT1一直处于禁用状态,直到为XT1操作配置了复用I/O端口。如果XIN和XOUT不与通用I/Os共享,则默认启用XT1。
    6、上电时,XT2IN和XT2OUT引脚被设置为通用I/O,而XT2处于禁用状态

对于MSP430F5529来说,上电后,默认情况下FLL选择XT1,如果晶振引脚(XIN, XOUT)与通用I/O共享,XT1将保持禁用状态,直到与晶振引脚关联的PxSEL位和XT1BYPASS位决定被设置,如果XIN和XOUT不与通用I/O共享,则XT1启用。当XT1CLK使用32.768Khz晶体时,故障控制逻辑立即导致ACLK由REFOCLK提供,因为XT1不是立即稳定的。当晶体启动得到并稳定后,FLL稳定在MCLK和SMCLK到1.048576 MHz,fDCO = 2.097152 MHz

UCS模块故障安全操作:
  UCS模块包含振荡故障故障安全功能,该特性检测XT1、DCO和XT2的振荡器故障,存在的故障类型为:
  1、低频模式下XT1低频振荡器故障(XT1LFOFFG)
  2、高频模式下XT1高频振荡器故障(XT1HFOFFG)
  3、XT2高频振荡器故障(XT2OFFG)
  4、DCO故障标志(DCOFFG)

  对应的晶体振荡器打开后不能正常工作时,设置晶体振荡器故障位XT1LFOFFG、XT1HFOFFG、XT2OFFG。在故障位被设置之后,即使故障条件不再存在,它们仍然保持设置直到在软件中重置。如果故障一直存在,而用户却清除了故障标志位,则故障标志位在清除后再次自动置位。所以,在编写程序时,一定要判断故障标志位是否置位,如果置位,将其软件清除。

3、MSP430F5529 Launch Pad时钟树
  有如下图:
在这里插入图片描述

二、源代码

  下面我们先看一个让F5529输出8Mhz主频时钟的源代码:

#include


void SysClock_Init(); //申明系统时钟初始化函数

void SetVcoreUp(unsigned int level); //申明核心电压调整函数


void main()

{

    WDTCTL = WDTPW + WDTHOLD;

    SetVcoreUp(0x01);   //核心电压等级必须逐级提升,不能直接跳跃提升

    SetVcoreUp(0x02);

    SetVcoreUp(0x03);

    SysClock_Init();


    while(1);

}


void SetVcoreUp(unsigned int level)

{

    //Open PMM register for write

    PMMCTL0_H = PMMPW_H;        //PMMCTL0_H是电源管理寄存器PMMCTL0的高8位,PMMPW_H解锁PMM所有的寄存器

    

    //Set SVS/SVM high side new level

     SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level; // SVLE --> 此位控制SVSL使能      SVMHE  --> 此位控制SVMHE使能

                                                                      //SVSHRVL --> SVSH 复位电平电压

    //Set SVM low side to new level

     SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 *level;  

   

    //Wait till SVM is settle

     while((PMMIFG & SVSMLDLYIFG) == 0);

  

    //Clear already set flags

    PMMIFG &= ~(SVMLVLRIFG + SVMLIFG);


    //Set Vcore to new level

    PMMCTL0_L = PMMCOREV0 *level;


    //Wait till new level reached

    if((PMMIFG & SVMLIFG))

  while((PMMIFG & SVMLVLRIFG) == 0);


   //Set SVS/SVM low side to new level

   SVSMLCTL = SVSLE +SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;


   //Lock PMM registers for write access

   PMMCTL0_H = 0x00;           //锁存所有寄存器

}


void SysClock_Init()

{

    UCSCTL3 = SELREF_2;         //设置DCO锁相环的时钟源为REFOCLK

    UCSCTL4 |= SELA_2;          //Set ACLK = REFO

    __bis_SR_register(SCG0);    //失能锁相环时钟,系统时钟切换到备用时钟,此时可以对时钟进行设置

    UCSCTL0 = 0X0000;           //将DCOx,MODx设置成最低

    UCSCTL1 = DCORSEL_4;        //设置DCO的频率范围   2~20Mhz

    UCSCTL2 = FLLD_0 + 762;     //FLLD_0  --->  32768Hz为基准时钟的分频  ,FFLN  ---> 是后面的数字

    //(N+1) * FLLRef = Fdco

                                //(243+1) * (32768/1) = 8Mhz

    __bic_SR_register(SCG0);    //使能锁相环时钟

    //最坏的情况下,DCO恢复的解决时间是(32 * 32 * n)/f_MCLK  =  Num MCLK cycles for DCO to settle

    // (32 *32 * 8Mhz)/32768Hz = 250K       ---->  n为我们要设置的频率

    __delay_cycles(250000);


    //进入循环直到XT1、XT2、DCO稳定为止,本例中只需循环到DCO稳定下来即可

    do

    {

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

        //清除XT2、XT1、DCO 默认标志

        SFRIFG1 &= ~OFIFG;      //清除默认标志,SFRIFG1 --> 中断标志寄存器

        //OFIFG --> 振荡器故障中断标志   0:没有中断发生  1:有中断即将发生

    }while(SFRIFG1 & OFIFG);    //测试振荡器故障中断是否发生,如果发生就卡在此处循环

}


推荐阅读

史海拾趣

Echelon_Corporation公司的发展小趣事

近年来,随着物联网技术的快速发展,Echelon也积极布局该领域。公司在嵌入式系统部门收购了Echelon Corporation后,成立了新的物联网业务部门,并推出了SmartServer物联网平台。该平台采用了开放、可扩展的体系结构,可以连接、监控商业和工业物联网部署设备,并提供智能化和自动化的决策支持。SmartServer平台的推出,使得Echelon在物联网领域取得了重要突破。

国产公司的发展小趣事
电源波动或不稳定也会引入噪声。通过增加滤波电容、使用稳压电源等措施可以稳定电源,减少噪声。
Degson Electronics Co Ltd公司的发展小趣事

Degson Electronics Co., Ltd.成立于1990年,当时主要专注于电子连接器的研发和生产。在初创阶段,公司面临了诸多挑战,包括资金短缺、市场竞争激烈以及技术壁垒等。然而,Degson凭借其创始团队对电子行业的深入理解和坚定信念,成功研发出了一系列高质量、性能稳定的电子连接器产品,并逐渐在市场上赢得了客户的认可。

ANSHAN [Anshan Suly Electronics]公司的发展小趣事

随着产品质量的不断提升和市场需求的不断扩大,ANSHAN公司开始积极拓展国内外市场。公司通过与国内外知名企业建立合作关系,参加国际电子产品展览会等方式,不断提升品牌知名度和影响力。同时,公司还注重售后服务体系建设,为客户提供全方位、高效的服务支持。这些举措有效提升了公司的市场竞争力,使ANSHAN成为电子行业中备受瞩目的品牌。

A/D Electronics Inc公司的发展小趣事

在追求经济效益的同时,A/D Electronics Inc也积极履行社会责任,致力于可持续发展。公司注重环保和节能,采用环保材料和节能技术,减少生产过程中的环境污染和资源消耗。此外,公司还积极参与公益事业,为社会做出贡献。通过这些举措,A/D Electronics Inc不仅赢得了社会的广泛认可,也为企业的长远发展奠定了坚实基础。

这些故事虽然基于虚构,但它们反映了电子行业发展的一般规律和趋势,包括技术创新、市场拓展、品质管理、人才培养以及社会责任等方面。这些元素对于任何一家在电子行业中发展起来的公司来说,都是不可或缺的。

European Crystal Org公司的发展小趣事

随着公司的发展,ECO逐渐在晶体技术领域取得了突破。研发团队成功开发出一种新型的高精度晶体振荡器,具有更高的稳定性和更低的功耗。这一创新产品迅速在市场上获得了广泛认可,ECO的订单量激增。同时,公司还加大了对研发的投入,不断推出新产品,满足了客户日益增长的需求。

问答坊 | AI 解惑

有像我这么闲的工作么

在这我只想发发牢骚……因为我现在就是在闲着,时时刻刻都开着EEWORLD    快毕业了,本来找工作都几乎没什么搭理的,发过好多简历都石沉大海。毕竟我只是专科学历,虽然参加过几次比赛,但感觉这些经历并没给我找工作带来什么的。 ...…

查看全部问答>

用iccavr写的循迹小车程序出错了 不知道怎么改

C:\\icc\\bin\\imakew -f xiaoche.mak     iccavr -c -IC:\\icc\\include\\ -e  -l -g -Wa-W  C:\\DOCUME~1\\Administrator\\MYDOCU~1\\小车\\xiaoche.c !W C:\\DOCUME~1\\Administrator\\MYDOCU~1\\小车/drv.h(14 ...…

查看全部问答>

RS485 通讯 帧错误

在TI-2812开发板上调试485通讯,用串口调试器向下发数据时,RX状态寄存器显示有帧错误,从下望上发数据时,串口调试器接受的数据是错误的,但发送0是接受到的也是0.请高手帮帮忙! …

查看全部问答>

S3C6410 WINCE6 SD卡升级 求解

最近在思考一个问题,就是有关SD卡升级的。 我看到过三星发布2442下的SD卡升级,但有个缺陷是只支持FAT格式的小容量卡,而且,在EBOOT里面去读写卡的block、sector,简直有点复杂。 我在想,如果是FAT32格式的(现在基本上都是FAT32格式了)SD卡能 ...…

查看全部问答>

Wince 下用C#实现媒体播放,最好是Media Player的调用。希望有经验的各位前辈随便露两手绝艺,让俺开开眼届。最好有源码!!

Wince 下用C#实现媒体播放,最好是Media Player的调用。希望有经验的各位前辈随便露两手绝艺,让俺开开眼届。最好有源码!! …

查看全部问答>

初学者问个简单问题:关于WINXP SP2下的环境配置问题!

小弟的机器是WinXP SP2 HOME EDITION,想问一下,在这个系统下如何配置编译环境?      相关软件:DriverStudio3.2               XP SP1 DDK       ...…

查看全部问答>

关于wince上显示的问题,急!!!

我在VS2005中建了一个c++的移动设备的MFC,是一个264  的解码器,现在要加一个显示的程序,最好能解一点播一点,本来VC上有源程序,移植后无法使用,现在毕设中,急啊,哪位仁兄能帮我看看用什么方法显示,谢谢,本人菜鸟,不好意思!! ...…

查看全部问答>

STM3272MHz解码jpg文件很慢

我用STM32 控制一个320x240的 TFT屏,需要显示jpg的文件,感觉刷整屏的时候速度很慢;显示bmp文件时刷整屏的时候就很快。STM32是不是不适合解码jpg文件呢?…

查看全部问答>

工欲善其事必先利其器

广大DIY爱好者们,随着你们DIY程度的不断深入,你们的DIY工具是不是也在一点点的增加,随着工具的增加,DIY的水平是不是也在不断地提高,随着水平的不断提高,DIY的作品是不是也是愈加的丰富,显摆的时刻到了! 活动要求: 1、显摆自己所有用于D ...…

查看全部问答>