首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

MSP430Ware使用笔记 初始化XT1

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_t status;  

  • void main (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_t clockValue_ACLK = 0;  
  • uint32_t clockValue_MCLK = 0;  
  • uint32_t clockValue_SMCLK = 0;  

  • void main (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。
返回列表