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.

[参考译文] MSP430FR5964:为外部时钟振荡器设置 HFXT2

Guru**** 2489685 points
Other Parts Discussed in Thread: MSP430FR2155

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1556282/msp430fr5964-setting-up-hfxt2-for-external-clock-oscillator

器件型号:MSP430FR5964
Thread 中讨论的其他器件:MSP430FR2155

工具/软件:

您好、

我在开发 PCB 上提出了一个 MSP430FR5964IPNR。  我们在 10MHz 处将 HFXT2 与外部 3.3V 时钟振荡器搭配使用。 (请注意,我们最近使用类似的器件 MSP430FR2155 成功实现了这一目标)。  来自振荡器的 10MHz 方波进入器件上的 HFXIN 引脚 74 后看起来正常。  器件不会清除警报标志 HFXTOFFG 并切换到 HFXT2 输入。  我们已在引脚 68 上将 MCLK 路由出去、可以看到它的频率不同或与 HFXIN 同步。  我假设它正在从 DCO 运行、因为  HFXTOFFG 无法清除。  我已经完成了寄存器设置、并认为它们设置正确。  下面是代码片段的副本:

提前感谢、
Adam

//**********************************************************************************************************************

//必须先写入时钟源密钥、然后才能写入任何其他寄存器
CSCTL0 = CSKEY;
// MCLK = HF EXT、SMCLK = HF EXT、ACLK = VLO INT
CSCTL2 = SELM__HFXTCLK | SELS__HFXTCLK | SELA_VLOCLK;
// MCLK、SMCLK、ACLK 均除以 1
CSCTL3 = DIVM_1 | DIVS__1 | DIVA__1;
//关闭 LFEXT、HFFREQ = 8 –16MHz(在 10MHz 上运行)、旁路使用 3.3V 时钟 OSC。
CSCTL4 = LFXTOFF_1 | HFFREQ_2 | HFXTBYPASS;

//****************************************************************************************
//时钟测试引脚
//****************************************************************************************
//将 MCLK 输出引脚 68 用于诊断
P5DIR |= BIT7;
P5SEL0 |= BIT7;
P5SEL1 || BIT7;

//等待“一段时间“、让 XT2 成为时钟源
静态易失性 uint16_t _xt1FailCnt = 0;
应该做

_xt1FailCnt++;
//清除 HFXT
CSCTL5 &=~(HFXTOFFG);
SFRIFG1 &=~OFIFG;
//测试 XT2 故障标志和循环迭代
}while ((CSCTL5 & HFXTOFFG)&&(_xt1FailCnt < 1000));//((SFRIFG1 & OFIFG)&&(_xt1FailCnt < 1000));

_xt1FailCnt =_xt1FailCnt;

 

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

    我现在可以正常工作、 错误是:


     - 在进入旁路模式之前,必须设置 HFFREQ SELECT 位(表 3-1 系列用户指南 SLAU367P)。
      -- 此外、应在晶体或旁路运行模式下使用 HFXT 之前正确配置这些位“

     - 必须设置 HFXIN 和 HFXOUT 的备用功能引脚才能使其生效。
      -第 3.2.3 节:
         但是、HFXT 在配置与 HFXT 共享的端口以实现 HFXT 运行之前保持禁用状态。 共享 I/O 的配置由与 HFXIN 关联的 PSEL 位和 HFXTBYPASS 位决定。 设置 PSEL 位会使 HFXIN 和 HFXOUT 端口配置为 HFXT 运行。“

     -最后  HFXTOFFG 必须清除、然后是中断标志  OFIFG. 必须按该顺序清除。

    我猜故事的道德是什么 R.F.M.!

    我发布了下面的代码、以防其他人对此不感兴趣:

    //**************************************************************************************************************************

    //****************************************************************************************
    //注意:订单可能很重要!!!
    //如果进行更改测试、则测试 MCLK 是否与 XT2 保持一致
    //****************************************************************************************
    //将 MCLK 输出引脚 68 用于诊断
    P5DIR |= BIT7;
    P5SEL0 |= BIT7;
    P5SEL1 || BIT7;

    //必须先写入时钟源密钥、然后才能写入任何其他寄存器
    CSCTL0 = CSKEY;
    // MCLK、SMCLK、ACLK 均除以 1
    CSCTL3 = DIVM_1 | DIVS__1 | DIVA__1;
    //关闭 LFEXT、HFFREQ = 8 –16MHz(在 10MHz 上运行)
    //在进入旁路模式之前必须进行设置(参见系列用户指南 SLAU367P 中的表 3-1 注释)
    CSCTL4 = LFXTOFF_1 | HFFREQ_2;

    //旁路使用 3.3V 时钟振荡器。
    CSCTL4 |= HFXTBYPASS;

    PJSEL0 |= BIT6 | BIT7;

    // MCLK = HF EXT、SMCLK = HF EXT、ACLK = VLO INT
    CSCTL2 = SELM__HFXTCLK | SELS__HFXTCLK | SELA_VLOCLK;

     //清除 HFXT 标志和中断、顺序很重要
    CSCTL5 &=~(HFXTOFFG);
    SFRIFG1 &=~OFIFG;


    //等待“一段时间“、让 XT2 成为时钟源
    //经验测试显示 100-150 之间的循环迭代
    //否则继续使用默认值并让时钟监控任务、
    // gsMspClkRecoverXt1()、请尝试更正它
    静态易失性 uint16_t _xt2FailCnt = 0;
    _xt2FailCnt = 0;
    应该做

    _xt2FailCnt++;
    //清除 HFXT 标志和中断、顺序很重要
    CSCTL5 &=~(HFXTOFFG);
    SFRIFG1 &=~OFIFG;
    //测试 XT2 故障标志和循环迭代
    } while ((CSCTL5 & HFXTOFFG)&&(_xt2FailCnt < 1000));

    _xt2FailCnt =_xt2FailCnt;