MSP430Ware使用筆記 初始化XT1
1.平臺(tái)說(shuō)明 MSP430F5438
2.為什么使用MSPWare。
由于工作原因,學(xué)校中多使用STM32,STM32的DriverLib比較方便使用。初學(xué)MSP430重新回到了操作寄存器的時(shí)代,稍稍有點(diǎn)不適應(yīng)。后來(lái)發(fā)現(xiàn)MSP也有DriverLib只是使用的人不多,就這范例文檔一點(diǎn)一點(diǎn)摸索,并和寄存器操作相比較。經(jīng)過(guò)了一段時(shí)間的努力也就熟悉了。
3.嵌入式系統(tǒng)編程趨勢(shì)
個(gè)人認(rèn)為,DriverLib會(huì)成為主流,這樣可以縮短MCU使用的難度,在Flash和RAM容量不斷提高的今天,不必去死摳每一個(gè)函數(shù),如何更快上手MCU解決實(shí)際問(wèn)題才是王道。剛剛推出市場(chǎng)的新MCU也具備DriverLib,縮短上手時(shí)間,更快占領(lǐng)市場(chǎng)。
4.示例代碼,啟動(dòng)XT1。TI的示例代碼中缺少初始化P7.0和P7.1外設(shè)功能的代碼,所以無(wú)法運(yùn)行。此處做了少許修改。
#include"inc/hw_memmap.h"
#include"ucs.h"
#include"wdt_a.h"
#include"gpio.h"
#include"sfr.h"
uint16_tstatus;
voidmain(void)
{
//停止看門(mén)狗
WDT_A_hold(WDT_A_BASE);
//P4.0保持輸出狀態(tài)
GPIO_setAsOutputPin(GPIO_PORT_P4,GPIO_PIN0);
//初始化P7.0和P7.1為復(fù)用功能
GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P7,GPIO_PIN0|GPIO_PIN1);
//啟動(dòng)XT1并等待晶振所有錯(cuò)誤標(biāo)志位清楚
UCS_LFXT1Start(UCS_BASE,UCS_XT1_DRIVE0,UCS_XCAP_3);
//使能全局中斷
__bis_SR_register(GIE);
while(1)
{
//翻轉(zhuǎn)P4.0
GPIO_toggleOutputOnPin(GPIO_PORT_P4,GPIO_PIN0);
//軟件延時(shí)
__delay_cycles(1000000);
}
}
如果使用了XT1或者XT2,那么調(diào)用UCS_getSMCLK、UCS_getMCLK、UCS_getACLK之前需要調(diào)用UCS_setExternalClockSource(UCS_BASE,XT1_CLK,XT2_CLK);
雖然對(duì)于這段代碼而言UCS_getSMCLK等函數(shù)沒(méi)有實(shí)際的作用,但這些函數(shù)對(duì)于設(shè)定UART或SPIder波特率還是很有幫助的。
修改后的代碼如下:
#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)
{
//停止看門(mén)狗
WDT_A_hold(WDT_A_BASE);
//P4.0保持輸出狀態(tài)
GPIO_setAsOutputPin(GPIO_PORT_P4,GPIO_PIN0);
//初始化P7.0和P7.1為復(fù)用功能
GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P7,GPIO_PIN0|GPIO_PIN1);
//啟動(dòng)XT1,并等待晶振所有錯(cuò)誤標(biāo)志位清楚
UCS_LFXT1Start(UCS_BASE,UCS_XT1_DRIVE0,UCS_XCAP_3);
//如果使用XT1或者XT2,需要調(diào)用該函數(shù)
UCS_setExternalClockSource(UCS_BASE,32768,8000000);
//獲得系統(tǒng)時(shí)鐘,系統(tǒng)時(shí)鐘,輔助時(shí)鐘
clockValue_SMCLK=UCS_getSMCLK(UCS_BASE);
clockValue_MCLK=UCS_getMCLK(UCS_BASE);
clockValue_ACLK=UCS_getACLK(UCS_BASE);
//使能全局中斷
__bis_SR_register(GIE);
while(1)
{
//翻轉(zhuǎn)P4.0
GPIO_toggleOutputOnPin(GPIO_PORT_P4,GPIO_PIN0);
//軟件延時(shí)
__delay_cycles(1000000);
}
}
默認(rèn)情況,ACLK選擇XT1時(shí)鐘,此時(shí)XT1時(shí)鐘為32768HZ,F(xiàn)LL參考時(shí)鐘為XT1,倍頻之后DCODIV為1048576Hz。SMCLK和MCLK的參考時(shí)鐘均為DCODIV。