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.

[参考译文] MSP430FR5969:如何将监视狗计时器恢复为默认值

Guru**** 2538930 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1086126/msp430fr5969-how-to-restore-watch-dog-timer-to-default

部件号:MSP430FR5969

我有一个程序使用延迟(int)函数来计时。

在我需要停止看门狗计时器以执行更精确的计时之前,它工作正常,方法是根据多个示例设置 WDTCTL = WDTPW + WDTHOLD。

关闭后,我会运行一些有效的计时测试。

但是,现在我的 delay (int)命令挂起系统,无法恢复。

我已经尝试了我能想到的所有设置(包括以多种不同的方式打开监视狗计时器),但在关闭监视狗计时器后,我无法再次使用延迟功能。

需要设置哪些寄存器才能将监视狗计时器恢复为默认(开机)操作? 根据登记表,确定 WDTCTL = WDTPW 应该是所需的全部,除非存在未记录的默认值。

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

    你(们)好

    WDTCTL = WDTPW + WDTHOLD 停止 WDT;

    延迟循环(x)在代码中停止并等待 x MCLK 循环。

    请帮助您检查 MSP430FR59xx 和 MSP430FR58xx 代码示例(修订版)中 msp430fr59xx_1.c 示例代码示例上的 Delay_Cycles(x)功能 (L)

    谢谢!

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

    WDTCTL 的重置值为(WDTPW|WDTIS2)[参考用户指南(SLAU367P)图24-2]。 将其设置为(WDTPW|0)将其置于重置模式,延迟时间很长[请参阅 UG 表24-2]。

    如果您使用 WDT 实施延迟,我认为您不需要这些设置中的任何一种。 您的 Delay()函数是什么样子的?

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

    很明显,要做的是在停止 WDTCTL 之前先阅读它。 然后屏蔽密码字节或使用正确的密码,并在您想再次启动密码时将其写回。 这将恢复以前的设置。 即使它被停止了。

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

    谢谢你。 不幸的是,这种行为仍然是一样的。 延迟功能一直工作到我停止看门狗计时器,然后在看门狗计时器停止并重新启动后调用它后,系统挂起。

    无效延迟(UINT32_t 毫秒)

    UINT32_t start = micros();
    当(毫秒> 0)为{
    如果((micros()- start)>= 1000){
    毫秒--;
    开始+=1000;
    }
    __bis_SR_register (LPM0_bits+GIE);
    }
    }

    这来自配线.c,该文件是用于 MSP430的 Arduino 文件。

    好的,我有一些运气:

       WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器

       TA0CCR0 = 0;//最初,停止计时器
       TA0CCTL0 |= CCIE;//为 CCR0启用中断。
       TA0CTL = tassel_2 + ID_0 + MC_2;//选择 SMCLK,SMCLK/1,连续模式

       WDTCTL = WDTPW + WDTIS2;//启动看门狗计时器

    这与使用'__delay_cycles 而不是'delay'相结合似乎是有效的。

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

    我尝试使用 delay_cycle()而不是 delay()来重新实现我的函数,并且行为是相同的。 该功能一直有效,直到我停止看门狗计时器,然后在后续呼叫中挂起。