MSP430F5529系统升压与时钟配置,初学者必看!

2023-11-12 00:20

本文主要是介绍MSP430F5529系统升压与时钟配置,初学者必看!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

一、如何系统升压

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

三、总结

题外话:

 


前言

相信入门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 writePMMCTL0_H = PMMPW_H;// Set SVS/SVM high side new levelSVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;// Set SVM low side to new levelSVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;// Wait till SVM is settledlong i=50000;while (((PMMIFG & SVSMLDLYIFG) == 0)&&((i--)>0));// Clear already set flagsPMMIFG &= ~(SVMLVLRIFG + SVMLIFG);// Set VCore to new levelPMMCTL0_L = PMMCOREV0 * level;// Wait till new level reachedi =50000;if ((PMMIFG & SVMLIFG))while(((PMMIFG & SVMLVLRIFG) == 0)&&((i--)>0));/*if ((PMMIFG & SVMLIFG))while ((PMMIFG & SVMLVLRIFG) == 0);*/// Set SVS/SVM low side to new levelSVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;// Lock PMM registers for write accessPMMCTL0_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;                    //关闭SVMLPMMCTL0_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_2SELREF: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的基础篇,主要是讲一下如何进行系统升压与时钟频率的配置,这些在使用该单片机时都尤为重要,希望大家仔细阅读,一定要理解着看,如有其他不明白的欢迎随时评论留言,一起学习一起进步,也可以到其他优秀博文阅读,定能有所收获!

走过路过别错过,给博主“点赞关注评论收藏”,你的每一次动动手指,都是我不断码字的前进动力,感谢支持哈哈!

题外话:

挺喜欢彭于晏说的一句话:“我就是没有才华,所以才用命去拼!”

学习32之路固然辛苦,但要是坚持下来了,那不是很酷?哈哈哈

这篇关于MSP430F5529系统升压与时钟配置,初学者必看!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/393815

相关文章

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

maven私服配置全过程

《maven私服配置全过程》:本文主要介绍maven私服配置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录使用Nexus作为 公司maven私服maven 私服setttings配置maven项目 pom配置测试效果总结使用Nexus作为 公司maven私

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断