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);
}
}
評論