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.

[参考译文] TM4C129ENCPDT:一旦看门狗到期、则会连续调用 callbackFxn

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/998423/tm4c129encpdt-once-the-watchdog-expires-the-callbackfxn-is-called-continually

器件型号:TM4C129ENCPDT

我使用 TIRTOS 2.16.0.8。  我要做的是在 EEPROM 中记录发生看门狗的事实、然后复位电路板。

处理器有一个有趣的看门狗功能、在这个功能中、如果中断没有被清除、它将在递减计数达到0时中断、然后在下一次递减计数达到0时复位。

我设置了一个看门狗回调函数、该函数唤醒一个应处理写入 EEPROM 的任务。

问题是因为我无法清除看门狗中断(因为如果我执行第二次过期操作、将不会重置电路板)、中断例程会持续触发、直到电路板复位。  

持续触发中断可防止我写入 EEPROM。

我已经尝试使用 TivaWare 级别 API WatchdogIntUnregister 来删除回调函数、这是在我开始执行任务后执行的、但它生成了有关 no section .vectors 的链接警告、并且未解决问题。

在 TI-RTOS 下、如何防止在写入 EEPROM 并等待复位时对看门狗进行快速回调?

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

    您好、Roy、

    [引用 userid="330700" URL"~/support/microcontrollers/other/f/other-microcontrollers-forum/998423/tm4c129encpdt-once-the-watchdog-expires-the-callbackfxn-is-called-continually ]问题是因为我无法清除看门狗中断(因为如果我执行第二次过期操作、将不会重置电路板)、中断例程会持续触发、直到电路板重置。  [/报价]

    这就是看门狗的工作方式。 您必须清除中断以防止复位。 如果不清除中断、则中断变为挂起。 如果将重复重新进入 ISR。 这不仅对于看门狗是如此、对于任何生成中断的模块也是如此。  

    如果要将看门狗复位事件记录到 EEPROM 中、可以读取 RESC 寄存器以确定复位事件的原因。 例如、如果您得到复位、则读取 RESC 寄存器。 如果 RESC 指示看门狗复位事件、则写入 EEPROM 以记录该事件。 这是否起作用?

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

    我认为应该能够屏蔽中断、使其切换到 轮询模式下的操作。  我只是不能弄清楚触发后如何屏蔽它、因为 TiveWare API 似乎与 TI-RTOS 实现不兼容。

    您建议使用 RESC 寄存器可能会在有限的意义上起作用、但它并不能真正满足我的需求。  我的代码设置使用这种相同的机制来捕获由于异常和特殊情况(例如、我必须与之交互的远程网络设备)导致的复位。  

    我的 EEPROM 日志记录不仅仅记录看门狗的总数。  它对看门狗的异常和原因进行计数。  在看门狗复位发生之前捕获此信息要干净得多。  

    感谢您的评论。

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

    您好!

    [引用 userid="330700" URL"~/support/microcontrollers/other/f/other-microcontrollers-forum/998423/tm4c129encpdt-once-the-watchdog-expires-the-callbackfxn-is-called-continually/3688962 #368962"]我根本无法确定触发后如何屏蔽它、因为 TiveWare API 似乎与 TI-RTOS 实现不兼容

    请参阅数据表中的以下说明。 基本上、一旦启用中断、在复位前就不能再禁用中断。  

    寄存器3:看门狗控制寄存器(WDTCTL)、偏移量0x008
    该寄存器是看门狗控制寄存器。 看门狗定时器可配置为生成
    复位信号(第二次超时)或中断超时。
    当通过置位 INTEN 位启用看门狗中断时、所有后续写入
    INTEN 位被忽略。 唯一可以重新启用对该位写入的机制是硬件
    通过设置看门狗定时器软件中相应的位来启动复位或软件复位
    复位(SRWD)寄存器。

     正如我提到 过的、这是一种硬件行为、您必须清除该标志、以便中断在退出 ISR 后不会保持挂起状态。 不清除它是没有办法的。 我知道一旦清除中断标志、它将再次启动、并且当看门狗超时第二次时、不会出现复位。  

     我唯一可以建议 的是清除标志并写入 EEPROM 数据。 在您所需的任务完成后、手动生成一个软件复位(通过调用 SysCtlReset()) 来替换不会出现的所需的看门狗复位。  

    [编辑]如果要禁用中断、可以通过调用 IntDisable (INT_watchdog)在 NVIC 级别禁用中断、但不能在看门狗模块级别禁用中断。

     另外、为了给您一个抬头、我将从明天开始在本周剩余时间内离开办公室。 如果没有人回复此帖子、您可以打开一个新帖子、以便值班主持人可以回复您的问题。