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.

[参考译文] MSP430F5419A:检测复位原因

Guru**** 2511985 points
Other Parts Discussed in Thread: MSP430F5419A, MSP430F5438A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1032748/msp430f5419a-detecting-reset-reasons

器件型号:MSP430F5419A
主题中讨论的其他器件: MSP430F5438A

您好!

我一直在研究检测 MSP430F5419A 的复位原因。

我通过查看 SYSRSTVEC 来确定复位原因。

我发现、如果 SVSLPE 位被启用、(BOR 缺省值为开)那么一个看门狗超时复位将导致

SYSRSTIV:0C:SVSL (POR)

 

这使得我很难确定复位的原因。

 

如果我清除 SVSLPE、那么我得到的正确复位

SYSRSTIV:16:WDT 超时(PUC)

 

我看到其他复位原因也存在同样的问题、例如

SYSRSTIV:18:WDT 密码违规(PUC)

SYSRSTIV:14:PMMSWPOR (POR)

 

我没有找到任何文件、因此如果您能澄清问题并指导我找到描述我观察结果的正确文档、我将不胜感激

谢谢、
Adam

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

    SYSRSTIV 的详细信息之一是它会按照优先级顺序记住并返回复位原因。 因此、您的代码需要读取 SYSRSTIV、直到它返回零、以确保没有多余的内容。

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

    我更改了代码以多次读取 SYSRSTIV。

    我可以确认第二次读取始终为零。

     

    如果这有助于:

    作为启动的一部分,我将调用 TI 库函数 ConfigMSP430_FastWakeUp();

     

    一些寄存器值:

    PMMCTL0:9602 PMMCTL1:0000 SVSMHCTL:0E12 SVSMLCTL:0202 SVSMIO:0020 PMMIFG:0001 PMMRIE:1100 PM5CTL0:0000  

     感谢您提供的任何帮助!

    -Adam

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

    我不熟悉  ConfigMSP430_FastWakeUp、但从名称上我怀疑它会设置 SVSLFP=1 (尽管我在上面的 SVSMLCTL 中看不到0x0800设置)。

    勘误表 PMM9 [参考勘误表(SLAZ282AB)第23页]对于 SVSxFP=1时 LPM 产生的假阳性 IFG、有一些有趣的说法。 LPM 中是否发生 WDT 超时?

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

    你好、Adam

    我已经尝试使用 MSP430F5438A、看门狗复位没有问题、并检查复位源是否为0x16。

    这是我的测试代码

    #include <msp430.h>
    unsigned short  reset_;
    int main(void)
    {
     // WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
      P1DIR |= 0x01;                            // Set P1.0 to output direction
      reset_ = SYSRSTIV;
      while (1)                                 // Test P1.4
      {
          P1OUT ^= 0x01;                        // Toggle P1.0 using exclusive-OR
          __delay_cycles(100000);
      }
    }

    我在调试模式下通过 CCS 检查复位值。 我不知道如何检查该值。  

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

    您好!

    我花了几天时间才知道发生了什么。 我已经尝试过您的示例、它工作正常。 但我的代码仍然未正确指示 WDT 复位。

    我发现以下代码演示了该问题。

     

       WDTCTL = WDTPW | WDTCNTCL | WDTIS__32K | WDTSSEL_VLO;

       _low_power_mode_3 ();

       while (1);                                                                  //等待看门狗。 不应该进入这里、因为没有启用中断。

     

    我发现它需要 WDTCTL 设置和低功耗模式。 然后我得到

    SYSRSTIV:0x0E:-SVSH (POR)。

     

    如果两者中的任何一个缺失、我将得到:

    SYSRSTIV:0x16:-WDT 超时(PUC)

    感谢您的帮助!

    Adam