一站式电子元器件采购平台

华强商城公众号

一站式电子元器件采购平台

元器件移动商城,随时随地采购

华强商城M站

元器件移动商城,随时随地采购

半导体行业观察第一站!

芯八哥公众号

半导体行业观察第一站!

专注电子产业链,坚持深度原创

华强微电子公众号

专注电子产业链,
坚持深度原创

电子元器件原材料采购信息平台

华强电子网公众号

电子元器件原材料采购
信息平台

MSP430单片机的DCO初始化

来源:电子发烧友 发布时间:2018-12-05

摘要: ACLK选择XT1,频率为32.768K,MCLK和SMCLK选择DCOCLKDIV,频率为8000K。

1.平台说明MSP430F5438。

2.ACLK选择XT1,频率为32.768K,MCLK和SMCLK选择DCOCLKDIV,频率为8000K。

//辅助时钟ACLK32.768K

//系统时钟子系统时钟8000K

#include“inc/hw_memmap.h”

#include“ucs.h”

#include“wdt_a.h”

#include“gpio.h”

#include“sfr.h”

voidmain(void)

{

MSP430单片机的DCO初始化

//停止看门狗

WDT_A_hold(WDT_A_BASE);

//P4.0保持输出状态

GPIO_setAsOutputPin(GPIO_PORT_P4,GPIO_PIN0);

//初始化P7.0和P7.1为复用功能

GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P7,GPIO_PIN0|GPIO_PIN1);

//启动XT1

UCS_LFXT1Start(UCS_BASE,UCS_XT1_DRIVE0,UCS_XCAP_3);

//DCO参考时钟选择XT1,选择了默认参数

//UCS_clockSignalInit(UCS_BASE,UCS_FLLREF,UCS_XT1CLK_SELECT,UCS_CLOCK_DIVIDER_1);

//DCO时钟8MHz

//该函数第二个参数为系统工作频率8000K,第三个参数为工作频率/DCO参考频率

UCS_initFLLSettle(UCS_BASE,8000,244);

//使能全局中断

__bis_SR_register(GIE);

while(1)

{

//翻转P4.0

GPIO_toggleOutputOnPin(GPIO_PORT_P4,GPIO_PIN0);

//软件延时

__delay_cycles(1000000);

}

}

从代码的角度来看,使用MSPWare使编程更加简洁,修改更加方便。

最后添加UCS_getSMCLK等函数验证结果,代码如下:

//辅助时钟ACLK32.768K

//系统时钟子系统时钟8000K

#include“inc/hw_memmap.h”

#include“ucs.h”

#include“wdt_a.h”

#include“gpio.h”

#include“sfr.h”

uint32_tclockValue_ACLK=0;

uint32_tclockValue_MCLK=0;

uint32_tclockValue_SMCLK=0;

voidmain(void)

{

//uint16_tstatus;

//停止看门狗

WDT_A_hold(WDT_A_BASE);

//P4.0保持输出状态

GPIO_setAsOutputPin(GPIO_PORT_P4,GPIO_PIN0);

//初始化P7.0和P7.1为复用功能

GPIO_setAsPeripheralModuleFuncTIonInputPin(GPIO_PORT_P7,GPIO_PIN0|GPIO_PIN1);

//启动XT1

UCS_LFXT1Start(UCS_BASE,UCS_XT1_DRIVE0,UCS_XCAP_3);

//DCO参考时钟选择XT1,实际选择了默认参数

//UCS_clockSignalInit(UCS_BASE,UCS_FLLREF,UCS_XT1CLK_SELECT,UCS_CLOCK_DIVIDER_1);

//DCO时钟8MHz

//该函数第二个参数为系统工作频率8000K,第三个参数为工作频率/DCO参考频率

UCS_initFLLSettle(UCS_BASE,8000,244);

//如果使用XT1或者XT2,需要调用该函数

UCS_setExternalClockSource(UCS_BASE,32768,8000000);

clockValue_SMCLK=UCS_getSMCLK(UCS_BASE);

clockValue_MCLK=UCS_getMCLK(UCS_BASE);

clockValue_ACLK=UCS_getACLK(UCS_BASE);

//使能全局中断

__bis_SR_register(GIE);

while(1)

{

//翻转P4.0

GPIO_toggleOutputOnPin(GPIO_PORT_P4,GPIO_PIN0);

//软件延时

__delay_cycles(1000000);

}

}

声明:本文观点仅代表作者本人,不代表华强商城的观点和立场。如有侵权或者其他问题,请联系本站修改或删除。

社群二维码

关注“华强商城“微信公众号

调查问卷

请问您是:

您希望看到什么内容: