当MSP430 5xx/6xx 系列外部接入32768Hz的低频晶振时,满足不了需要高速运行的应用。所以需要通过MCU内部的DCO(数字控制振荡器)和FLL(锁相环)将低速时钟32768Hz进行倍频,达到需要的目标频率。

DCO是一个集成的数字控制振荡器。DCO频率可以通过软件使用UCSCTL1.DCORSEL、UCSCTL0.DCO和UCSCTL0.MOD位进行调整。DCO频率可由FLL选择性地稳定到FLLREFCLK/n的多个倍频。FLL可以接受由UCSCTL3.SELREF位选择的不同参考时钟源。参考时钟源包括XT1CLK、REFOCLK或XT2CLK(如果可用)。n的值由UCSCTL3.FLLREFDIV位(n=1、2、4、8、12或16)定义。默认值为n=1。在某些情况下,可能不需要或不希望FLL操作;在这些情况下,不需要FLLREFCLK。这可以通过设置UCSCTL3.SELREF={7}来实现。

倍频器(N+1)和分频器值D定义了DCOCLK和DCOCLKDIV频率。倍频器(N+1)可使用UCSCTL2.FLLN位设置,其中N>0。可以使用的最小乘数(N+1)是2。如果无意中写入FLLN=0h,逻辑将导致FLLN=1h。因此,设置FLLN=0h也相当于设置FLLN=1h,并将产生乘2。所有其他FLLN设置的行为如下所述;例如,FLLN=2h导致乘3,或FLLN=3h导致乘4。

DCO频率区间选择参考

当选择适当的DCO频率范围(UCSCTL1.DCORSEL)时,目标DCO频率fDCO应设置为在fDCO(n,0)、MAX≤fDCO≤fDCO(n,31)、MIN范围内,其中:

fDCO(n,0),MAX代表:DCORSEL=n、DCO=0指定的最大频率,

fDCO(n,31)、MIN代表:DCORSEL=n、DCO=31指定的最小频率

工程介绍: 选择 REFOCLK 作为 DCO 参考时钟源

MCU型号: MSP430F6736A

编译平台: IAR for MSP430 6.40.1

实验项目: UCS时钟系统: 测试 DCO

                 选择 ACLK = REFOCLK = 32768 Hz

                         SMCLK = DCOCLKDIV = 262144 Hz

                         MCLK = DCOCLK = 524288 Hz

               并将 ACLK SMCLK MCLK 输出到外部管脚, 以方便测试验证

