MSP430F5529系统升压与时钟配置

发布者:Joyful222Life最新更新时间:2022-10-18 来源: csdn关键字:MSP430F5529  时钟配置 手机看文章 扫描二维码
随时随地手机看文章

前言

相信入门MSP430F5529的你还在苦恼资料少,但是不妨换个角度想想,既然资料少,那就自己吃它!天道酬勤是吧,鸡汤少灌点哈哈,好了,补上上一篇博文所需要的内容,这一章主要就是讲一下系统升压与时钟配置问题,小建议运行程序前还是有必要进行一次时钟源配置,开讲啦!


一、如何系统升压

首先为什么要把系统的核心电压升高呢,自然就是他要与时钟频率相匹配,即1.8V(0~8MHZ),2.0V(0~12MHZ),2.2V(0~20MHZ),2.4V(0~25MHZ)四个级别,即要提高时钟频率,那么相对应的就要进行系统升压。MSP430手册上已经提到了:一表一图很好地说明了 

 

这里大家可能不太明白0、1、2、3代表什么?简单用一个代码SetVcoreUp(x)就能理解,x可以用0123来代替,分别代表0级(1.8V),1级(2.0V),2级(2.2V),3级(2.4V),那么是不是可以很快理解了。这里的SetVcoreUp函数下面会讲到,就是官方写的一个升压函数:


/*******************************************************************************

函数功能:设置内核电压值(与频率设置有关)

函数参数:u8 level :电压阶梯 小于3

********************************************************************************/

void SetVcoreUp (int level)

