历史上的今天

今天是:2024年10月19日(星期六)

正在发生

2019年10月19日 | TI MSP430 如何使用 DCO 倍频

发布者:CuriousTraveler 来源: eefocus关键字:TI  MSP430  DCO  倍频 手机看文章 扫描二维码
随时随地手机看文章

1、背景:


许久未更新博客,最近由于项目需求,简单使用430做接口,但由于内部默认可使用1MHz的频率无法满足需求;


2、功能:


经查阅手册发现片子支持DCO倍频,频率可以高达16M,经验证满足需求;


3、前提:


需要外接32K晶振作为校正频率;


4、参阅代码如下:


#include


 


// 32KHz/8=4096Hz,由此计算倍频


#define DELTA_1MHZ    244                     // 244 x 4096Hz = 999.4Hz

#define DELTA_8MHZ    1953                   // 1953 x 4096Hz = 7.99MHz

#define DELTA_12MHZ   2930                  // 2930 x 4096Hz = 12.00MHz

#define DELTA_16MHZ   3906                  // 3906 x 4096Hz = 15.99MHz


unsigned char CAL_DATA[8];                  // Temp. storage for constants

volatile unsigned int i;

int j;

char *Flash_ptrA;                           // Segment A pointer

void Set_DCO(unsigned int Delta);


int main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  for (i = 0; i < 0xfffe; i++);             // Delay for XTAL stabilization

  P1OUT = 0x00;                             // Clear P1 output latches

  P1SEL = 0x10;                             // P1.4 SMCLK output

  P1DIR = 0x11;                             // P1.0,4 output


  j = 0;                                    // Reset pointer


  Set_DCO(DELTA_16MHZ);                     // Set DCO and obtain constants

  CAL_DATA[j++] = DCOCTL;

  CAL_DATA[j++] = BCSCTL1;



  Set_DCO(DELTA_12MHZ);                     // Set DCO and obtain constants

  CAL_DATA[j++] = DCOCTL;

  CAL_DATA[j++] = BCSCTL1;



  Set_DCO(DELTA_8MHZ);                      // Set DCO and obtain constants

  CAL_DATA[j++] = DCOCTL;

  CAL_DATA[j++] = BCSCTL1;



  Set_DCO(DELTA_1MHZ);                      // Set DCO and obtain constants

  CAL_DATA[j++] = DCOCTL;

  CAL_DATA[j++] = BCSCTL1;



  Flash_ptrA = (char *)0x10C0;              // Point to beginning of seg A

  FCTL2 = FWKEY + FSSEL0 + FN1;             // MCLK/3 for Flash Timing Generator

  FCTL1 = FWKEY + ERASE;                    // Set Erase bit

  FCTL3 = FWKEY + LOCKA;                    // Clear LOCK & LOCKA bits

  *Flash_ptrA = 0x00;                       // Dummy write to erase Flash seg A

  FCTL1 = FWKEY + WRT;                      // Set WRT bit for write operation

  Flash_ptrA = (char *)0x10F8;              // Point to beginning of cal consts

  for (j = 0; j < 8; j++)

    *Flash_ptrA++ = CAL_DATA[j];            // re-flash DCO calibration data

  FCTL1 = FWKEY;                            // Clear WRT bit

  FCTL3 = FWKEY + LOCKA + LOCK;             // Set LOCK & LOCKA bit



  while (1)

  {

    P1OUT ^= 0x01;                          // Toggle LED

    for (i = 0; i < 0x4000; i++);           // SW Delay

  }

}


// 计算倍频

void Set_DCO(unsigned int Delta)            // Set DCO to selected frequency

{

  unsigned int Compare, Oldcapture = 0;



  BCSCTL1 |= DIVA_3;                        // ACLK = LFXT1CLK/8

  TACCTL0 = CM_1 + CCIS_1 + CAP;            // CAP, ACLK

  TACTL = TASSEL_2 + MC_2 + TACLR;          // SMCLK, cont-mode, clear



  while (1)

  {

    while (!(CCIFG & TACCTL0));             // Wait until capture occured

    TACCTL0 &= ~CCIFG;                      // Capture occured, clear flag

    Compare = TACCR0;                       // Get current captured SMCLK

    Compare = Compare - Oldcapture;         // SMCLK difference

    Oldcapture = TACCR0;                    // Save current captured SMCLK



    if (Delta == Compare)

      break;                                // If equal, leave "while(1)"

    else if (Delta < Compare)

    {

      DCOCTL--;                             // DCO is too fast, slow it down

      if (DCOCTL == 0xFF)                   // Did DCO roll under?

        if (BCSCTL1 & 0x0f)

          BCSCTL1--;                        // Select lower RSEL

    }

    else

    {

      DCOCTL++;                             // DCO is too slow, speed it up

      if (DCOCTL == 0x00)                   // Did DCO roll over?

        if ((BCSCTL1 & 0x0f) != 0x0f)

          BCSCTL1++;                        // Sel higher RSEL

    }

  }

  TACCTL0 = 0;                              // Stop TACCR0

  TACTL = 0;                                // Stop Timer_A

  BCSCTL1 &= ~DIVA_3;                       // ACLK = LFXT1CLK


}