#include "msp430.h"
#include "msp430f6736a.h"// 延时1秒: 延时524288个MCLK时钟周期,因为MCLK=DCOCLK=524288Hz
#define DELAY_1s    __delay_cycles(524288)void main(void)
{WDTCTL = WDTPW + WDTHOLD;   // 禁止看门狗__bic_SR_register(GIE);     // 禁止所有中断// REFOCLK作为DCO输入, 启动DCOUCSCTL3 |= SELREF__REFOCLK; // DCO的输入参考时钟源 FLLRef = REFOCLK = 32768 Hz__bis_SR_register(SCG0);    // 禁止 FLL 控制UCSCTL0 = 0x0000;           // DCO=0, MOD=0UCSCTL1 = DCORSEL_0;        // DCO 范围: 0.2MHz - 0.7MHzUCSCTL2 = FLLD_1 | 7 ;      // FLLD = 1(fDCO分频系数D = 2), N = 7// fDCOCLK = D * (N + 1) * FLLRef = 2 * (7 + 1) * 32768 = 524288 Hz// fDCOCLKDIV = fDCOCLK / D = 524288 / 2 = 262144 Hz__bic_SR_register(SCG0);    // 允许 FLL 控制// DCO稳定时间 = UCSCTL3.FLLREFDIV(默认=1) * 32 * 32 个FLLRef周期 = 1 * 32 * 32 / 32768 (s)// 因为 MCLK 默认为fDCOCLKDIV, 所以 MCLK = 262144 Hz// 所以延时函数__delay_cycles()的参数(主时钟数量) = MCLK * DCO稳定时间 = 262144 * 1 * 32 * 32 / 32768 = 8192__delay_cycles(8192);// 循环检测 DCO 错误标志, 直至其消除do{UCSCTL7 &= ~(DCOFFG);     // 清除 DCO 错误标志} while (UCSCTL7 & DCOFFG);   // 检查 DCO 错误标志// ACLK = REFOCLK = 32768 Hz, SMCLK = DCOCLKDIV = 262144 Hz, MCLK = DCOCLK = 524288 HzUCSCTL4 = SELA__REFOCLK | SELS__DCOCLKDIV | SELM__DCOCLK;/************************* MCU管脚96 : PJ.0 | SMCLK | TDO          包含 SMCLK 外围模块功能* MCU管脚97 : PJ.1 | MCLK  | TDI | TCLK   包含 MCLK  外围模块功能* MCU管脚99 : PJ.3 | ACLK  | TCK          包含 ACLK  外围模块功能* 所以将 PORT J.0 J.1 J.3 的功能选择: 外围模块功能, 所以就可以输出对应的时钟信号* PJ.0 功能选择: SMCLK* PJ.1 功能选择: MCLK* PJ.3 功能选择: ACLK************************/PJSEL = BIT3 | BIT1 | BIT0;PJDIR = 0xff;   // PJ输出模式PJOUT = 0xff;   // PJ输出0xff// PORT 3 : P3.7 P3.6 P3.5 P3.4用作流水灯输出, 管脚功能:I/O  模式:输出P3SEL = 0;P3DIR = 0xf0;P3OUT = 0xf0;// 流水灯循环间隔时间=1s, 用来指示程序运行状态char    LampValue;LampValue = 0x10;while(1){P3OUT = ~LampValue;LampValue = LampValue<<1;if (LampValue == 0x00) LampValue = 0x10;DELAY_1s;}
}

工程介绍: 选择 XT1CLK 作为 DCO 参考时钟源

MCU型号: MSP430F6736A

编译平台: IAR for MSP430 6.40.1

实验项目: UCS时钟系统: 测试 DCO

                选择 ACLK = XT1CLK = 32768 Hz

                        SMCLK = DCOCLKDIV = 524288 Hz

                        MCLK = DCOCLK = 2097152 Hz

               并将 ACLK SMCLK MCLK 输出到外部管脚, 以方便测试验证

