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.

[参考译文] MSP430G2333:使用32KHz 手表晶体进行 DCO 校准

Guru**** 2560390 points
Other Parts Discussed in Thread: MSP430G2333

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/601654/msp430g2333-dco-calibration-with-32khz-watch-crytal

器件型号:MSP430G2333

你(们)好

我使用的是 msp430g2333、并尝试使用32KHz 晶振校准 DCO。 但我的代码似乎不执行任何操作。 我出了什么问题? 谢谢

此致

James

int main (void){
initialIoes();

/*等待晶振稳定*/
_DELAY_CYCLES (1000000);


DCOCalibrate (DCO_CAL_8MHZ);

//BCSCTL1 |= CALBC1_8MHZ;//将校准率信息复制到寄存器
中// DCOCTL |= CALDCO_8MHZ;//将校准率信息复制到寄存器中

while (1){
LED2_HIGH ();
delay_ms (1000);
LED2_LOW ();
delay_ms (1000);

}
} 
#include "DCOCalibration.h"


void DCOCalibrate (unsigned int data)
{
无符号 int 比较、Oldcapture = 0;
unsigned char Old_BCSCTL1;
unsigned int Old_TACCTL0;
unsigned int Old_TACTL;

OLD_BCSCTL1 = BCSCTL1;//进行备份
OLD_TACCTL0 = TACCTL0;//进行备份
OLD_TACTL = TACTL;//进行备份

BCSCTL1 |= DIV_3;// ACLK = LFXT1CLK/8
TACCTL0 = CM_1 + CCIS_1 + CAP;// CAP、ACLK
TACTL = tassel_2 + MC_2 + TACLR;// SMCLK、CONT 模式、清除

while (1){
while (!(CCIFG 和 TACCTL0)); //等待捕获发生
TACCTL0 &=~CCIFG; //捕获发生,清除标志
比较= TACCR0; //获取捕获的电流 SMCLK
比较=比较- Oldcapture;// SMCLK 差异
Oldcapture = TACCR0; //保存捕获的电流 SMCLK

if (data == Compare){
中断;//如果相等,则保留"while (1)
"}
否则、如果(data < Compare){
DCOCTL--; // DCO 太快,减慢它的速度
如果(DCOCTL = 0xFF) // DCO 是否滚入?
IF (BCSCTL1 & 0x0F)
BCSCTL1---; //选择下部 RSEL
}
否则{
DCOCTL++; // DCO 太慢,加速它
如果(DCOCTL = 0x00) // DCO 是否回滚?
如果((BCSCTL1 & 0x0F)!= 0x0F)
BCSCTL1++; //选择更高的 RSEL
}
}
TACCTL0 = Old_TACCTL0; //恢复寄存器
TACTL = OLE_TACTL; //恢复寄存器
BCSCTL1 = Old_BCSCTL1; //恢复寄存器
} 
//DOC 校准常数
#define DCO_CAL_500kHz122// 122 * 4096 = 499.7KHz
#define DCO_CAL_1MHz244// 244 * 4096 = 0.999MHz
#define DCO_CAL_2MHz488// 488 * 4096 = 1.999MHz
#define DCO_CAL_8MHZ1953//* 4096 = 129930MHz #define DCO_30MHz #2930MHz


450// 450 * 4096 = 1.843200MHz,适合使用 UART 

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

    执行期间的 DCOCalibrate 是更改 DCOCTL 和 BSCTL1。 为什么在计算结束后再次更改 BSCTL1值(更改为 OLE_BSCCTL1)?

    为此、请使用 TI 开放源码示例、该示例的工作效率为100%。

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

    我是要将 ACLK 时钟分频器恢复为1、但是...

    TI 开源代码在哪里? 我用谷歌搜索了它,但没有找到任何东西。

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

    在器件页面(http://www.ti.com/product/MSP430G2333)上有工具和软件选项卡、其中包含 MSP430G2x53、MSP430G2x33、MSP430G2x13、MSP430G2x03代码示例(修订版 I)(http://www.ti.com/lit/sw/slac485i/slac485i.zip)。 在 zip 内有 msp430g2xx3_DCO_flashcal.c

    TI 开源示例将写入闪存校准值(在信息 A 段中恢复 DCO)。 如果您不需要(写入闪存)、它可以像在您的示例中一样正常工作。  

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

    再次感谢

    不知道"工具与软件"选项卡中有代码示例、将来会经常使用此代码。 谢谢!