主题中讨论的其他器件:TM4C1294KCPDT
您好!
我已从迁移的 Stellaris 代码中启用了看门狗计时器0、但 TM4C1294看门狗计时器0有问题。 对于一个写入低于当前倒计数的 WDTLOAD 值的写入、将被忽略。 Tivaware 使用=将值写入 WDTLOAD 寄存器值、因此> 当前 WDLOAD 的值会在解锁条件下被忽略。 更改 Tiva 函数 WDTLOAD WRITE |=允许一个更大的超时值来更新递减计数中的看门狗0。 但是、较低 WDTLOAD 值的写入仍将被忽略。 这是勘误条件 、因为没有影子更新功能并且清零 WDTLOAD 0x0会触发立即中断。
除非在解锁的寄存器写入事件之后使用 CCS 调试检查 WDTLOAD 寄存器是否发生了变化、否则您永远不会知道它是否发生了变化、并且您的硬件将不会受到保护
示例:将 WDTLOAD 值从微秒超时更改为几秒除非 您运行下面的代码 snip、否则永远不能将其改回较低的值。 此帖子通知 TM4C1294看门狗计时器0具有其他未记录的勘误表。 当 Tivaware 更新通过|=语法写入 WDTLOAD 寄存器时、下面的代码可以处理2个定义的 WDTLOAD 时间、以便在 WDTLOAD 被设置为更大值时在这两个时间之间切换或减少超时。
/* Unlock the Watchdodgs registers for write access */
HWREG(WATCHDOG0_BASE + WDT_O_LOCK) = WDT_LOCK_UNLOCK;
/* Time writes to WDTLOAD occurs below current down count value */
while(HWREG(WATCHDOG0_BASE + WDT_O_VALUE) >= WATCHDOG0_HI_RELOAD_VALUE)
{
/* Reset Watchdog-0 for lower WDTLOAD write values */
HWREG(WATCHDOG0_BASE + WDT_O_LOAD) = WATCHDOG0_MED_RELOAD_VALUE;
/* Check ok to lock the WDog0 registers */
if(HWREG(WATCHDOG0_BASE + WDT_O_LOAD) <= WATCHDOG0_MED_RELOAD_VALUE)
{
/* Lock the Watchdodg registers blocking write access. */
HWREG(WATCHDOG0_BASE + WDT_O_LOCK) = WDT_LOCK_LOCKED;
break;
}
}