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.

[参考译文] MSP430FR5994:在看门狗超时 PUC 后读取 SYSRSTIV 中的 WDTIFG

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1213179/msp430fr5994-reading-wdtifg-in-sysrstiv-after-watchdog-timeout-puc

器件型号:MSP430FR5994

我正在尝试在一个 安全装置超时 PUC 后、系统已经重新启动时执行一个操作。

我已经找到了我认为 SYSRSTIV 寄存器中正确矢量为 SYSRSTIV__WDTIFG、并且用户指南规定"写入该寄存器将清除所有挂起的复位源标志"。

在我的代码开始时、我有以下信息:

	if (SYSRSTIV & SYSRSTIV__WDTIFG)
	{
		SYSRSTIV = SYSRSTIV__WDTIFG;
		
		/* Code to excute*/
		
	}

不过、代码似乎总是在执行、因此我不确定是读取寄存器错误还是写入寄存器以正确清除。 我尝试了几种不同的方法来写入寄存器、但同样有问题。 这对我来说似乎是合乎逻辑的、正确的、但我似乎无法使其正常工作、也无法在网上找到任何示例。

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

    您好、Joe!

    在我看来、这似乎应该起作用、但您所描述的行为在我看来并不像它被清除了。 您是否可以尝试在读取 SYSRSTIV 直到其为0的位置添加一个短循环? 这将在每次读取时清除最高优先级标志。  

    你可能还会对 Jace 在这里如何处理重置感兴趣,他的版本相当完整: https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/746272/faq-handling-msp430-system-reset-events

    此致、
    Brandon Fisher

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

    尊敬的 Brandon:

    我发现、如果  SYSRSTIV__WDTIFG 的3个位中的任何一个 被置位、我的 if 语句始终为真。 为了解决此问题、我将声明更改为:

    	if ((SYSRSTIV & SYSRSTIV__WDTIFG) == SYSRSTIV__WDTIFG)
    	{
    		SYSRSTIV = SYSRSTIV__WDTIFG;
    		/* Code execution */
    	}

    此外、您提供的链接也适用于我使用开关案例的情况、如下所示:

    switch (__even_in_range(SYSRSTIV, 0x2E))
    {
        case SYSRSTIV__WDTIFG:
            SYSRSTIV = SYSRSTIV__WDTIFG;
    	    Shutdown();
    	    break;
    }

    感谢您的帮助!