关键字:TI  MSP430  DCO  倍频 引用地址:TI MSP430 如何使用 DCO 倍频

上一篇:MSP430学习笔记-看门狗
下一篇:硬件之路-串行LCD12864之MSP430简单实现

推荐阅读

双方将共同研发解决方案以助力中国在工业及新能源汽车等领域的快速发展 比利时、蒙-圣吉贝尔和中国、北京 – 2018年10月17日 – 高温与长寿命半导体解决方案领先供应商CISSOID和中国碳化硅(SiC)功率器件产业化倡导者泰科天润半导体科技(北京)有限公司(GPT)今日共同宣布:双方已达成战略合作伙伴关系,将共同开展研发项目,推动碳化硅功率器件在...
(文章来源:中科罗伯特机器人学院) 根据输出形式分,可以分为旋转型和直线型(如根据电动机采用的分类。当考虑在工业机器人的应用时,应主要关注电动机的如下基本性能: 1能实现启动、停止、连续的正反转运行,且具有良好的响应特性。2正转和反转时的特性相同,且运行特性稳定,3维修容易,且不用保养。4具有良好的抗干扰能力,且相对于输出来说,体积...
中汽研(天津)汽车工程研究院有限公司(以下简称“工程院”)已选择全球领先的测试与测量供应商罗德与施瓦茨公司(以下简称“R&S 公司”)为其提供完整的整车天线测试(FVAT)系统和支持服务。该系统用于优化整车天线性能和通信性能,验证是否符合无线标准,并确保车辆无线通信系统正常运行。 这些方面对于车联网和自动驾驶等新技术研发和应用至关重要...
集微网消息,今日有网友发现,国内电商已经上架了荣耀本月的几款新品,分别为荣耀Play5活力版、荣耀X30 Max和荣耀X30i,预计其将在本月正式推出。此前荣耀在举办荣耀Magic3系列和荣耀X20发布会时,正式宣布了新一代大屏手机荣耀X20 Max,并表示敬请期待,其发布时间已经相当接近。国内数码博主近日表示荣耀超大屏手机已改名为X30 Max,而非此前官方宣布...

史海拾趣

问答坊 | AI 解惑

现急聘嵌入式软件工程师(1名)

上海星巨通信设备有限公司,是宁波澳普网络通信设备有限公司为进一步发展而在上海新设立的子公司。宁波澳普成立于一九九八年,专业从事网络通信设备、电信设备及配套设备的设计、研发、生产及销售的现代高科技企业。产品主要销往中国、西欧、南美、 ...…

查看全部问答∨

ARM嵌入式WINCE实践教程

ARM嵌入式WINCE实践教程…

查看全部问答∨

串口通信的单片机程序

beep    bit   p3.7                ;蜂鸣器定义         org 00h       jmp main       &nbs ...…

查看全部问答∨

STM32调试笔记—在评估板上DFU STM3210B-EVAL_Demo例程

请教在DFU leave 时报错的原因    1、目的:  将STM3210B-EVAL_Demo  通过DFU更新到 评估板中 演示评估板demo    2、步骤: a 将 um0424 中 Device_Firmware_Upgrade以JTAG 方式下载到评估板中 &nbs ...…

查看全部问答∨

B超电容不良故障维修一例

机型:派尔 SCANNER450 型B超 B超机故障现象:B超开机后,灰阶度及超声边缘有毛刺,其它均正常。 B超机故障分析与检修:通过分析,造成此故障的原因有以下几种:①外界电源有干扰进入B超机内;②显示器故障;③机内电源故障;④其它。针对以上四 ...…

查看全部问答∨

Windows CE下的地图显示引擎的开发与应用.pdf

Windows CE下的地图显示引擎的开发与应用.pdf…

查看全部问答∨

如何将DA0832产生的波形在12864J显示出来

  本人最近做接口课程设计,题目是函数发生器,现在想如何将产生的波形在12864显示,可是查看的代码,都是将图形先转成点阵,可这样不是就不需要da转换器了,直接产生图形就好了,请大家指教下…

查看全部问答∨

SD_FAT

识别SD卡的相关信息,查找SD卡中的文件,读取文件的相关信息。   求教在FAT32搜索某个文件????…

查看全部问答∨

诸神之战在星际争霸1的实现[001]AI游戏的发端

启示录19:12至19:16,那率领众军的,没人知道他的名字。   古希腊创造了至今无人能及的民主政体,为后世留下了光辉灿烂的哲学思想,还有一本记载了诸神欲望、善恶和争战的神话故事。由此,人们找到了一个唯美掩盖血腥的词——诸神之战。   诸 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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