{

#if 1  //仿真时修改为0,否则会卡在死循环里

  // Open PMM registers for write

  PMMCTL0_H = PMMPW_H;

  // Set SVS/SVM high side new level

  SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;

  // Set SVM low side to new level

  SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;

  // Wait till SVM is settled

  long i=50000;

  while (((PMMIFG & SVSMLDLYIFG) == 0)&&((i--)>0));

  // Clear already set flags

  PMMIFG &= ~(SVMLVLRIFG + SVMLIFG);

  // Set VCore to new level

  PMMCTL0_L = PMMCOREV0 * level;

  // Wait till new level reached

  i =50000;

  if ((PMMIFG & SVMLIFG))

    while(((PMMIFG & SVMLVLRIFG) == 0)&&((i--)>0));

  /*

  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;

#endif

}


这里直接调用了官方的函数,但是在使用SetVcoreUp函数时注意要一级一级叠加上去,不用直接一下子升到2级或者3级,比如要升到3级,那么:


void upvcc(void)

{

SetVcoreUp(0);

SetVcoreUp(1);

SetVcoreUp(2);

SetVcoreUp(3);

 

}


到这里相信大家都明白了如何升压了,其实还有一种就是直接配置寄存器来实现,这种方法其实也挺好的,我就直接用这种,一般情况下就是直接升到最高核心电压,下面实现程序:

 

void upVcc(void)//核心电压上升3级

{

    PMMCTL0_H = 0xA5;                      //开启PMM电源管理,即开锁

    SVSMLCTL |= SVSMLRRL_1 + SVMLE;        //配置SVML电压

    PMMCTL0 = PMMPW +PMMCOREV_3;           //配置内核电压,选择3级

    while((PMMIFG & SVSMLDLYIFG)==0);      //等待配置完成

    PMMIFG &=~ (SVMLVLRIFG + SVMLIFG + SVSMLDLYIFG);

    if((PMMIFG & SVMLIFG)==1)

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

    SVSMLCTL &=~ SVMLE;                    //关闭SVML

    PMMCTL0_H = 0x00;                     //锁存配置,即关锁

}


到时候直接调用这个函数即可


二、如何配置时钟源(25MHZ为例)

完成了系统核心电压的升级,那么接下来关键的一步,就是配置时钟源了,那么为啥?因为该MSP430F5529初始时钟频率默认为1MHZ,实在是慢了许多,相比于STM32f1的72MHZ,而且在运行一些比较复杂一点的程序时就会显得特别慢,因此配置高的时钟频率就显得尤为重要,但是1MHZ也有它的好处,就是超低功耗emmm。


void timerup(void)//配置时钟25MHZ

{

 

UCSCTL3 = SELREF_2;

UCSCTL4 |= SELA_2;

__bis_SR_register(SCG0);

UCSCTL0 = 0x0000;

UCSCTL1 = DCORSEL_7;//50Mhz范围

UCSCTL2 = FLLD_0 + 762;    //(762+1)*32768==25MHZ

__bic_SR_register(SCG0);

 

__delay_cycles(782000);延时

 

while(SFRIFG1 & OFIFG)//等待设置完成

{

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

    SFRIFG1 &=~ OFIFG;

 

}

//UCSCTL4 = UCSCTL4&(~(SELS_7|SELM_7))|SELS_3|SELM_3;

}


这里讲一下代码的主要作用:


{


这里先讲一下五个时钟源:


1、LFXT1 外部低频振荡源,32.768KHZ,可以用作FLL的参照源;


2、XT2     外部高频振荡源,4MHZ;


3、VLO    内部低耗低频振荡源,典型为10KHZ,精度一般;


4、REFO 内部低频参照源,32.768KHZ,常被用作锁相环FLL的基准频率,精度很高,不使用时不消耗电源,其设置往往要参考LPM模式的的设置;


5、DCO   内部数字控制振荡源,一般通过FLL来设置。


}


进入正餐:


1、UCSCTL3 = SELREF_2(SELREF:FLL参考时钟选择。0-XT1(默认32768HZ),1-待用,默认为XT1(32768MHZ),2-REFO(32768HZ),5-XT2(4MHZ),其余均为待用,默认为REFO(默认32768HZ))这里选用REFO即326768HZ


2、UCSCTL4 |= SELA_2  ( SELA:ACLK时钟源选择。000-XT1,001-VLO,010-REFO,011-DCO,100-DCOCLKDIV,101 -XT2有效时为XT2,否则为DCOCLKDIV ,110 、111保留以备后来使用。当XT2有效时默认为XT2CLK,否则默认为DCOCLKDIV )这里依旧选用2(REFO)


3、UCSCTL0 = 0x0000 (这里就固定设置好即可,这里主要是一个DCO和MOD的设置,这么写即可,如要深究,可以到官方手册上学习)


4、UCSCTL1 = DCORSEL_7  (这里就是一个范围的设置,如下图介绍,这里7就是在135MHZ范围内均可,这里我就直接设置最大值了方便哈哈) 

5、UCSCTL2 = FLLD_0 + 762;    //(762+1)*32768==25MHZ 



FLLD:预分频器(即fDCO分频)。000-1分频,001-2分频,010-4分频,011-8分频,100-16分频,101-32分频,110以及111都是备用的,默认为32分频。这里选用1分频,即不分频。


FLLN(762):倍频系数。设置倍频值N,N必须大于0,如果FLLN=0,则N被自动设置为1。



好了,以上5点就是对关键代码的注释,不再展开细讲


这里就是以25MHZ为例,大家需要其他频率可以自行设计即可,希望对大家有用!


三、总结

今天这一篇还是基于MSP430F5529的基础篇,主要是讲一下如何进行系统升压与时钟频率的配置,这些在使用该单片机时都尤为重要,希望大家仔细阅读,一定要理解着看

关键字:MSP430F5529  时钟配置 引用地址:MSP430F5529系统升压与时钟配置

上一篇:MSP430 单片机内指针或结构体赋值为NULL,却有默认值的解决办法
下一篇:基于MSP430F5529的三种点灯方式(基本、定时、外部中断)

推荐阅读最新更新时间:2024-11-10 21:16

MSP430F5529学习入门
  为想学MSP430单片机的初学者,或者,你是刚转到电子硬件嵌入式开发,如果你的电子基础课程已经完成,想尽快掌握MSP430单片机,又纠结于怎样尽快闯入MSP430学习过程的问题,现总结整理出新手开始学习MSP430的一些问题,和学习中有关注意事项和方法。 供有心学习MSP430单片机的童鞋参考吧。   当然,闯入MSP430学习,你需要有一些单片机的理论基础,和比较强的C语言功底,学习MSP430单片机最好的方法是文武并进:“文”指学好片内模块的资源知识;“武”则指动手能能力。基础知识+动手实操,是一个非常有效的学习方法。文武并进必能学有所成。   进入各个电子产品公司的网站,招聘里面嵌入式占据了大半工程师职位。 广义
[单片机]
MSP430F5529 (一)通用I/O口的设置-2
这一部分讲外部中断。 看介绍再加弄懂程序才是王道 外部中断是MSP430优先级最低的中断而且是可屏蔽中断。用起来比较简单。   1.2.7  简单的端口中断(外部中断)                      P1、P2的所有端口都具有中断能力,可以通过寄存器PxIFG,PxIE和PxIES来配置。其他端口则需参照具体的引脚说明书。所有的P1中断标志是最优先的(相比其它引脚的外部中断),其中P1IFG.0又最优。                      PXIV中断向量寄存器:只有P1IV和P2IV。最高优先级使能中断在P1IV寄存器中产生一个序号,这个数字会被程序计数器识别或者加入其中,然后自动的执行合适的中断服务程序。关闭P
[单片机]
STM8S 时钟配置源码程序
型号:stm8s903k3 编译器:STVD4.3.5+cosmic 8k 5.4.1 其他:采用操作寄存器,不使用库 ----------------- 时钟是单片机的灵魂,所有的东西都和时钟有关。相比AVR反人类的熔丝位设置时钟/振荡源。stm只要操作寄存器就可以了。最关键的是!!就算设置错了也不!会!锁!死! ---------------- stm内部时钟示意图。 由图就可知,系统时钟可以由外部HSE(high speed external)或内部高速时钟HSI(high speed internal)或内部低速时钟LSI(low speed internal)提供。这里以内部高速时钟举例,内部高速时钟HSI经过H
[单片机]
MSP430F5529火箭板 --->基于定时器A的LED灯闪烁实验
实验内容:上电点亮MSP430F5529 Launch Pad 上板载的红色LED,同时使用定时器让绿色LED闪烁 实验准备: 1、硬件:MSP430F5529 Launch Pad 2、软件:Code Composer Studio集成开发工具(CCS) 3、CCS的使用安装方法可参考 《Windows环境Code Composer Studio 下载和使用教程》 文章链接: link 4、本次实验使用到的物理层的分析可参考文章: link 一、定时器——Timer_A   在进入正题之前,我们先来了解一下MSP430F5529的定时器,本次实验我们使用Timer_A定时器,这里需要注意的是MSP430F5529一共有
[单片机]
<font color='red'>MSP430F5529</font>火箭板 --->基于定时器A的LED灯闪烁实验
stm32f407时钟配置方法例程解析
这里我们写一个RCC配置函数来说明各函数的用途,其中HSE = 8MHz。 /** * @说明 配置STM32F407的时钟系统 * @参数 无 * @返回 无 * @说明 void Clock_Config(void) 按如下表格配置时钟 * *================================================================== * Supported STM32F4xx device revision | Rev A *-----------------------------------------------------------
[单片机]
关于STM32时钟配置的那些坑
今天分享以下两点内容: 1.为什么我们要先开启STM32外设模块时钟; 2.关于STM32的 I/O 复用功能及什么时候开启AFIO时钟; 1为什么我们要先开启STM32外设时钟 讲述本节内容之前先说一个案例: 前段时间,有一个朋友为配置EXTI的代码折腾了一天,最终没有结果。于是问了我这样一个问题:“你用过STM32F051C8T6的外部中断吗,就是GPIO管脚做中断,我这边就是进不了中断”。 然后他把基于标准外设库、寄存器写的代码都给我发过来了。我仔细看了又看,没发现有什么毛病啊。(但是,代码是截图分来给我发过来的)。 于是,我将之前配置IO外部中断的代码,按照他(PB2)的要求,写成一个“EXT
[单片机]
关于STM32<font color='red'>时钟</font><font color='red'>配置</font>的那些坑
[单片机框架][bsp层][cx32l003][bsp_system_clock] clock配置和使用
系统时钟 时钟控制模块主要控制系统时钟以及外设时钟, 可以配置不同的时钟源作为系统时钟, 可以配置不同的系统时钟分频,可以启动或禁用外设时钟。另外为了确保高精度,内部时钟都具有校准功能。 本产品支持以下四个不同的时钟源作为系统时钟: ⚫ 内部高速 RC 时钟 HIRC(4MHz)(默认主频) ⚫ 外部低速晶振时钟 LXT(32.768KHz) ⚫ 内部低速 RC 时钟 LIRC(38.4KHz 与 32.768KHz 可配置) ⚫ 外部高速晶振时钟 HXT(4MHz~24MHz) 注:LXT、HXT 可以通过端子 PB5、PA1 从外部输入。使用外部振荡输入时,需要使能相应的振荡。选择外部振荡控制选择在 RCC_SYSCL
[单片机]
[单片机框架][bsp层][cx32l003][bsp_system_<font color='red'>clock</font>] <font color='red'>clock</font><font color='red'>配置</font>和使用
浅谈MSP430F5529时钟
记得某位网友曾经说过,学习任何一款单片机,首先要学的是它的时钟。的确如此,时钟是如此的重要,在不知道系统时钟的情况,感觉做什么事都是迷迷糊糊的。 之前学过51,它的时钟很简单,就一个外部晶振。然后学了430的G2553,它的时钟就有点麻烦了,时钟源多(两个外部晶振,一个内部超低功耗低频振荡器,一个内部调整低频参考振荡器),内部还有锁频环,而且出来的时钟还能被分频。原因是TI主打低功耗,必须得有各种频率来满足设计需要,毕竟,频率越低,功耗越低。 现在的,430的F5529,跟G2553比起来也就需要配置的时钟相关的寄存器是其3倍而已 还有个PMM(电源管理模块)的配置 新增的PMM是干嘛的呢?还是那句话,TI主打超低
[单片机]
浅谈<font color='red'>MSP430F5529</font><font color='red'>时钟</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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