⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 set_dco.c

📁 关于MSP430F149的DCO设置子程序
💻 C
字号:
//******************************************************************************
//  MSP-FET430P140 Demo - Setting DCO Clock
//
//  This example shows how to use set the DCO clock using 32768Hz crystal
//
//
//                MSP430F149
//             ---------------
//            |               |
//            |      A0 (P6.0)|<---- Vin
//            |               |
//
//
//  M.Mitchell
//  Texas Instruments, Inc
//  February,2002
//  Built with IAR Embedded Workbench Version: 1.25A
//******************************************************************************
#include          "msp430x16x.h"        // Standard Equations

//Frequecny = 32768/4 * delta
                              
void Set_DCO (unsigned int delta)                           // Subroutine to set DCO
{
  unsigned int Compare, Oldcapture = 0;

  BCSCTL1 |= DIVA_3;                          // ACLK = LFXT1CLK/8
  CCTL2 = CM_1 + CCIS_1 + CAP;                // CAP, ACLK
  TACTL = TASSEL_2 + MC_2 + TACLR;            // SMCLK, cont-mode, clear

  while (1)
  {
    while (!(CCIFG & CCTL2));                 // Wait until capture occurred
    CCTL2 &= ~CCIFG;                          // Capture occurred, clear flag
    Compare = CCR2;                           // Get current captured SMCLK 
    Compare = Compare - Oldcapture;           // SMCLK difference
    Oldcapture = CCR2;                        // Save current captured SMCLK

    if (delta == Compare)
    {
      break;                                  // Break loop
    }
    else if (delta < Compare)           
    {
      DCOCTL--;
      if (DCOCTL == 0xFF)                     // DCO is too fast, slow it down
        if (BCSCTL1 & 0x07)
          BCSCTL1--;                          // DCO role under?, Sel lower RSEL
        else
          break;                              // Error condition, break loop
    }
    else
    {                      
      DCOCTL++;                               // DCO is too slow, speed it up
      if (DCOCTL == 0x00) 
        if ((BCSCTL1 & 0x07) != 0x07) 
          BCSCTL1++;                          // DCO role over? Sel higher RSEL
        else
          break;                              // Error condition, break loop
    }
  }
  CCTL2 = 0;                                  // Stop CCR2
  TACTL = 0;                                  // Stop Timer_A
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -