This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430I2021 DCO 校准

Guru**** 2524460 points
Other Parts Discussed in Thread: MSP430I2021, MSP430G2553

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1067547/msp430i2021-dco-calibration

《线程》中讨论的其他部件:MSP430I2021MSP430G2553

大家好,

我有一个基于 MSP430I2021的项目,它没有外部时钟源,晶体或示波器,所以我需要使用 DCO。

 我正在使用 CCS v7。

我还想使用计时器模块来发生1毫秒中断。 我的代码如下:

#include <MSP4C.h>

void board_init(void);
void initTimer_A(void);
void Blynk();


易失性无符号 int TimerCnt;

主无效(无效){

Board_init();
initTimer_a();
_enable_interrupt ();

for (;;){
Blynk();
}
}

void board_init()

WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

/* DCO = 16.384MHz
* MCLK = 16.384MHz
* SMCLK = 1.024MHz
* ACLK = 32KHz
**
CSCTL1 =(DIVM0 | DIVS2);

P2DIR |= BIT0;
}

Blynk()无效

IF (TimerCnt = 1000)

P2OUT ^= BIT0;
TimerCnt = 0;
}
}

使 initTimer_A 无效(无效)

/*设置1ms 计时器中断*/
TACCTL0和=~CCIE;
TACR0 = 0;//初始时,停止计时器
TACTL0 = CCIE;
TACR0 = 1000-1;
TACTL = tassel_2 + ID_0 + MC_1;//选择 SMCLK,SMCLK/1,UP 模式
}

//计时器 ISR
#pragma 矢量= TIMER0_A0_Vector
中断无效计时器_a_CCR0_ISR (无效)

TimerCnt++;
}

 

当此代码运行时,LED 闪烁速度超过1秒。 我认为 DCO 校准错误,但我不理解如何校准 DCO。  

我找到了一些像 slaa336这样的文档,但  它们是 msp430g2553或 f 系列的写。 430i2021没有 DCOCTL 或 BCSCTL 寄存器。  

我在下面找到了代码,但我不理解什么是“TLC_ADDRESS_ORT_解 析”?

/*校准参考*/
REFCAL1 =*(TLC_ADDRESS_ORT_parse + TLL_CAL_REFCAL1);
REFCAL0 =*(TLL_ADDRESS_ORT_parse + TLL_CAL_REFCAL0);

/*校准 DCO */
CSIRFCAL =*(TLV_ADDRESS_ORT_SAME + TLV_CAL_CSIRFCAL);
CSIRTCAL =*(TLV_ADDRESS_ORT_SAME + TLV_CAL_CSIRTCAL);
CSRFCAL =*(TLL_ADDRESS_ORT_SAME + TLL_CAL_CSRFCAL);
CACERTTM =*(TLC_ADDRY_FOR _SAME + TLL_CAL_CACERTTM);

 

如何校准 DCO?

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我看了这一部分的代码示例(slac676),它明确声明 TLC_ADDRY_ORT_parse:

        /* Calibration section
         * Check for the BORIFG flag in IFG1. Execute calibration if this was a BORIFG.
         * Else skip calibration
         */
        if (IFG1 & BORIFG)
        {
            /* Perform 2's complement checksum on 62 bytes of TLV data */
            unsigned int checksum = 0;
            unsigned char *TLV_address_for_parse = ((unsigned char *)TLV_START);
            unsigned int *TLV_address_for_checksum = ((unsigned int *)TLV_START + 1);
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    您可以参考示例代码。

    https://dev.ti.com/tirex/explore/node?node=AFUazFWgyXvgSsrNSU8MUA__IOGqZri__LATEST&search=MSP430I2021

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    时钟距离有多远? 1ms 是1024个刻度,而不是1000 (3%)。

    从上述 Allen 示例中获取 LOW_LEVE_INIT 函数。 检查您的 ROSC 电阻器(已完成)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这就是我要找的,谢谢。