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

发布者:水云间梦最新更新时间:2022-10-11 来源: csdn关键字:MSP430  XT1  时钟源 手机看文章 扫描二维码
随时随地手机看文章

当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频率区间选择参考

MSP430 5xx/6xx 以REFO或XT1为时钟源的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输入, 启动DCO

    UCSCTL3 |= SELREF__REFOCLK; // DCO的输入参考时钟源 FLLRef = REFOCLK = 32768 Hz

 

    __bis_SR_register(SCG0);    // 禁止 FLL 控制

 

    UCSCTL0 = 0x0000;           // DCO=0, MOD=0

    UCSCTL1 = DCORSEL_0;        // DCO 范围: 0.2MHz - 0.7MHz

 

    UCSCTL2 = 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 Hz

    UCSCTL4 = 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输入, 启动DCO

    UCSCTL3 |= SELREF__XT1CLK;            // DCO的输入参考时钟源 FLLRef = XT1CLK = 32768 Hz

 

    __bis_SR_register(SCG0);              // 禁止 FLL 控制

 

    UCSCTL0 = 0x0000;                     // DCO=0, MOD=0

    UCSCTL1 = DCORSEL_1;                  // DCO 范围: 0.36MHz - 1.47MHz

 

    UCSCTL2 = 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 Hz

    UCSCTL4 = 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  XT1  时钟源 引用地址:MSP430 5xx/6xx 以REFO或XT1为时钟源的DCO编程实例

上一篇:MSP430 5xx/6xx 定时器A增计数模式编程实例
下一篇:MSP430 5xx/6xx 外部晶振XT1(32.768kHz)编程实例

推荐阅读最新更新时间:2024-11-12 23:15

一种多通道ADC采样板系统电路设计
  ADC板的设计从通道上来划分的话,可以分为单通道ADC板和多通道ADC板,除去有效位数、动态范围、最大采样率以及输入带宽等一些基本参数以外,多通道ADC板相对于单通道ADC板来说,往往还要衡量通道间幅度一致性和通道间相位一致性,这也正是多通道ADC板设计的一个难点。为了满足四路ADC之间通道间幅度一致性和通道间相位一致性的指标要求,首先需要将四路ADC芯片的采样时钟做到尽可能同步,实现四路ADC芯片对输入中频信号的同步采集。为此,本设计采取了把外部输入采样时钟通过同一时钟驱动芯片分发后送给四路ADC芯片作为同步采样时钟的方式,在时序上保证了四路ADC芯片采样时钟的同步。    时钟分发单元电路设计   时钟分发单元需要差分时
