标题:
msp430f5529时钟设置源码
[打印本页]
作者:
Limerrence
时间:
2018-7-9 23:11
标题:
msp430f5529时钟设置源码
msp430f5529最高支持25MHz时钟,借助官方数据手册和官方例程,本人自己调出了一个配置msp430f5529始终系统的程序,现奉上.c和.h文件,供大家参考,不对的地方请大家批评指正
0.png
(43.2 KB, 下载次数: 93)
下载附件
2018-7-10 03:04 上传
单片机源程序如下:
/*
* System_Init.c
*
* Created on: 2018年6月8日
* Author: Limerrence
* 使用说明:调用DCO_Init()对始终系统进行初始化,
* 设置XT的值可以选择晶振,默认选择XT1,以降低功耗,
* 若对时钟频率要求较高可以选择XT2,修改DCO_Init()函数中的值可以选择不同的时钟频率
*/
#include <System_Init.h>
#define XT 1
/*********************************************************************
* 晶振选择,XT为1时选择XT1做时钟源,XT为2时选择XT2做时钟源
* 若选XT1,则最终MCLK:24MHZ,SMCLK:12MHZ,ACLK:32768HZ
* 若选XT2,则最终MCLK:24MHZ,SMCLK:12MHZ,ACLK:4MHZ
*********************************************************************/
void SetVcore (unsigned int level)
{
PMMCTL0_H = PMMPW_H;
SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;
SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;
while ((PMMIFG & SVSMLDLYIFG) == 0);
PMMIFG &= ~(SVMLVLRIFG + SVMLIFG);
PMMCTL0_L = PMMCOREV0 * level;
if ((PMMIFG & SVMLIFG))
while ((PMMIFG & SVMLVLRIFG) == 0);
SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;
PMMCTL0_H = 0x00;
}
#if (XT==1)
void DCO_Init()
{
P7SEL |= BIT7; //MCLK
P7DIR |= BIT7;
P5SEL |= BIT4|BIT5;
UCSCTL6 |= XCAP_3;
UCSCTL6 &= ~XT1OFF; //打开XT1,否则XT1LFOFFG可能报错
SetVcore(1);
SetVcore(2);
SetVcore(3); //提高Vcore电压到最高级,以满足倍频需求该函数位于HAL_PMM.H中
__bis_SR_register(SCG0); //该语法为固定格式,意为将括号内的变量置位,SCG0与系统工作模式有关,此时MCLK暂停工作
UCSCTL0 = 0; //先清零,FLL运行时,该寄存器系统会自动配置,不用管
UCSCTL1 = DCORSEL_6;
/**************************************************************************
* 以下是对倍频的设置
* //n=1,FLLREFCLK时钟源为XT2CLK;
* //DCOCLK=D*(N+1)*(FLLREFCLK/n)=2*(3)*4M=24M;
* //DCOCLKDIV=(N+1)*(FLLREFCLK/n)=12M;
**************************************************************************/
UCSCTL2 = FLLD_1 | 380; //FLLD=1,FLLN=380,则频率为2*(380+1)*32.768=24.969MHZ
__bic_SR_register(SCG0);
__delay_cycles(782000); //系统自带的精确延时,单位us
while (SFRIFG1 & OFIFG)
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
SFRIFG1 &= ~OFIFG;
}
UCSCTL4 = UCSCTL4&(~(SELS_7|SELM_7))|SELS_4|SELM_3;
//最终MCLK:24MHZ,SMCLK:12MHZ,ACLK:32768HZ
}
#endif
#if (XT==2)
void DCO_Init()
{
P7DIR |= BIT7;
P7SEL |= BIT7; //MCLK
P5SEL |= BIT2|BIT3; //打开XT2引脚
//UCSCTL6 |= XCAP_3;
UCSCTL6 &= XT1OFF; //关闭XT1
UCSCTL6 &= ~XT2OFF; //打开XT2
SetVcore(1);
SetVcore(2);
SetVcore(3); //提高Vcore电压到最高级,以满足倍频需求该函数位于HAL_PMM.H中
/*********************寄存器配置部分******************************/
__bis_SR_register(SCG0); //该语法为固定格式,意为将括号内的变量置位,
//SCG0与系统工作模式有关,此时MCLK暂停工作
//UCSCTL0 = DCO0+DCO1+DCO2+DCO3+DCO4;
UCSCTL0 = 0;
UCSCTL1 = DCORSEL_6; //DCO频率范围在28.2MHZ以下
UCSCTL2 = FLLD_1 + 2; //D=2,N=2
UCSCTL3 = SELREF_6 + FLLREFDIV_0; //n=1,FLLREFCLK时钟源为XT2CLK;
//DCOCLK=D*(N+1)*(FLLREFCLK/n)=2*(3)*4M=24M;
//DCOCLKDIV=(N+1)*(FLLREFCLK/n)=12M;
UCSCTL4 = SELA_5 + SELS_4 + SELM_3; //ACLK的时钟源为XT2,MCLK\SMCLK的时钟源为DCOCLK
UCSCTL5 = DIVA_0 + DIVS_0 + DIVM_0; //ACLK由DCOCLKDIV的32分频得到,SMCLK由DCOCLK的2分频得到
//最终MCLK:24MHZ,SMCLK:12MHZ,ACLK:4MHZ
__bic_SR_register(SCG0); //Enable the FLL control loop
/**********************************************************************/
__delay_cycles(8192);
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG); //Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; //Clear fault flags
}while (SFRIFG1&OFIFG);
}
#endif
复制代码
所有资料51hei提供下载:
MSP430f5529Code.rar
(2.07 KB, 下载次数: 92)
2018-7-9 23:09 上传
点击文件名下载附件
msp430f5529时钟配置
下载积分: 黑币 -5
作者:
xqk114
时间:
2018-7-19 19:42
看一下
作者:
WenDonlin
时间:
2018-12-15 20:50
先谢过,看一下
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1