MSP430Ware使用笔记 初始化XT1
扫描二维码
随时随地手机看文章
1.平台说明 MSP430F5438
2.为什么使用MSPWare。
由于工作原因,学校中多使用STM32,STM32的DriverLib比较方便使用。初学MSP430重新回到了操作寄存器的时代,稍稍有点不适应。后来发现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保持输出状态
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保持输出状态
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。