222|0

6805

帖子

19

资源

纯净的硅(中级)

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。


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

关闭
站长推荐上一条 1/1 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表