MSP430Ware使用笔记 初始化DCO至8MHz
扫描二维码
随时随地手机看文章
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)
{
//停止看门狗
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);
}
}