MSP430设置主时钟源、主时钟源和辅助时钟源
[复制链接]
本帖最后由 火辣西米秀 于 2020-10-10 20:21 编辑
时钟图
设置主时钟源
/*************************************************************************
* 函数名称:CLOCK_MCLK_Config (CLOCK_Source mclk , CLOCK_DIVx mclk_div)
* 功能说明:设置主时钟源及分频
* 参数说明:CLOCK_Source mclk :主时钟时钟源
CLOCK_DIVx mclk_div :主时钟分频系数
* 函数返回:无
* 使用示例:CLOCK_MCLK_Config (CLOCK_DCO , DIV_1); //主时钟使用DCO作为时钟源,分频系数为1(不分频)
*************************************************************************/
void CLOCK_MCLK_Config (CLOCK_Source mclk , CLOCK_DIVx mclk_div)
{
if(mclk == CLOCK_XT2)
{
XT2_Config(TRUE);
}
else if(mclk == CLOCK_XT1)
{
XT1_Config(TRUE);
}
UCS->SELM = mclk; //选择DCO作为时钟源
UCS->DIVM = mclk_div;
switch(mclk)
{
case CLOCK_XT1 :g_sClock.MCLK.nHZ = EXTAL_IN_XT1_HZ;break;
case CLOCK_VLO :g_sClock.MCLK.nHZ = VLOCLK_FREQUENCY;break;
case CLOCK_REFO :g_sClock.MCLK.nHZ = REFOCLK_FREQUENCY;break;
case CLOCK_DCO :g_sClock.MCLK.nHZ = g_sClock.DCO_FLL_Frequency;break;
case CLOCK_DCO_DIV:g_sClock.MCLK.nHZ = g_sClock.DCO_FLL_Frequency;break;
case CLOCK_XT2 :g_sClock.MCLK.nHZ = EXTAL_IN_XT2_HZ;break;
default :return;
}
g_sClock.MCLK.nHZ >>= mclk_div;
g_sClock.MCLK.nKHZ = g_sClock.MCLK.nHZ/1000u;
g_sClock.MCLK.fMHZ = g_sClock.MCLK.nHZ/1000000.0;
}
3.2 设置系统时钟源
/*************************************************************************
* 函数名称:CLOCK_SMCLK_Config (CLOCK_Source smclk, CLOCK_DIVx smclk_div)
* 功能说明:设置系统时钟源及分频
* 参数说明:CLOCK_Source smclk :系统时钟时钟源
CLOCK_DIVx smclk_div :系统时钟分频系数
* 函数返回:无
* 使用示例:CLOCK_SMCLK_Config (CLOCK_DCO , DIV_2); //系统时钟使用DCO作为时钟源,分频系数为2(二分频)
*************************************************************************/
void CLOCK_SMCLK_Config (CLOCK_Source smclk, CLOCK_DIVx smclk_div)
{
if(smclk == CLOCK_XT2)
{
XT2_Config(TRUE);
}
else if(smclk == CLOCK_XT1)
{
XT1_Config(TRUE);
}
UCS->SELS = smclk;//选择smclk时钟源
UCS->DIVS = smclk_div;
switch(smclk)
{
case CLOCK_XT1 :g_sClock.SMCLK.nHZ = EXTAL_IN_XT1_HZ;break;
case CLOCK_VLO :g_sClock.SMCLK.nHZ = VLOCLK_FREQUENCY;break;
case CLOCK_REFO :g_sClock.SMCLK.nHZ = REFOCLK_FREQUENCY;break;
case CLOCK_DCO :g_sClock.SMCLK.nHZ = g_sClock.DCO_FLL_Frequency;break;
case CLOCK_DCO_DIV:g_sClock.SMCLK.nHZ = g_sClock.DCO_FLL_Frequency;break;
case CLOCK_XT2 :g_sClock.SMCLK.nHZ = EXTAL_IN_XT2_HZ;break;
default :return;
}
g_sClock.SMCLK.nHZ >>= smclk_div;
g_sClock.SMCLK.nKHZ = g_sClock.SMCLK.nHZ/1000u;;
g_sClock.SMCLK.fMHZ = g_sClock.SMCLK.nHZ/1000000.0;
}
3.3 设置辅助时钟源
/*************************************************************************
* 函数名称:CLOCK_ACLK_Config (CLOCK_Source aclk , CLOCK_DIVx aclk_div)
* 功能说明:设置辅助时钟源及分频
* 参数说明:CLOCK_Source aclk :辅助时钟时钟源
CLOCK_DIVx aclk_div :辅助时钟分频系数
* 函数返回:无
* 使用示例:CLOCK_ACLK_Config (XT! , DIV_4); //辅助时钟使用XT1作为时钟源,分频系数为4(四分频)
*************************************************************************/
void CLOCK_ACLK_Config (CLOCK_Source aclk , CLOCK_DIVx aclk_div)
{
if(aclk == CLOCK_XT2)
{
XT2_Config(TRUE);
}
else if(aclk == CLOCK_XT1)
{
XT1_Config(TRUE);
}
UCS->SELA = aclk;//选择时钟源
UCS->DIVA = aclk_div; //设置分频系数为0
switch(aclk)
{
case CLOCK_XT1 :g_sClock.ACLK.nHZ = EXTAL_IN_XT1_HZ;break;
case CLOCK_VLO :g_sClock.ACLK.nHZ = VLOCLK_FREQUENCY;break;
case CLOCK_REFO :g_sClock.ACLK.nHZ = REFOCLK_FREQUENCY;break;
case CLOCK_DCO :g_sClock.ACLK.nHZ = g_sClock.DCO_FLL_Frequency;break;
case CLOCK_DCO_DIV:g_sClock.ACLK.nHZ = g_sClock.DCO_FLL_Frequency;break;
case CLOCK_XT2 :g_sClock.ACLK.nHZ = EXTAL_IN_XT2_HZ;break;
default :return;
}
g_sClock.ACLK.nHZ >>= aclk_div;
g_sClock.ACLK.nKHZ = g_sClock.ACLK.nHZ/1000u;;
g_sClock.ACLK.fMHZ = g_sClock.ACLK.nHZ/1000000.0;
}
4.更改时钟来源操作
具体路径请改变msp430f5529_system.h里面的宏定义修改时钟源及时钟分频
//宏定义初始化时钟频率及时钟源
#define FLL_REF FLLREF_REFO //FLL参考时钟源
#define FLLREF_DIV FLLREF_DIV_1 //FLL参考时钟分频系数
#define DCO_CLK_HZ 25MHZ //DCO时钟频率
//主时钟设置
#define MCLK_SOURCE CLOCK_DCO //主时钟时钟源
#define MCLK_DIV CLOCK_DIV_1 //主时钟时钟分频系数
//系统时钟设置
#define SMCLK_SOURCE CLOCK_XT2 //系统时钟时钟源
#define SMCLK_DIV CLOCK_DIV_1 //系统时钟分频系数
//辅助时钟设置
#define ACLK_SOURCE CLOCK_REFO //辅助时钟时钟源
#define ACLK_DIV CLOCK_DIV_1 //辅助时钟分频系数
|