#include "msp430.h"
#include "msp430f6736a.h"// 延时1秒: 延时2097152个MCLK时钟周期,因为MCLK=DCOCLK=2097152Hz
#define DELAY_1s    __delay_cycles(2097152)       //*************************************************************************************************
// 主流程
//*************************************************************************************************
void main(void)
{WDTCTL = WDTPW + WDTHOLD;             // 禁止看门狗__bic_SR_register(GIE);               // 禁止所有中断// 初始化XT1, 并使其正常工作UCSCTL6 &= ~(XT1OFF+XT1BYPASS+XTS);   // XT1开启 + XT1来源于外部晶体 + XT1低频模式UCSCTL6 |= XT1DRIVE_3;                // XT1低频模式的最大驱动能力和最大电流消耗UCSCTL6 |= XCAP_3;                    // 负载电容=12pf// 循环检测 XT1 错误标志, 直至其消除, XT1正常工作do{UCSCTL7 &= ~XT1LFOFFG;            // 清除 XT1 错误标志} while (UCSCTL7 & XT1LFOFFG);        // 检测 XT1 错误标志// XT1CLK作为DCO输入, 启动DCOUCSCTL3 |= SELREF__XT1CLK;            // DCO的输入参考时钟源 FLLRef = XT1CLK = 32768 Hz__bis_SR_register(SCG0);              // 禁止 FLL 控制UCSCTL0 = 0x0000;                     // DCO=0, MOD=0UCSCTL1 = DCORSEL_1;                  // DCO 范围: 0.36MHz - 1.47MHzUCSCTL2 = FLLD_2 | 15 ;               // FLLD = 2(fDCO分频系数D = 4), N = 15// fDCOCLK = D * (N + 1) * FLLRef = 4 * (15 + 1) * 32768 = 2097152 Hz// fDCOCLKDIV = fDCOCLK / D = 2097152 / 4 = 524288 Hz__bic_SR_register(SCG0);              // 允许 FLL 控制// DCO稳定时间 = UCSCTL3.FLLREFDIV(默认=1) * 32 * 32 个FLLRef周期 = 1 * 32 * 32 / 32768 (s)// 因为 MCLK 默认为fDCOCLKDIV, 所以 MCLK = 524288 Hz// 所以延时函数__delay_cycles()的参数(主时钟数量) = MCLK * DCO稳定时间 = 524288 * 1 * 32 * 32 / 32768 = 16384__delay_cycles(16384);// 循环检测 DCO 错误标志, 直至其消除do{UCSCTL7 &= ~(DCOFFG);             // 清除 DCO 错误标志} while (UCSCTL7 & DCOFFG);           // 检查 DCO 错误标志// ACLK = XT1CLK = 32768 Hz, SMCLK = DCOCLKDIV = 524288 Hz, MCLK = DCOCLK = 2097152 HzUCSCTL4 = SELA__XT1CLK | SELS__DCOCLKDIV | SELM__DCOCLK;/************************* MCU管脚96 : PJ.0 | SMCLK | TDO          包含 SMCLK 外围模块功能* MCU管脚97 : PJ.1 | MCLK  | TDI | TCLK   包含 MCLK  外围模块功能* MCU管脚99 : PJ.3 | ACLK  | TCK          包含 ACLK  外围模块功能* 所以将 PORT J.0 J.1 J.3 的功能选择: 外围模块功能, 所以就可以输出对应的时钟信号* PJ.0 功能选择: SMCLK* PJ.1 功能选择: MCLK* PJ.3 功能选择: ACLK************************/PJSEL = BIT3 | BIT1 | BIT0;PJDIR = 0xff;   // PJ输出模式PJOUT = 0xff;   // PJ输出0xff// PORT 3 : P3.7 P3.6 P3.5 P3.4用作流水灯输出, 管脚功能:I/O  模式:输出P3SEL = 0;P3DIR = 0xf0;P3OUT = 0xf0;// 流水灯循环间隔时间=1s, 用来指示程序运行状态char    LampValue;LampValue = 0x10;while(1){P3OUT = ~LampValue;LampValue = LampValue<<1;if (LampValue == 0x00) LampValue = 0x10;DELAY_1s;}
}

