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.

[参考译文] MSP430G2553:从SMCLK获得10MHz

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1092504/msp430g2553-getting-10mhz-from-smclk

部件号:MSP430G2553

#include <msp430.h>

void main(void)
{
    WDTCTL = WDTPW + WDTHOLD;  // Stop WDT
    BCSCTL1 = CALBC1_8MHZ;     //20201127   1M -> 8M
    DCOCTL  = CALDCO_8MHZ;
    BCSCTL2 |= DIVS_1;         //20201127   SMCLK / 2 = 4MHz

    P1SEL |= BIT4;
    P1DIR |= BIT4;
    for(;;);
}

我无法将 SMCLK设置为4MHz,

我的频率为10MHz。

我使用了其他的启动板,我得到了4MHz。

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

    你(们)好

    您获得的是哪种设备10MHz? 您可以在调试模式下检查寄存器配置,并尝试其他频率,以确定它是否不是确切的频率。  

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

    您好,Allen:

    我有检查寄存器 配置。

    此寄存器 配置在我获得10MHz时

    DCOCTL = 0xFF,BCSCTL1 = 0xBF, BCSCTL1 = 0x02, BCSCTL3 = 0x04

    我得到了4MHz

    我使用了相同的代码和不同的MSP430G2553固定板。

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

    您好,

    DCO的所有校准值都存储在信息存储器中。  校准值将复制到寄存器。 您是否执行了任何操作来更改信息存储器? 其他频率不正常?

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

    你好,Allen

    我尝试 了500kHz,1MHz,4MHz,8MHz,16MHz,

    如果我已经设置了BCSCTL1, DCOCTL,SMCLK将设置为20MHz。
    如果没有设置,我将得到1.1MHz。

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

    您好,Chen:

    您能否读取信息存储器以检查它们是否已修改? 当您在不同的频率配置中设置BSCTL1和DCOCTL时,所有寄存器配置是否相同(20MHz)?   数据表的表11.显示了校准值存储地址。 不同的频率应不同。  

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

    您好,Allen:

    我已经检查 了BSCTL1  和DCOCTL,

    所有寄存器均设置为 20MHz。

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

    您好,Allen:

    我得到 了正确 的频率。

    #include <msp430g2553.h>
    
    void main(void)
    {
        WDTCTL = WDTPW + WDTHOLD;  // Stop WDT
    
        BCSCTL1 = 0x8D;
        DCOCTL  = 0x86;
        BCSCTL2 = 0x02;
        BCSCTL3 = 0x05;
    
        P1SEL |= BIT4;
        P1DIR |= BIT4;
        for(;;);
    }
    

    但我仍然感到困惑,

    为什么 BCSCTL1 = CALC1_8MHZ;和DCOCTL = CALDCO_8MHZ;将SMCLK设置为 不正确的频率?

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

    > DCOCTL = 0xFF,BCSCTL1 = 0xBF, BCSCTL1 = 0x02, BCSCTL3 = 0x04

    正如Allen指出的那样,这些设置强烈建议您已清除InfoA中的校准常量。

    是否可以将内存内容发布在0x10F8-10FF位置?

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

    您好,Bruce:

    很抱歉,我不知道在哪里可以找到 0x10F8-10FF位置的内存内容,

    但我找到了。

    这是否正确?

    #ifndef __DisableCalData
    
    SFR_8BIT(CALDCO_16MHZ);                       /* DCOCTL  Calibration Data for 16MHz */
    SFR_8BIT(CALBC1_16MHZ);                       /* BCSCTL1 Calibration Data for 16MHz */
    SFR_8BIT(CALDCO_12MHZ);                       /* DCOCTL  Calibration Data for 12MHz */
    SFR_8BIT(CALBC1_12MHZ);                       /* BCSCTL1 Calibration Data for 12MHz */
    SFR_8BIT(CALDCO_8MHZ);                        /* DCOCTL  Calibration Data for 8MHz */
    SFR_8BIT(CALBC1_8MHZ);                        /* BCSCTL1 Calibration Data for 8MHz */
    SFR_8BIT(CALDCO_1MHZ);                        /* DCOCTL  Calibration Data for 1MHz */
    SFR_8BIT(CALBC1_1MHZ);                        /* BCSCTL1 Calibration Data for 1MHz */
    
    #endif /* #ifndef __DisableCalData */

    #define CAL_DCO_16MHZ          (0x0002)       /* Index for DCOCTL  Calibration Data for 16MHz */
    #define CAL_BC1_16MHZ          (0x0003)       /* Index for BCSCTL1 Calibration Data for 16MHz */
    #define CAL_DCO_12MHZ          (0x0004)       /* Index for DCOCTL  Calibration Data for 12MHz */
    #define CAL_BC1_12MHZ          (0x0005)       /* Index for BCSCTL1 Calibration Data for 12MHz */
    #define CAL_DCO_8MHZ           (0x0006)       /* Index for DCOCTL  Calibration Data for 8MHz */
    #define CAL_BC1_8MHZ           (0x0007)       /* Index for BCSCTL1 Calibration Data for 8MHz */
    #define CAL_DCO_1MHZ           (0x0008)       /* Index for DCOCTL  Calibration Data for 1MHz */
    #define CAL_BC1_1MHZ           (0x0009)       /* Index for BCSCTL1 Calibration Data for 1MHz */

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

    我在CCS调试器中使用内存浏览器:

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

    您好,Bruce:

    我找到了。

    我 的内存内容 位于0x10F8-10FF所有0xFF位置,

    如何  恢复 这些设置?

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

    可以重新计算这些值,但这并不是微不足道的。

    如果您的主板上有一个32kHz晶体,则可以使用示例msp430g2xxS 3_DCO_flashcal.c来执行此操作:

    https://dev.ti.com/tirex/explore/node?node=APXSlUhYWYfUi-lBT1UjXA__IOGqZri__LATEST

    您使用的是DIP (插槽式)封装还是您的设备已焊接? 如果是DIP, 只需更换设备可能更简单/更快捷。

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

    谢谢 Bruce,

    我会尝试一下。