1.平臺說明 MSP430F5438
2.為什么使用MSPWare。
由于工作原因,學校中多使用STM32,STM32的DriverLib比較方便使用。初學MSP430重新回到了操作寄存器的時代,稍稍有點不適應。后來發(fā)現MSP也有DriverLib只是使用的人不多,就這范例文檔一點一點摸索,并和寄存器操作相比較。經過了一段時間的努力也就熟悉了。
3.嵌入式系統編程趨勢
個人認為,DriverLib會成為主流,這樣可以縮短MCU使用的難度,在Flash和RAM容量不斷提高的今天,不必去死摳每一個函數,如何更快上手MCU解決實際問題才是王道。剛剛推出市場的新MCU也具備DriverLib,縮短上手時間,更快占領市場。
4.示例代碼,啟動XT1。TI的示例代碼中缺少初始化P7.0和P7.1外設功能的代碼,所以無法運行。此處做了少許修改。
#include"inc/hw_memmap.h"
#include"ucs.h"
#include"wdt_a.h"
#include"gpio.h"
#include"sfr.h"
uint16_tstatus;
voidmain(void)
{
//停止看門狗
WDT_A_hold(WDT_A_BASE);
//P4.0保持輸出狀態(tài)
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);
//使能全局中斷
__bis_SR_register(GIE);
while(1)
{
//翻轉P4.0
GPIO_toggleOutputOnPin(GPIO_PORT_P4,GPIO_PIN0);
//軟件延時
__delay_cycles(1000000);
}
}
如果使用了XT1或者XT2,那么調用UCS_getSMCLK、UCS_getMCLK、UCS_getACLK之前需要調用UCS_setExternalClockSource(UCS_BASE,XT1_CLK,XT2_CLK);
雖然對于這段代碼而言UCS_getSMCLK等函數沒有實際的作用,但這些函數對于設定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)
{
//停止看門狗
WDT_A_hold(WDT_A_BASE);
//P4.0保持輸出狀態(tài)
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);
//如果使用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);
}
}
默認情況,ACLK選擇XT1時鐘,此時XT1時鐘為32768HZ,FLL參考時鐘為XT1,倍頻之后DCODIV為1048576Hz。SMCLK和MCLK的參考時鐘均為DCODIV。