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.

[参考译文] TM4C123FH6PM:TM4C 目标上的看门狗计时器行为

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/578054/tm4c123fh6pm-watchdog-timer-behavior-on-tm4c-targets

器件型号:TM4C123FH6PM
主题中讨论的其他器件:DK-TM4C123GTM4C123

这个问题是在几年前编写的代码的代码审查期间提出的。

我们的大多数开发团队都熟悉看门狗、当看门狗挨饿时、只需重置控制器即可。  通常、寄存器中的位被置位以指示 WDOG 复位。

TM4C 控制器是我使用过的首款可用作计时器等的控制器。

我编程到的一个行为是、如果您使用 WDOG 作为 WDOG、那么当您首次启用 WDOG 外设时、最终会进入 WDOG ISR。

因此、我最终得到的代码如下所示:

bool waitingForFirstWDOG_HIT = true;
void WDOG_Init (void){
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_WDOG0);

if (ROM_WatchdogLockState (WATCHDOG0_BASE)== true)
{
ROM_WatchdogUnlock (WATCHDOG0_BASE);
}
ROM_WatchdogStallEnable (WATCHDOG0_BASE);
ROM_WatchdogIntClear (WATCHDOG0_BASE);
ROM_WatchdogReloadSet (WATCHDOG0_BASE、SysCtlClockGet ()/10);
ROM_IntEnable (INT_Watchdog);//这将生成立即中断、因此第一次 ISR 调用需要 IntClear
ROM_WatchdogEnable (WATCHDOG0_BASE);
} 

静态 Watchdog_timer_ISR (){

if (waitingForFirstWDOG_HIT){

ROM_WatchdogIntClear (WATCHDOG0_BASE);

waitingForFirstWDOG_HIT = false

否则

numAbnormalResets++;

EEPROM_Write16 (ADDR_numAb常规 复位、numAb常规 复位);

// TODO:Watchdog_timer_ISR 写入故障

ROM_SysCtlReset();

(抱歉使用代码粘贴。  今天对我来说不起作用。)

它的工作原理。 问题是、为什么启用 WDOG 后最终会进入 WDOG?  我很确定代码来自一个示例。  我尝试避免第一个中断、但没有找到方法。

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

    如果您使用驱动程序库、即调用不带"ROM_"前缀的看门狗函数、您是否会获得相同的行为?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。 (我不再收到回复的电子邮件通知。 因此,答复被推迟。)
    我现在没有时间研究 ROM_*与*调用之间的关系。
    是否有理由怀疑行为的差异?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 John:
    我想知道是否在较新版本的 TivaWare 库中更正了 ROM_functions 中的任何一个。 我通过使用您调用的 ROM_functions 和最新版本的库进行了检查、没有问题。 我喜欢使用函数的 MAP_版本、因为如果存在(并且在头文件中定义)、它将使用 ROM_version;如果没有、它将使用 TivaWare 版本。 但是、我知道在已建立的工程中、如果我们弃用了库中的 ROM_Function、则您更希望看到链接器错误。

    返回到您的原始问题。 我从"C:\ti\TivaWare_C_Series-2.1.4.178\examples\boards\dk-tm4c123g\watchdog"中的"看门狗"示例开始、并对其进行了修改、以匹配您所附代码片段中的序列。 我无法重现您描述的早期中断。 (我仅限于使用 TM4C123"G"而不是"F"器件。)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将在小组中找到时间重新测试我们的 WDT 代码。 它已经过测试、可在预期条件下复位我们的处理器。 但 WDT 功能虽然简单、但需要很好地理解。
    我会将其标记为已回答、并将我们的问题单标记为"再次查看"。