【请教】G2231的DCO能否设置成8M or 16M

2019-03-24 15:26发布

在例程中看到
  BCSCTL1 = CALBC1_1MHZ;                    // Set range
  DCOCTL = CALDCO_1MHZ;

可投文件中为何没有
  CALBC1_8MHZ & CALDCO_8MHZ?  

还请教如何设置~

[ 本帖最后由 mavericklx 于 2011-10-16 13:13 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
13条回答
lyzhangxiang
2019-03-25 18:41
#include "msp430x20x1.h"
#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];               volatile unsigned int i;int j;char *Flash_ptrA;                         void Set_DCO(unsigned int Delta);
void main(void){  WDTCTL = WDTPW + WDTHOLD;                 for (i = 0; i < 0xfffe; i++);            P1OUT = 0x00;                            P1SEL = 0x10;                       P1DIR = 0x11;                           
  j = 0;                                
  Set_DCO(DELTA_16MHZ);                  CAL_DATA[j++] = DCOCTL;  CAL_DATA[j++] = BCSCTL1;
  Set_DCO(DELTA_12MHZ);                       CAL_DATA[j++] = DCOCTL;  CAL_DATA[j++] = BCSCTL1;
  Set_DCO(DELTA_8MHZ);                   CAL_DATA[j++] = DCOCTL;  CAL_DATA[j++] = BCSCTL1;
  Set_DCO(DELTA_1MHZ);                      CAL_DATA[j++] = DCOCTL;  CAL_DATA[j++] = BCSCTL1;
  Flash_ptrA = (char *)0x10C0;              FCTL2 = FWKEY + FSSEL0 + FN1;           FCTL1 = FWKEY + ERASE;                   FCTL3 = FWKEY + LOCKA;                 *Flash_ptrA = 0x00;                      FCTL1 = FWKEY + WRT;                     Flash_ptrA = (char *)0x10F8;              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;                           for (i = 0; i < 0x4000; i++);             }}
void Set_DCO(unsigned int Delta)            {  unsigned int Compare, Oldcapture = 0;
  BCSCTL1 |= DIVA_3;                      TACCTL0 = CM_1 + CCIS_1 + CAP;            TACTL = TASSEL_2 + MC_2 + TACLR;         
  while (1)  {    while (!(CCIFG & TACCTL0));               TACCTL0 &= ~CCIFG;                       Compare = TACCR0;                          Compare = Compare - Oldcapture;            Oldcapture = TACCR0;                  
    if (Delta == Compare)      break;                                    else if (Delta < Compare)    {      DCOCTL--;                              if (DCOCTL == 0xFF)                        if (BCSCTL1 & 0x0f)          BCSCTL1--;                       }    else    {      DCOCTL++;                                if (DCOCTL == 0x00)                          if ((BCSCTL1 & 0x0f) != 0x0f)          BCSCTL1++;                          }  }  TACCTL0 = 0;                            TACTL = 0;                               BCSCTL1 &= ~DIVA_3;                 }
全部代码。

一周热门 更多>

相关问题

    相关文章