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.

[参考译文] MSP430FR58891:振荡器故障

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/567359/msp430fr58891-oscillator-fault

器件型号:MSP430FR58891
主题中讨论的其他器件: MSP430F2272MSP430FR5969

我正在使用具有 msp430fr58891的新电路板。 我不断遇到振荡器故障。 在我要求 PCB 设计人员将晶体移到更靠近芯片的位置之前、我希望有人仔细检查我的代码。 LFx 引脚是悬空的、我们已要求在下一个版本中将其终止。 第4.6节提供了有关未使用引脚的建议、但未提供有关未使用 LFx 引脚的建议、是否应将其连接到 VSS?

那么、我的代码中是否有任何错误会导致 SFRIFG1_bit.OFIFG 中的 OSC 故障?

我已经进行了多次更改、试图纠正、但没有什么帮助。

我将 MCLK 和 SMCLK 切换到以4和16MHz 频率运行的内部 DCO 、但这没有帮助。

我增加了 HFDRIVE、但又没有增加。

我的 LaunchPad 演示板具有5969、但 DCO 有同样的问题(LaunchPad 没有为 HFX (XT2)安装晶体)。

静态空 Start_XT1 (void){
uint16_t i;
uint16_t status;

CSCTL0 = 0xA500;//PWD GAA
// CSCTL1 = 0x0006;//DC0范围选择:4MHz GAA
CSCTL1 = 0x0048;//DC0范围选择:16MHz GAA
CSCTL2 = 0x0055;//ACLK=LFXT (或 VLOCLK)、SMCLK=HFXT (或 DCOCLK)、MCLK=HFXT (或 DCOCLK) GAA
// CSCTL2 = 0x0033;//ACLK=LFXT (或 VLOCLK)、SMCLK=DCOCLK、MCLK=DCOCLK GAA
// CSCTL3 = 0x0000;//ACLKDIV=1、SMCLKDIV=1、MCLKDIV=1 GAA
CSCTL3 = 0x0011;//ACLKDIV=1、SMCLKDIV=2、MCLKDIV=2 GAA
// CSCTL4 = 0x0000;//HFXT、LFXT:HFXTDRIVE= 00、HFFREQ= 00 0-4MHz 5969 GAA
// CSCTL4 = 0x0800;//HFXT、LFXT:HFXTDRIVE= 00、HFFREQ= 01 8-16MHz GAA
// CSCTL4 = 0x4800;//HFXT、LFXT:HFXTDRIVE= 01、HFFREQ= 01 8-16MHz GAA
// CSCTL4 = 0x8800;//HFXT、LFXT:HFXTDRIVE= 10、HFFREQ= 01 8-16MHz GAA
CSCTL4 = 0xC800;//HFXT、LFXT:HFXTDRIVE= 11、HFFREQ= 01 8-16MHz GAA
CSCTL5 = 0x0080;//LFXT&HFXT FaultCntrEnable:HFXT 故障标志被启用
// CSCTL6 = 0x0000;//MODCLK、SMCLK、MCLK、ACLK 请求使能:全部被禁用
CSCTL6 = 0x000F;//MODCLK、SMCLK、MCLK、ACLK 请求使能:全部被使能

PJSEL1_BIT.PJSEL1_6 =0;// msp430fr58891 64引脚:HFXOUT PJ.7引脚54 HFXIN PJ.6引脚55
PJSEL0_bit.PJSEL0_6 =1;

/do{
SFRIFG1_bit.OFIFG = 0;//清除 OSC 故障标志 IFG1_bit.OFIFG = 0;
for (i = 0;i < 1000;++I){dumme++;};
} while (SFRIFG1_bit.OFIFG);//如果仍然设置 IFG1_bit.OFIFG,则不要继续

状态= 1;

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

    当被配置为 LFXIN/OUT 时、LFx 引脚一定不能被使用(请见表1-4的脚注1)。

    OFIFG 标志只报告至少一个 LFXTOFFG 或 HFXTOFFG 被置位。 您也必须清除这些标志(并确保在未连接任何设备时不尝试使用 HFXT 或 LFXT)。

    所有 CSCTL 寄存器的值都是错误的。 (当我看到有人使用魔术编号而不是正确的符号时、我会假设这一点。)

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

    谢谢你。  我们不使用 LFx、并将引脚保留为 GPIO 默认状态。

    1.2.1系统复位后的器件初始条件
    BOR 之后、初始器件条件为:
    •RST/NMI 引脚配置为复位模式。 有关配置的详细信息、请参阅第1.7节
    RST/NMI 引脚。
    •I/O 引脚被切换至数字 I/O 一章中描述的输入模式。

    1.6未使用引脚的连接
    表1-4列出了所有未使用引脚的正确端接。 第54页

    Px.0至 Px.7打开开关至端口功能、输出方向(PxDIR.n = 1)

    12.3.1复位后的配置
    BOR 复位后、所有端口引脚均为高阻抗、并具有施密特触发器及其模块功能
    以防止交叉电流。 应用必须初始化所有端口引脚、包括未使用的引脚
    (第12.3.2节)作为输入高阻抗、具有下拉电阻的输入、具有上拉电阻的输入、输出高电平或输出低电平
    根据应用需求、相应地配置 PxDIR、PxREN、PxOUT 和 PxIES。

    是的,这不是令人困惑的…

    在我的初始化例程结束时、HFXTOFFG 和 LFXTOFFG 在 CSCTL5中被清零。 因此、我定期测试 SFRIFG1、以查看  OFIFG 标志是否被置位并将其清零。 我还将开始清除 HFXTOFFG。

    我使用了《msp430fr58xx 系列指南》手册来确定 CSCTL 的设置、如果设置错误、TI 需要更新手册。 希望其他人也能看到这一点、并对照手册查看我的设置。

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

    是的,这不是令人困惑的…

    您引用的三个部分是正确和一致的。 问题是什么?

    我使用了《msp430fr58xx 系列指南》手册来确定 CSCTL 的设置

    查看 MSP430‍fr58891.h 头文件、例如:

    (笑声)
    /* CSCTL2控制位*/...
    
    #define SELM__LFXTCLK (0x0000)/* MCLK 源选择 LFXTCLK */
    #define SELM__VLOCLK (0x0001)/* MCLK 源选择 VLOCLK */
    #define SELM__LFMODCLK (0x0002)/* MCLK 源选择 LFMODOSC */
    #define SELM__LFMODOSC (0x0002)/* MCLK 源选择 LFMODOSC (传统)*/
    #define SELM__DCOCLK (0x0003)/* MCLK 源选择 DCOCLK */
    #define SELM__MODCLK (0x0004)/* MCLK 源选择 MODOSC */
    #define SELM__MODOSC (0x0004)/* MCLK 源选择 MODOSC (传统)*/
    #define SELM__HFXTCLK (0x0005)/* MCLK 源选择 HFXTCLK */...
    
    #define SELs__LFXTCLK (0x0000)/* SMCLK 源选择 LFXTCLK */
    #define SELs__VLOCLK (0x0010)/* SMCLK 源选择 VLOCLK */
    #define SELs__LFMODCLK (0x0020)/* SMCLK 源选择 LFMODOSC */
    #define SELs__LFMODOSC (0x0020)/* SMCLK 源选择 LFMODOSC (传统)*/
    #define SELs__DCOCLK (0x0030)/* SMCLK 源选择 DCOCLK */
    #define SELs__MODCLK (0x0040)/* SMCLK 源选择 MODOSC */
    #define SELs__MODOSC (0x0040)/* SMCLK 源选择 MODOSC (传统)*/
    #define SELs__HFXTCLK (0x0050)/* SMCLK 源选择 HFXTCLK */...
    
    
    #define SELA_LFXTCLK (0x0000)/* ACLK 源选择 LFXTCLK */
    #define SELA_VLOCLK (0x0100)/* ACLK 源选择 VLOCLK */
    #define SELA_LFMODCLK (0x0200)/* ACLK 源选择 LFMODOSC */
    #define SELA_LFMODOSC (0x0200)/* ACLK 源选择 LFMODOSC (传统)*/
    ... 

    (但对于向后兼容性、也有许多不那么有用的符号。)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Clemens、请不要回复我的任何其他帖子。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    仍然希望有人检查我的时钟初始化软件并提供一些建议。 抱歉、我没有使用定义的宏、这是我的第一个 MSP430。 我继承了之前供应商的设计、客户希望将其从 msp430f2272移植到58891。 在2272上运行时、此代码不产生 OSC 故障。 我有一条意见要在 CSCTL5中清除 HFXTOFFG。 我在初始化时执行该操作、但现在当我发现 SFRIFG1_bit.OFIFG = 1时、也在主循环中清除它。 这无法解决问题。

    if (SFRIFG1_bit.OFIFG = 1){
    SFRIFG1_bit.OFIFG = 0;
    CSCTL5_bit.HFXTOFFG = 0;//清除 HFXT OSC 故障标志
    CSCTL5_bit.LFXTOFFG = 0;//清除 LFXT OSC 故障标志
    }  

    我尝试了改变多个方面、其中一个是将 MCLK 和 SMCLK 设置为 DCO。 当然、这不会产生 OSC 故障、但会产生这样的故障吗? 我还有一个带有 msp430fr5969的 LaunchPad 演示板、并在那里获得相同的结果。 除此之外、我的代码运行正常、仍然真的讨厌 OSC 故障。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、LFXT 正在设置故障。 我已关闭 LFXT 示波器故障、因此我认为它无法设置故障、但确实如此。 由于我不使用 LFXT、现在我想忽略它。 但我也发现这个论坛是:

    TI E2E 论坛:振荡器故障标志永远不会在430F5659上清除

    •TI 应该在用户指南中对此更加明确。 这真的很难找到、甚至不是很清楚。

    此问题似乎与 BAKDIS 有关
    POR 之后、振荡器由 Vbat 供电、并且 XT1操作不可修改。
    BAKDIS 会更改 VCC 的功率并允许更改模块的运行。

    测试 BAKCTL |= BAKDIS 后、似乎足以解决该问题、但论坛和应用手册建议也清除 LOCKBAK。