查看: 584|回复: 0

MSP430Ware使用笔记 初始化XT1

[复制链接]

该用户从未签到

发表于 2020-11-23 20:30:34 | 显示全部楼层 |阅读模式
分享到:

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外设功能的代码,所以无法运行。此处做了少许修改。

  1. #include "inc/hw_memmap.h"
  2. #include "ucs.h"
  3. #include "wdt_a.h"
  4. #include "gpio.h"
  5. #include "sfr.h"

  6. uint16_t status;

  7. void main (void)
  8. {
  9.     // 停止看门狗
  10.     WDT_A_hold(WDT_A_BASE);

  11.     // P4.0保持输出状态
  12.     GPIO_setAsOutputPin(GPIO_PORT_P4,GPIO_PIN0);

  13.     // 初始化P7.0和P7.1为复用功能
  14.     GPIO_setAsPeripheralModuleFunctionInputPin( GPIO_PORT_P7 , GPIO_PIN0 | GPIO_PIN1 );
  15.     // 启动XT1 并等待晶振所有错误标志位清楚
  16.     UCS_LFXT1Start( UCS_BASE , UCS_XT1_DRIVE0 , UCS_XCAP_3 );

  17.     // 使能全局中断
  18.     __bis_SR_register(GIE);

  19.     while(1)
  20.     {
  21.         // 翻转P4.0
  22.         GPIO_toggleOutputOnPin(GPIO_PORT_P4,GPIO_PIN0);
  23.         // 软件延时
  24.         __delay_cycles(1000000);
  25.     }
  26. }
复制代码

如果使用了XT1或者XT2,那么调用UCS_getSMCLK、UCS_getMCLK、UCS_getACLK之前需要调用UCS_setExternalClockSource(UCS_BASE,XT1_CLK,XT2_CLK);

虽然对于这段代码而言UCS_getSMCLK等函数没有实际的作用,但这些函数对于设定UART或SPIder波特率还是很有帮助的。

修改后的代码如下:

  1. #include "inc/hw_memmap.h"
  2. #include "ucs.h"
  3. #include "wdt_a.h"
  4. #include "gpio.h"
  5. #include "sfr.h"

  6. uint32_t clockValue_ACLK = 0;
  7. uint32_t clockValue_MCLK = 0;
  8. uint32_t clockValue_SMCLK = 0;

  9. void main (void)
  10. {
  11.     // 停止看门狗
  12.     WDT_A_hold(WDT_A_BASE);

  13.     // P4.0保持输出状态
  14.     GPIO_setAsOutputPin(GPIO_PORT_P4,GPIO_PIN0);

  15.     // 初始化P7.0和P7.1为复用功能
  16.     GPIO_setAsPeripheralModuleFunctionInputPin( GPIO_PORT_P7 , GPIO_PIN0 | GPIO_PIN1 );
  17.     // 启动XT1,并等待晶振所有错误标志位清楚
  18.     UCS_LFXT1Start( UCS_BASE , UCS_XT1_DRIVE0 , UCS_XCAP_3 );

  19.     // 如果使用XT1或者XT2,需要调用该函数
  20.     UCS_setExternalClockSource(UCS_BASE,32768,8000000);
  21.     // 获得系统时钟,系统时钟,辅助时钟
  22.     clockValue_SMCLK = UCS_getSMCLK( UCS_BASE );
  23.     clockValue_MCLK = UCS_getMCLK( UCS_BASE );
  24.     clockValue_ACLK = UCS_getACLK( UCS_BASE );

  25.     // 使能全局中断
  26.     __bis_SR_register(GIE);

  27.     while(1)
  28.     {
  29.         // 翻转P4.0
  30.         GPIO_toggleOutputOnPin(GPIO_PORT_P4,GPIO_PIN0);
  31.         // 软件延时
  32.         __delay_cycles(1000000);
  33.     }
  34. }
复制代码

默认情况,ACLK选择XT1时钟,此时XT1时钟为32768HZ,FLL参考时钟为XT1,倍频之后DCODIV为1048576Hz。SMCLK和MCLK的参考时钟均为DCODIV。



回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条



手机版|小黑屋|与非网

GMT+8, 2024-11-24 07:17 , Processed in 0.115972 second(s), 15 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.