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.

[参考译文] MSP430FR5969:时钟系统选择 MCO 而不是 HFXT;发生故障时持续选择 HFXT

Guru**** 2448780 points
Other Parts Discussed in Thread: MSP430FR5969

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1501057/msp430fr5969-clock-system-is-selecting-mco-instead-of-hfxt-hfxt-continually-in-fault

器件型号:MSP430FR5969

工具/软件:

大家好!

我见过这方面的几个线程、但它们都回到了"读取 TI 示例代码"、然后静默...

简而言之、我有一个 MSP430FR5969、其16MHz 晶体(非振荡器)连接到 HFXT 引脚。 启用 HFXT 时、我总是最终 从 MODCLK (~4.8MHz)运行 SMCLK 和 MCLK、并且 HFXTOFFG 永久设置为1 (不能清除)。  

代码:

    PJSEL0 |= BIT4 | BIT5 | BIT6 | BIT7;      // For XT1 and XT2

    // Disable the GPIO power-on default high-impedance mode to activate
    // previously configured port settings
    PM5CTL0 &= ~LOCKLPM5;

    CSCTL0_H = CSKEY >> 8;                    // Unlock CS registers
    CSCTL1 = DCORSEL | DCOFSEL_4;             // Set DCO to 8MHz
    CSCTL2 = SELA__VLOCLK | SELS__HFXTCLK | SELM__HFXTCLK;
    CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1;     // Set all dividers to 1
    CSCTL4 = HFXTDRIVE_3 | HFFREQ_2;
    CSCTL4 &= ~(HFXTOFF);
    CSCTL5 &= ~ENSTFCNT1;
    do
    {
      CSCTL5 &= ~(LFXTOFFG | HFXTOFFG);       // Clear XT1 and XT2 fault flag
      SFRIFG1 &= ~OFIFG;
    }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag
    CSCTL0_H = 0;                             // Lock CS registers

与 TI 示例(msp430fr69xx_cs_04.c)相比、我的更改如下:

第8行-将 DCO 更改为16MHz。 这样可以正常工作、如果我从 DCO 运行所有内容、则没有问题。

第9行-选择了 HFXTCLK 而不是 DCOCLK 来驱动 MCLK、并在 HFXT 不可用时回退到 DCOCLK。 为 ACLK 选择了 VCOCLK、因为我没有 LFXT。

第11行-根据需要删除了 LFXTDRIVE 设置。 添加了 HFFREQ 设置、TI 的示例似乎完全跳过该 设置(使用8MHz 晶体将其设置在16 - 24MHz 范围内、这根本不应该工作)。

第12行-仅强制 HFXT 进入常开模式、因为未安装 LFXT。

第13行-禁用 LFXT 启动计数器、因为没有 LFXT。

这些似乎都是相当明智的改变。 由于 LFXT 不存在、因此几乎所有这些都是必需的。

运行此代码只是会导致 SMCLK 和 MCLK 在~4.8MHz 下运行、并且 结束时的循环(等待故障标志清除)永远不会完成。

有什么想法吗? 我很难责怪硬件,这是永远可能的,但其他人似乎已经发布了类似的问题,然后找到了一个解决办法(或至少沉默).

提前感谢!

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

    "嗯,那我就走了。" 通常情况下、我发布了问题并立即找到解决方案。 只需要显式设置 LFXTOFF 标志(第11行)、因为即使启动计时器被禁用、LFXT 被标记为始终处于故障状态。

    如果 TI 可以更新他们的示例代码以实际设置晶体频率(也是上面第11行)、这仍然是一个不错的选择、因为目前这种设置并不完全正确。

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

    啊、TI 在回答我自己的问题时似乎给了我一个"天才"的成就。 是否有机会使其变为"ID10T"或同等成就、因为问题是我自己的错?

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

    您好 Evan

    感谢您对示例代码的评论。 我会详细检查一下。 谢谢!