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.

[参考译文] MSP430FR6922:代码卡在振荡器故障标志中

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1158558/msp430fr6922-code-is-stuck-in-oscillator-fault-flag

器件型号:MSP430FR6922

您好!

我  在电路板上使用 MSP430FR6922控制器。 我想在代码中将 ACLK 设置为 LFXTCLK=32.768kHz、MCLK=DCOCLK=16MHz、SMCLK=DCOCLK。 然后 SMCLK/4=4MHz...

我的代码是:-

#include "common.h"

/* Function to initialize device at internal crystal 16MHz and external 32.768khz*/
void dev_init_16M(void)
{
    PJSEL0 |= BIT4 | BIT5;                    // For XT1

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

    // Configure one FRAM wait state as required by the device data sheet for MCLK
    // operation beyond 8MHz _before_ configuring the clock system.
    FRCTL0 = FRCTLPW | NWAITS_1;

    // Clock System Setup
    CSCTL0_H = CSKEY >> 8;                    // Unlock CS registers
    CSCTL1 = DCOFSEL_4 | DCORSEL;            // Set DCO to 16MHz
    CSCTL2 = SELA__LFXTCLK | SELS__DCOCLK | SELM__DCOCLK; // Set SMCLK = MCLK = DCO=16Mhz,ACLK=LFXT=32.768kHZ
    CSCTL3 = DIVA__1 | DIVS__4 | DIVM__1;     // Set all dividers SMCLK/4=4MHz
    CSCTL4 &= ~LFXTOFF;
      do
      {
        CSCTL5 &= ~LFXTOFFG;                    // Clear XT1 fault flag
        SFRIFG1 &= ~OFIFG;
      }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag

    // Now that osc is running enable fault interrupt
//    SFRIE1 |= OFIE;
//    __bis_SR_register(LPM0_bits);             // Wait in LPM0 for fault flag
    CSCTL0_H = 0;                             // Lock CS registers}
}

//
//#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
//#pragma vector=UNMI_VECTOR
//__interrupt void UNMI_ISR(void)
//#elif defined(__GNUC__)
//void __attribute__ ((interrupt(UNMI_VECTOR))) UNMI_ISR (void)
//#else
//#error Compiler not supported!
//#endif
//{
//  do
//  {
//    // set a breakpoint on the line below to observe XT1 operating from VLO
//    // when the breakpoint is hit during a crystal fault
//    CSCTL5 &= ~LFXTOFFG;                    // Clear XT1 fault flag
//    SFRIFG1 &= ~OFIFG;
//    P1OUT |= BIT0;
//    __delay_cycles(25000);                  // time for flag to get set again
//  }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag
//}

当我运行代码时、我注意到它停留在最后一个检查振荡器故障标志的 DO while 循环中。

原因是什么? 我的代码错误??? 还是因为硬件问题??

请访问 help..it

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

    您好、Sayali、

    您的代码看起来不错-从 TI Resource Explorer 示例中剪切/粘贴的效果相当好。

    您是否尝试检查32kHz 晶体是否实际振荡?  使用示波器并查看 LFXTOUT 引脚。

    我没有该特定部件、但我可以从该系列获取一个部件、看看我是否遇到相同的问题。

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

    您好、Sayali、

    我从您那里听说过几天,因此我假设您能够解决您的问题。
    我将此帖子标记为已解决。 如果情况并非如此,请单击“这无法解决我的问题”按钮,并使用更多信息回复此主题。
    如果此主题锁定、请单击"提出相关问题"按钮、然后在新主题中描述您的问题的当前状态以及您可能需要帮助我们帮助解决您的问题的任何其他详细信息。