Other Parts Discussed in Thread: C2000WARE
Thread 中讨论的其他器件:C2000WARE
工具与软件:
在仿真无限循环的测试过程中、我注意到看门狗复位并不是100%的时候发生的。 进行10次尝试、我有3种情况发生了复位、有7种情况发生了软件未进行复位。
我用于配置的代码序列为:
/*Configure predivider*/ SysCtl_setWatchdogPredivider(SYSCTL_WD_PREDIV_512); /*Configure prescaler*/ SysCtl_setWatchdogPrescaler(SYSCTL_WD_PRESCALE_64); /*Configure watchdog mode*/ SysCtl_setWatchdogMode(SYSCTL_WD_MODE_RESET); /* Enable watchdog */ SysCtl_enableWatchdog();
优化设置为级别4。
每次尝试时进行重置的变通办法如下:
- 将优化定义为0
或者
- 在之间添加1µs 的延迟 SysCtl_setWatchdogMode 和 SysCtl_enableWatchdog
或者
- 对行进行注释 SYSCTL_setWatchdogMode (SYSCTL_WD_MODE_RESET);
或者
- 通过 以下方式更新代码序列:
- SYSCTL_setWatchdogMode (SYSCTL_WD_MODE_RESET);
- SYSCTL_setWatchdogPredivider (SYSCTL_WD_PREDIV_512);
- SYSCTL_setWatchdogPrescaler (SYSCTL_WD_PRESCALE_64);
- SysCtl_enableWatchdog ();
如果我尝试使用此序列,我有相同的问题:
- SYSCTL_setWatchdogPredivider (SYSCTL_WD_PREDIV_512);
- SYSCTL_setWatchdogMode (SYSCTL_WD_MODE_RESET);
- SYSCTL_setWatchdogPrescaler (SYSCTL_WD_PRESCALE_64);
- SysCtl_enableWatchdog ();
当我查看 反汇编代码时、关闭优化会导致更多的代码(函数调用)
使用优化:
未采用优化

当看门狗复位没有发生 时,我可以看到寄存器的配置方式与它工作时相同:

然后、WDCNT 增加到0x00FF、然后返回到0、但不会触发复位。
测试似乎表明、在配置看门狗模式时、有必要在激活看门狗之前应用一定的延迟、 否则、有时即使寄存器指示看门狗复位已启用、也不会发生复位。
您能确认问题吗?建议的解决方法是什么?
谢谢