MSP430 5xx/6xx 以REFO或XT1为时钟源的DCO编程实例相关推荐

  1. MSP430 5xx/6xx系列 低频振荡器VLO编程实例(源码+电路)

    MSP430 5xx/6xx系列内部VLO提供10 kHz的典型频率(参数见芯片的特定数据表),无需晶体.VLO为不需要精确时基的应用提供了一个低成本的超低功耗时钟源. 本实例示范如何使用VLO,并将 ...

  2. MSP430 5xx/6xx Watchdog看门狗编程实例

    看门狗定时器是一个32位定时器,可以用作看门狗或间隔定时器. 看门狗定时器模块的主要功能是在出现软件问题后执行受控的系统重启.如果超过选定的时间间隔,将生成系统复位.如果应用程序不需要看门狗功能,则模 ...

  3. MSP430 5xx/6xx 定时器A增计数模式编程实例

    Timer_A是一个16位定时器/计数器,最多有7个捕获/比较寄存器.Timer_A可支持多个捕获/比较.PWM输出和间隔定时.Timer_A还具有广泛的中断功能.计数器的溢出和每个捕获/比较寄存器都 ...

  4. 【嵌入式】MSP430系统实时时钟RTC学习日志(完善中)

    目录 MSP430系统实时时钟RTC [时钟初始化]系统时钟初始化需要注意的问题 MSP430F149时钟源选择(部分转) MSP430 系统时钟 ACLK.MCLK.SMCLK [MSP430时钟] ...

  5. MSP430 UART(一)

    异步串行通信(UART) 的特点如下: ●传输7位或8位数据,可采用奇校验.偶校验或者无校验; ●具有独立的发送和接收移位寄存器; ●具有独立的发送和接收缓冲寄存器; ●支持最低位优先或最高位优先的数 ...

  6. MSP430F5529 DriverLib 库函数学习笔记(四)UART通信

    目录 硬知识 USCI通信模块 USCI的UART模式 1. USCI初始化和复位 2. 异步通信字符格式 3. 异步多机通信模式 4. 自动波特率检测 5. IrDA编码和解码 6. 自动错误检测 ...

  7. MSP432驱动舵机串口输出角度

    MSP432驱动舵机串口输出角度 备注:我用的TI官方launchpad的MSP432P401R开发板 1.舵机需要50Hz基准的PWM,占空比是0.025~0.125.如何产生PWM,当然是定时器了 ...

  8. 基于MSP430G2553的模拟风扇控制系统

    基于MSP430G2553的模拟风扇控制系统 本次设计是通过CCS和AD15设计的一个模拟风扇控制系统,该系统主要包括独立键盘电路模块.直流稳压电路模块.程序下载电路模块.数码管显示模块.三极管LED ...

  9. MSP432库函数学习笔记-CS

    CS库为clock system即系统时钟配置 此函数库需要系统时钟的基础,可参看我之前的博客MSP432-系统时钟简介 目录 时钟初始化设置 时钟请求模块 获取各时钟源频率 DCO数控时钟源频率设置 ...

最新文章

  1. 快速排序(quick sort) C++
  2. php 单词替换,如何在PHP中替换字符串中的单词?
  3. 直播 | ICML 2021论文解读:对神经网络中层特征复杂度的解释与拆分
  4. restful web_泽西岛的RESTful Web服务
  5. jQuery选择元素
  6. 绿盟漏洞扫描_主机安全漏洞解决方案
  7. STM32工作笔记005---STM32芯片解读
  8. 使用 YARD Stick One 进行重放信号
  9. Windows XP声卡驱动正常,丢失声音服务的解决
  10. 日本家用电器技术标准及IEC对照介绍
  11. typedef的使用详解
  12. 文件被占用?系统自带的“资源监视器(resmon)”也能帮你找到占用它的真凶
  13. 微信小程序 设置微软雅黑字体
  14. MHA-结合MySQL半同步复制高可用集群(Centos7)
  15. linux iptables源ip替换,Linux更改源IP地址的传入流量
  16. 包头新松机器人_煤矿机器人现状及发展方向
  17. optimizeinplace
  18. vue3本地图片加载不出来,解决方法
  19. 离散数学-图论知识总结(修改版)
  20. 新手必备pr 2021快速入门教程「十」PR基础视频调色

热门文章

  1. linux配置网关提示网络不可达
  2. 让网页更美观(css3新特性)
  3. c++画蛋糕_【题解】生日蛋糕-C++
  4. 14期《梅花香自苦寒来》12月刊
  5. 3ds Max人物女性角色模型建模教程
  6. drx功能开启后_KZ正式更名为DRX,LCK将解锁全部选手的“第一视角观赛”功能 | 电竞头条...
  7. Java实现稳定婚姻问题
  8. 关于mysql数据库误删除后的数据恢复操作说明
  9. Appium踩坑总结--解决方法
  10. 清代黄自元 间架结构92法的现代文注释