[电源管理]
一种多通道ADC采样板系统电路设计
基于MSP430F149电机保护算法研究
目前,我国高压电动机的保护主要有机电式和集成电路两种,但都存在着诸多弊病,不能很好地保护电动机。其中,异步电动机的机电式保护,主要以电流增大作为判据,保护原理粗略,对断相等严重不对称故障,由于一般不出现显著的电流增大,从而使保护装置难以及时动作,造成事故扩大;集成电路式保护虽在保护原理上有所改善,但其保护特性一般无法与电动机热曲线实现较好配合,常发生拒动或误动,严重的甚至烧毁电动机。因此,研究电机保护算法具有重要的意义。 1 电动机故障分析 电动机的故障形式可分为对称和不对称两类。 对称故障包括过载、堵转和三相短路等,这类故障对电动机的损坏主要是热效应和机械应力,使绕组发热甚至损坏。其主要特征是三相仍基本对称但
[单片机]
基于<font color='red'>MSP430</font>F149电机保护算法研究
MSP430FR6972驱动模块模组调试
1. 说是会进入晶振的中断 #pragma vector=UNMI_VECTOR 2. 打了断点没进入,猜测是串口被世龙修改后,串口波特率不对,重新改回原来的,AT+NATSPEED?一直发送这个命令,似乎是查询串口波特率的?是的 3. 测试发现无法获取到IP地址,换了两个卡解决 4. 刚开始查询到的IMEI和模组上面的不一样 所以出现问题 重新设置下IMEI即可 AT+NTSETID=1,869029030973613 开始收发数据
[单片机]
<font color='red'>MSP430</font>FR6972驱动模块模组调试
MSP432P401R时钟系统
MSP432P401R时钟系统 MSP432的时钟模块(CS),个人理解msp432最特色的功能应该是超低功耗和高性能的组合。432系列的时钟系统主要有三个方面: 1、硬件时钟–时钟源;    基础 2、时钟映射–控制转换;   转换 3、时钟设置–软件控制;   配置 一、时钟源: 1.1 LFXTCLK:外部低频时钟源,一般为32.768kHz晶振或者外部时钟 1.2 VLOCLK:内部低功耗低频时钟,9.4kHz 1.3 REFOCLK :内部低功耗低频时钟,32.768kHz或128kHz 1.4DCOCLK:内部可调数字时钟, 典型值3MHz 1.5 MODCLK:内部低功耗时钟,典型值25MHz 1.6 HFXTC
[单片机]
msp430程序跑飞之解决方法
msp430程序跑飞之解决方法 1.中断或主函数中有死循环,现象是程序停在某处。 2.堆栈溢出。现象是程序跑飞。 解决办法: A.看中断有没有用 _EINT(),引起中断嵌套. B.Project--Options--General Options---Stack/Heap 将Stack size设置大一些。 3.中断耗时太长,刚出中断又进去了.这时的现象是程序一直在中断中执行,回不到主函数。 4.检查CPU的电源是不是稳定,msp430在要保证程序正常运行,需保证Vcc大于1.8V。当电压低至0.8V时,程序仍有可能执行。这时的现象是PC指针乱飞,有复位,死机,停在中断,时钟频率发生变化等现象。 5.程序编译没问题,下载程序后
[单片机]
MSP430数码管的使用Ⅰ
首先应该了解数码管及其工作原理。了解你使用的是共阴还是共阳数码管,其次了解数码管的段选位选。 接下来是一个例程 #include msp430f149.h typedef unsigned char uchar; #define wei_h P5OUT |= BIT5 #define wei_l P5OUT &= BIT5 #define duan_l P6OUT &= ~BIT6 #define duan_h P6OUT |= BIT6 uchar table = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,
[单片机]
MSP430单片机实现微波成像系统的扫描控制与数据采集
引言 ----在无源微波遥感中,微波辐射计是一种获取场景微波特征的重要手段。微波辐射计通常是一部超外差接收机,通过接收被测场景在一定频带内的电磁辐射,转换为输出的低频信号,来表征被测场景的地物信息。利用微波辐射计来探测、接收被测目标、背景在微波波段的电磁辐射,并把接收到的辐射信号按比例用伪彩色图像直观地显现出来的系统称为微波辐射成像系统。 ----微波辐射成像系统要求在恶劣的环境和天气下长期稳定地进行天线扫描成像,所以要求系统设备用于天线扫描控制及数据采集的电路尽量简单、稳定。基于以上的要求,采用了TI公司所生产的MSP430F149型超低功耗FLASH单片机作为这套系统的从机部分,该单片机有60KB的FLASH存储器和2KB
[单片机]
MSP430与I2C总线接口技术的研究
引言 MSP430单片机自从2000年问世以来,就以其功能完善、超低功耗、开发简便的特点得到了许多设计人员的青睐。MSP430与传统的51单片机在结构上有很大的区别。其中之一就是:在MSP430的外围接口电路中,没有提供像51那样控制外设读、写、地址锁存信号的硬件电路。与这种接口电路相适应,MSP430更倾向使用I2C总线以及ISP等基于串行接口的外围器件。另一方面,随着I2C技术的发展和成熟,其硬件结构简单、高速传输、器件丰富等特点使该类器件的应用越来越广泛。因此研究新型单片机MSP430与I2C总线接口技术有着重要的意义。本文针对这一问题进行研究,分析研究了MSP430与I2C总线接口的原理和方法,提出了高效的接口方法,介
[单片机]
<font color='red'>MSP430</font>与I2C总线接口技术的研究
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved