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.
你(们)好
我已设置看门狗在209 ms 后触发。
到目前为止,我没有设置看门狗的任何服务,所以它应该重新设置我的设备,或者拔下插头。
事实上,在首次启动后,它会重置设备,并持续一段时间,但随后它会停止执行此操作。
首先,我认为设备卡在某些 NMI 中,或者存在某些异常。 但事实证明,它运行正常,我的应用程序代码运行时就好像没有看门狗一样。
简而言之
预测:
设备每隔209毫秒重置一次,直到断电。
现实:
设备在一段时间内每209 MS 重置一次,然后重置事件停止,CPU 运行正常的软件。
“一些时间”=可变时间大约为2秒到20秒。
使用 sysconfig 工具设置看门狗:
随着209 MS 运行时间的推移,有足够的时间在串行端口上打印一些调试信息。
所以我在串行初始化后添加了这一项
Log_debug("WatchDog counter value = %u\r\n", SysCtl_getWatchdogCounterValue()); Log_debug("WatchDog reset status = %d\r\n", SysCtl_getWatchdogResetStatus()); Log_debug("Sys control and status register = %X\r\n", HWREGH(WD_BASE + SYSCTL_O_SCSR)); Log_debug("WatchDog KEY register = %X\r\n", HWREGH(WD_BASE + SYSCTL_O_WDKEY)); Log_debug("WatchDog status register = %X\r\n", HWREGH(WD_BASE + SYSCTL_O_WDCR)); Log_debug("WatchDog Windowed status register = %X\r\n", HWREGH(WD_BASE + SYSCTL_O_WDWCR));
* Log_debug 只是将宏扩展到 printf
我明白了
DBG: WatchDog counter value = 1 DBG: WatchDog reset status = 0 DBG: Sys control and status register = 5 DBG: WatchDog KEY register = 7 DBG: WatchDog status register = E07 DBG: WatchDog Windowed status register = 0
当 以后触发重置时,这两个值都相同。
我的 testmonitor 中还有这些值在命令上打印,当我要求它们在重置停止后,我仍然得到相同的值,除了不断变化的计数器(表示它正在运行)
那么,为什么我的看门狗停止工作?
您好,
是否也可以在此处发布 WD 初始化代码? 同样,当 WD 停止触发重置时,IOS 上是否有任何活动可供您确认应用程序(代码)仍在运行。如果没有,则在 WD 初始化后的1个循环中添加 GPIO 切换代码以确认相同。 重置后,设备可能无法正常启动,因此永远不会执行 WD 初始化。 这是 TI 主板还是您自己的客户主板? 您的设备启动 PIN 上是否有任何活动驱动程序?
此致,
维耶克·辛格
1. sysconfig 生成的代码中的初始化代码(使用最新的 sysconfig 4.0)。
void WATCHDOG_init(){ //WATCHDOG initialization SysCtl_disableWatchdog(); SysCtl_setWatchdogMode(SYSCTL_WD_MODE_RESET); SysCtl_setWatchdogPredivider(SYSCTL_WD_PREDIV_128); SysCtl_setWatchdogPrescaler(SYSCTL_WD_PRESCALE_64); SysCtl_setWatchdogWindowValue(0); SysCtl_enableWatchdog(); }
2.
我在串行端口上运行的测试显示器中有许多 IO 活动。 下面是从我的串行终端复制的通信示例,因此您会看到应用程序代码非常有效。
test>pm,r,d DBG: WatchDog counter value = 20 DBG: WatchDog reset status = 0 DBG: Sys control and status register = 5 DBG: WatchDog KEY register = 7 DBG: WatchDog status register = E07 DBG: WatchDog Windowed status register = 0 test>pm,r,d DBG: WatchDog counter value = 148 DBG: WatchDog reset status = 0 DBG: Sys control and status register = 5 DBG: WatchDog KEY register = 7 DBG: WatchDog status register = E07 DBG: WatchDog Windowed status register = 0
3.
是的,WD 初始化正在运行,否则我在启动后就看不到 log_debug 在串行终端上打印的正确值,正如我在问题中所引用的。
此外,正如您在我的测试监视器上的上述片段中所看到的,看门狗初始化的所有值都仍然存在。
4.
这是我们的定制板。
5.
GPIO32和 GPIO24有一个上拉,但如果您仍然怀疑 init 和应用程序是否实际运行,因为它进入了另一个引导模式, 然后,它进入闪存模式并运行上述 init 和应用程序,这也是我的第一个想法,我早就排除了这一点。
[引用 userid="172948" url="~/support/icros/C2000 -微控制器组/CC2000 /f/C2000 -微控制器-论坛/1067391/tms320f280023c-watchders-stops -触发器]首先,我认为该设备在某些 NMI 或某些异常情况下卡住。 但事实证明,它运行正常,我的应用程序代码运行时就好像没有看门狗一样。好的,所以你有两个连续的 WD 计数值,计数值正在变化。 这意味着 WD 正在计算。 如果您继续打印这些值,那么您是否曾经使用过 WD 计数最大值,之后会发生什么情况?
您还可以确认您的所有代码仅在闪存中,而不在 RAM 中。
只有闪存等待状态代码的设置在 ramfuncts 中。
“是”计数器正在运行,就像我在原始答案中所说的那样,当计数器换行时,不会发生任何情况。
从终端附加带有时间戳的更长日志,以便您可以看到。
正如我还提到的,我甚至没有为看门狗提供任何服务,所以我的 SW 没有在任何地方重置看门狗。
[2022-01-08 01:01:23.987] pm,r,d [2022-01-08 01:01:26.066] [2022-01-08 01:01:26.066] DBG: WatchDog counter value = 16 [2022-01-08 01:01:26.072] DBG: WatchDog reset status = 0 [2022-01-08 01:01:26.072] DBG: Sys control and status register = 5 [2022-01-08 01:01:26.072] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:26.072] DBG: WatchDog status register = E07 [2022-01-08 01:01:26.072] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:26.088] [2022-01-08 01:01:26.088] [2022-01-08 01:01:26.088] test>pm,r,d [2022-01-08 01:01:26.872] [2022-01-08 01:01:26.872] DBG: WatchDog counter value = 1 [2022-01-08 01:01:26.872] DBG: WatchDog reset status = 0 [2022-01-08 01:01:26.888] DBG: Sys control and status register = 5 [2022-01-08 01:01:26.896] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:26.896] DBG: WatchDog status register = E07 [2022-01-08 01:01:26.899] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:26.904] [2022-01-08 01:01:26.905] [2022-01-08 01:01:26.905] test>pm,r,d [2022-01-08 01:01:27.522] [2022-01-08 01:01:27.522] DBG: WatchDog counter value = 25 [2022-01-08 01:01:27.522] DBG: WatchDog reset status = 0 [2022-01-08 01:01:27.522] DBG: Sys control and status register = 5 [2022-01-08 01:01:27.522] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:27.522] DBG: WatchDog status register = E07 [2022-01-08 01:01:27.538] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:27.538] [2022-01-08 01:01:27.538] [2022-01-08 01:01:27.538] test>pm,r,d [2022-01-08 01:01:28.155] [2022-01-08 01:01:28.155] DBG: WatchDog counter value = 38 [2022-01-08 01:01:28.155] DBG: WatchDog reset status = 0 [2022-01-08 01:01:28.155] DBG: Sys control and status register = 5 [2022-01-08 01:01:28.165] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:28.165] DBG: WatchDog status register = E07 [2022-01-08 01:01:28.171] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:28.171] [2022-01-08 01:01:28.171] [2022-01-08 01:01:28.171] test>pm,r,d [2022-01-08 01:01:28.803] [2022-01-08 01:01:28.803] DBG: WatchDog counter value = 80 [2022-01-08 01:01:28.803] DBG: WatchDog reset status = 0 [2022-01-08 01:01:28.803] DBG: Sys control and status register = 5 [2022-01-08 01:01:28.818] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:28.822] DBG: WatchDog status register = E07 [2022-01-08 01:01:28.822] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:28.822] [2022-01-08 01:01:28.822] [2022-01-08 01:01:28.822] test>pm,r,d [2022-01-08 01:01:29.486] [2022-01-08 01:01:29.486] DBG: WatchDog counter value = 166 [2022-01-08 01:01:29.502] DBG: WatchDog reset status = 0 [2022-01-08 01:01:29.505] DBG: Sys control and status register = 5 [2022-01-08 01:01:29.505] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:29.505] DBG: WatchDog status register = E07 [2022-01-08 01:01:29.505] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:29.522] [2022-01-08 01:01:29.522] [2022-01-08 01:01:29.522] test>pm,r,d [2022-01-08 01:01:30.105] [2022-01-08 01:01:30.105] DBG: WatchDog counter value = 158 [2022-01-08 01:01:30.105] DBG: WatchDog reset status = 0 [2022-01-08 01:01:30.121] DBG: Sys control and status register = 5 [2022-01-08 01:01:30.121] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:30.121] DBG: WatchDog status register = E07 [2022-01-08 01:01:30.121] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:30.137] [2022-01-08 01:01:30.137] [2022-01-08 01:01:30.137] test>pm,r,d [2022-01-08 01:01:30.738] [2022-01-08 01:01:30.738] DBG: WatchDog counter value = 163 [2022-01-08 01:01:30.738] DBG: WatchDog reset status = 0 [2022-01-08 01:01:30.738] DBG: Sys control and status register = 5 [2022-01-08 01:01:30.738] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:30.738] DBG: WatchDog status register = E07 [2022-01-08 01:01:30.755] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:30.755] [2022-01-08 01:01:30.755] [2022-01-08 01:01:30.755] test>pm,r,d [2022-01-08 01:01:31.404] [2022-01-08 01:01:31.404] DBG: WatchDog counter value = 215 [2022-01-08 01:01:31.405] DBG: WatchDog reset status = 0 [2022-01-08 01:01:31.405] DBG: Sys control and status register = 5 [2022-01-08 01:01:31.405] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:31.405] DBG: WatchDog status register = E07 [2022-01-08 01:01:31.405] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:31.422] [2022-01-08 01:01:31.422] [2022-01-08 01:01:31.422] test>pm,r,d [2022-01-08 01:01:32.015] [2022-01-08 01:01:32.015] DBG: WatchDog counter value = 209 [2022-01-08 01:01:32.023] DBG: WatchDog reset status = 0 [2022-01-08 01:01:32.025] DBG: Sys control and status register = 5 [2022-01-08 01:01:32.025] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:32.025] DBG: WatchDog status register = E07 [2022-01-08 01:01:32.035] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:32.038] [2022-01-08 01:01:32.038] [2022-01-08 01:01:32.038] test>pm,r,d [2022-01-08 01:01:32.663] [2022-01-08 01:01:32.663] DBG: WatchDog counter value = 243 [2022-01-08 01:01:32.671] DBG: WatchDog reset status = 0 [2022-01-08 01:01:32.673] DBG: Sys control and status register = 5 [2022-01-08 01:01:32.673] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:32.673] DBG: WatchDog status register = E07 [2022-01-08 01:01:32.683] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:32.683] [2022-01-08 01:01:32.683] [2022-01-08 01:01:32.683] test>pm,r,d [2022-01-08 01:01:33.278] [2022-01-08 01:01:33.278] DBG: WatchDog counter value = 237 [2022-01-08 01:01:33.286] DBG: WatchDog reset status = 0 [2022-01-08 01:01:33.288] DBG: Sys control and status register = 5 [2022-01-08 01:01:33.288] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:33.288] DBG: WatchDog status register = E07 [2022-01-08 01:01:33.298] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:33.305] [2022-01-08 01:01:33.305] [2022-01-08 01:01:33.305] test>pm,r,d [2022-01-08 01:01:33.888] [2022-01-08 01:01:33.888] DBG: WatchDog counter value = 221 [2022-01-08 01:01:33.888] DBG: WatchDog reset status = 0 [2022-01-08 01:01:33.888] DBG: Sys control and status register = 5 [2022-01-08 01:01:33.888] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:33.904] DBG: WatchDog status register = E07 [2022-01-08 01:01:33.904] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:33.904] [2022-01-08 01:01:33.904] [2022-01-08 01:01:33.904] test>pm,r,d [2022-01-08 01:01:34.613] [2022-01-08 01:01:34.613] DBG: WatchDog counter value = 87 [2022-01-08 01:01:34.613] DBG: WatchDog reset status = 0 [2022-01-08 01:01:34.613] DBG: Sys control and status register = 5 [2022-01-08 01:01:34.622] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:34.623] DBG: WatchDog status register = E07 [2022-01-08 01:01:34.623] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:34.631] [2022-01-08 01:01:34.631] [2022-01-08 01:01:34.631] test>pm,r,d [2022-01-08 01:01:35.267] [2022-01-08 01:01:35.267] DBG: WatchDog counter value = 131 [2022-01-08 01:01:35.269] DBG: WatchDog reset status = 0 [2022-01-08 01:01:35.272] DBG: Sys control and status register = 5 [2022-01-08 01:01:35.277] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:35.277] DBG: WatchDog status register = E07 [2022-01-08 01:01:35.277] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:35.287] [2022-01-08 01:01:35.287] [2022-01-08 01:01:35.287] test>pm,r,d [2022-01-08 01:01:35.924] [2022-01-08 01:01:35.924] DBG: WatchDog counter value = 174 [2022-01-08 01:01:35.926] DBG: WatchDog reset status = 0 [2022-01-08 01:01:35.926] DBG: Sys control and status register = 5 [2022-01-08 01:01:35.926] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:35.934] DBG: WatchDog status register = E07 [2022-01-08 01:01:35.938] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:35.946] [2022-01-08 01:01:35.946] [2022-01-08 01:01:35.946] test>pm,r,d [2022-01-08 01:01:36.562] [2022-01-08 01:01:36.562] DBG: WatchDog counter value = 198 [2022-01-08 01:01:36.562] DBG: WatchDog reset status = 0 [2022-01-08 01:01:36.570] DBG: Sys control and status register = 5 [2022-01-08 01:01:36.572] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:36.572] DBG: WatchDog status register = E07 [2022-01-08 01:01:36.580] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:36.582] [2022-01-08 01:01:36.582] [2022-01-08 01:01:36.582] test>pm,r,d [2022-01-08 01:01:37.171] [2022-01-08 01:01:37.171] DBG: WatchDog counter value = 191 [2022-01-08 01:01:37.171] DBG: WatchDog reset status = 0 [2022-01-08 01:01:37.171] DBG: Sys control and status register = 5 [2022-01-08 01:01:37.188] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:37.188] DBG: WatchDog status register = E07 [2022-01-08 01:01:37.188] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:37.188] [2022-01-08 01:01:37.188] [2022-01-08 01:01:37.188] test>pm,r,d [2022-01-08 01:01:37.835] [2022-01-08 01:01:37.835] DBG: WatchDog counter value = 235 [2022-01-08 01:01:37.838] DBG: WatchDog reset status = 0 [2022-01-08 01:01:37.843] DBG: Sys control and status register = 5 [2022-01-08 01:01:37.845] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:37.845] DBG: WatchDog status register = E07 [2022-01-08 01:01:37.853] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:37.856] [2022-01-08 01:01:37.856] [2022-01-08 01:01:37.856] test>pm,r,d [2022-01-08 01:01:38.467] [2022-01-08 01:01:38.467] DBG: WatchDog counter value = 249 [2022-01-08 01:01:38.472] DBG: WatchDog reset status = 0 [2022-01-08 01:01:38.472] DBG: Sys control and status register = 5 [2022-01-08 01:01:38.475] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:38.475] DBG: WatchDog status register = E07 [2022-01-08 01:01:38.475] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:38.485] [2022-01-08 01:01:38.485] [2022-01-08 01:01:38.485] test>pm,r,d [2022-01-08 01:01:39.107] [2022-01-08 01:01:39.107] DBG: WatchDog counter value = 25 [2022-01-08 01:01:39.117] DBG: WatchDog reset status = 0 [2022-01-08 01:01:39.121] DBG: Sys control and status register = 5 [2022-01-08 01:01:39.121] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:39.121] DBG: WatchDog status register = E07 [2022-01-08 01:01:39.121] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:39.121] [2022-01-08 01:01:39.121] [2022-01-08 01:01:39.121] test>pm,r,d [2022-01-08 01:01:39.738] [2022-01-08 01:01:39.738] DBG: WatchDog counter value = 29 [2022-01-08 01:01:39.738] DBG: WatchDog reset status = 0 [2022-01-08 01:01:39.738] DBG: Sys control and status register = 5 [2022-01-08 01:01:39.738] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:39.738] DBG: WatchDog status register = E07 [2022-01-08 01:01:39.755] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:39.755] [2022-01-08 01:01:39.755] [2022-01-08 01:01:39.755] test>pm,r,d [2022-01-08 01:01:40.321] [2022-01-08 01:01:40.321] DBG: WatchDog counter value = 241 [2022-01-08 01:01:40.321] DBG: WatchDog reset status = 0 [2022-01-08 01:01:40.321] DBG: Sys control and status register = 5 [2022-01-08 01:01:40.321] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:40.338] DBG: WatchDog status register = E07 [2022-01-08 01:01:40.338] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:40.355] [2022-01-08 01:01:40.355] [2022-01-08 01:01:40.355] test>pm,r,d [2022-01-08 01:01:40.938] [2022-01-08 01:01:40.938] DBG: WatchDog counter value = 245 [2022-01-08 01:01:40.938] DBG: WatchDog reset status = 0 [2022-01-08 01:01:40.955] DBG: Sys control and status register = 5 [2022-01-08 01:01:40.955] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:40.955] DBG: WatchDog status register = E07 [2022-01-08 01:01:40.955] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:40.955] [2022-01-08 01:01:40.955] [2022-01-08 01:01:40.955] test>pm,r,d [2022-01-08 01:01:41.555] [2022-01-08 01:01:41.555] DBG: WatchDog counter value = 229 [2022-01-08 01:01:41.569] DBG: WatchDog reset status = 0 [2022-01-08 01:01:41.571] DBG: Sys control and status register = 5 [2022-01-08 01:01:41.571] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:41.571] DBG: WatchDog status register = E07 [2022-01-08 01:01:41.571] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:41.577] [2022-01-08 01:01:41.577] [2022-01-08 01:01:41.577] test>pm,r,d [2022-01-08 01:01:42.221] [2022-01-08 01:01:42.221] DBG: WatchDog counter value = 26 [2022-01-08 01:01:42.223] DBG: WatchDog reset status = 0 [2022-01-08 01:01:42.223] DBG: Sys control and status register = 5 [2022-01-08 01:01:42.238] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:42.238] DBG: WatchDog status register = E07 [2022-01-08 01:01:42.238] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:42.241] [2022-01-08 01:01:42.241] [2022-01-08 01:01:42.241] test>pm,r,d [2022-01-08 01:01:42.828] [2022-01-08 01:01:42.828] DBG: WatchDog counter value = 10 [2022-01-08 01:01:42.828] DBG: WatchDog reset status = 0 [2022-01-08 01:01:42.828] DBG: Sys control and status register = 5 [2022-01-08 01:01:42.836] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:42.838] DBG: WatchDog status register = E07 [2022-01-08 01:01:42.855] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:42.858] [2022-01-08 01:01:42.858] [2022-01-08 01:01:42.858] test>pm,r,d [2022-01-08 01:01:43.455] [2022-01-08 01:01:43.455] DBG: WatchDog counter value = 24 [2022-01-08 01:01:43.455] DBG: WatchDog reset status = 0 [2022-01-08 01:01:43.455] DBG: Sys control and status register = 5 [2022-01-08 01:01:43.455] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:43.472] DBG: WatchDog status register = E07 [2022-01-08 01:01:43.472] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:43.488] [2022-01-08 01:01:43.488] [2022-01-08 01:01:43.488] test>pm,r,d [2022-01-08 01:01:44.072] [2022-01-08 01:01:44.072] DBG: WatchDog counter value = 19 [2022-01-08 01:01:44.072] DBG: WatchDog reset status = 0 [2022-01-08 01:01:44.072] DBG: Sys control and status register = 5 [2022-01-08 01:01:44.087] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:44.088] DBG: WatchDog status register = E07 [2022-01-08 01:01:44.088] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:44.109] [2022-01-08 01:01:44.109] [2022-01-08 01:01:44.109] test>pm,r,d [2022-01-08 01:01:44.659] [2022-01-08 01:01:44.659] DBG: WatchDog counter value = 238 [2022-01-08 01:01:44.671] DBG: WatchDog reset status = 0 [2022-01-08 01:01:44.671] DBG: Sys control and status register = 5 [2022-01-08 01:01:44.688] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:44.688] DBG: WatchDog status register = E07 [2022-01-08 01:01:44.688] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:44.688] [2022-01-08 01:01:44.688] [2022-01-08 01:01:44.688] test>pm,r,d [2022-01-08 01:01:45.321] [2022-01-08 01:01:45.321] DBG: WatchDog counter value = 26 [2022-01-08 01:01:45.321] DBG: WatchDog reset status = 0 [2022-01-08 01:01:45.321] DBG: Sys control and status register = 5 [2022-01-08 01:01:45.321] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:45.338] DBG: WatchDog status register = E07 [2022-01-08 01:01:45.338] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:45.360] [2022-01-08 01:01:45.360] [2022-01-08 01:01:45.360] test>pm,r,d [2022-01-08 01:01:45.938] [2022-01-08 01:01:45.938] DBG: WatchDog counter value = 29 [2022-01-08 01:01:45.938] DBG: WatchDog reset status = 0 [2022-01-08 01:01:45.955] DBG: Sys control and status register = 5 [2022-01-08 01:01:45.955] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:45.955] DBG: WatchDog status register = E07 [2022-01-08 01:01:45.961] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:45.961] [2022-01-08 01:01:45.961] [2022-01-08 01:01:45.961] test>pm,r,d [2022-01-08 01:01:46.538] [2022-01-08 01:01:46.538] DBG: WatchDog counter value = 3 [2022-01-08 01:01:46.538] DBG: WatchDog reset status = 0 [2022-01-08 01:01:46.555] DBG: Sys control and status register = 5 [2022-01-08 01:01:46.555] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:46.572] DBG: WatchDog status register = E07 [2022-01-08 01:01:46.572] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:46.572] [2022-01-08 01:01:46.572] [2022-01-08 01:01:46.572] test>pm,r,d [2022-01-08 01:01:47.222] [2022-01-08 01:01:47.222] DBG: WatchDog counter value = 86 [2022-01-08 01:01:47.238] DBG: WatchDog reset status = 0 [2022-01-08 01:01:47.238] DBG: Sys control and status register = 5 [2022-01-08 01:01:47.255] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:47.255] DBG: WatchDog status register = E07 [2022-01-08 01:01:47.255] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:47.255] [2022-01-08 01:01:47.255] [2022-01-08 01:01:47.255] test>pm,r,d [2022-01-08 01:01:47.805] [2022-01-08 01:01:47.805] DBG: WatchDog counter value = 39 [2022-01-08 01:01:47.821] DBG: WatchDog reset status = 0 [2022-01-08 01:01:47.821] DBG: Sys control and status register = 5 [2022-01-08 01:01:47.821] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:47.838] DBG: WatchDog status register = E07 [2022-01-08 01:01:47.838] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:47.838] [2022-01-08 01:01:47.838] [2022-01-08 01:01:47.838] test>pm,r,d [2022-01-08 01:01:48.452] [2022-01-08 01:01:48.452] DBG: WatchDog counter value = 64 [2022-01-08 01:01:48.452] DBG: WatchDog reset status = 0 [2022-01-08 01:01:48.452] DBG: Sys control and status register = 5 [2022-01-08 01:01:48.467] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:48.471] DBG: WatchDog status register = E07 [2022-01-08 01:01:48.471] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:48.488] [2022-01-08 01:01:48.488] [2022-01-08 01:01:48.488] test>pm,r,d [2022-01-08 01:01:49.073] [2022-01-08 01:01:49.073] DBG: WatchDog counter value = 59 [2022-01-08 01:01:49.073] DBG: WatchDog reset status = 0 [2022-01-08 01:01:49.073] DBG: Sys control and status register = 5 [2022-01-08 01:01:49.073] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:49.088] DBG: WatchDog status register = E07 [2022-01-08 01:01:49.088] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:49.088] [2022-01-08 01:01:49.088] [2022-01-08 01:01:49.088] test>pm,r,d [2022-01-08 01:01:49.795] [2022-01-08 01:01:49.795] DBG: WatchDog counter value = 182 [2022-01-08 01:01:49.795] DBG: WatchDog reset status = 0 [2022-01-08 01:01:49.795] DBG: Sys control and status register = 5 [2022-01-08 01:01:49.805] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:49.805] DBG: WatchDog status register = E07 [2022-01-08 01:01:49.822] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:49.822] [2022-01-08 01:01:49.822] [2022-01-08 01:01:49.822] test>pm,r,d [2022-01-08 01:01:50.404] [2022-01-08 01:01:50.404] DBG: WatchDog counter value = 165 [2022-01-08 01:01:50.405] DBG: WatchDog reset status = 0 [2022-01-08 01:01:50.405] DBG: Sys control and status register = 5 [2022-01-08 01:01:50.421] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:50.421] DBG: WatchDog status register = E07 [2022-01-08 01:01:50.421] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:50.421] [2022-01-08 01:01:50.421] [2022-01-08 01:01:50.421] test>pm,r,d [2022-01-08 01:01:51.082] [2022-01-08 01:01:51.082] DBG: WatchDog counter value = 238 [2022-01-08 01:01:51.088] DBG: WatchDog reset status = 0 [2022-01-08 01:01:51.088] DBG: Sys control and status register = 5 [2022-01-08 01:01:51.105] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:51.105] DBG: WatchDog status register = E07 [2022-01-08 01:01:51.105] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:51.105] [2022-01-08 01:01:51.105] [2022-01-08 01:01:51.105] test>pm,r,d [2022-01-08 01:01:51.689] [2022-01-08 01:01:51.689] DBG: WatchDog counter value = 232 [2022-01-08 01:01:51.705] DBG: WatchDog reset status = 0 [2022-01-08 01:01:51.705] DBG: Sys control and status register = 5 [2022-01-08 01:01:51.705] DBG: WatchDog KEY register = 7 [2022-01-08 01:01:51.722] DBG: WatchDog status register = E07 [2022-01-08 01:01:51.722] DBG: WatchDog Windowed status register = 0 [2022-01-08 01:01:51.722] [2022-01-08 01:01:51.722] [2022-01-08 01:01:51.722] test>
为了三重确保,没有一些代码指针在驱动程序库中调用 serviceWatchdog 函数,我进入并更改了该键的定义,因此调用该键将失败。 正如预期的那样,这一点没有任何改变。
您好,马丁,
我不确定您如何打印 WD 配置值。 您是否在连续循环中运行它? 我看到计数值有一段时间在下降而不是增加,例如从16上升到1,后来从215上升到209。 有什么想法为什么会这样。
如果 WD 计数器达到0xFF 值,您还能检查您的代码吗? 基本上,您只需在循环中读取计数器寄存器,当计数器的值为0xFF 时,打印所有设置,包括计数器值。
此致,
维耶克·辛格
我有一台运行在目标上的测试监视器,可以在其中键入命令
test>
是来自 trestmonitor 的提示
pm,r,d
是我键入的命令
DBG: WatchDog counter value = 232 DBG: WatchDog reset status = 0 DBG: Sys control and status register = 5 DBG: WatchDog KEY register = 7 DBG: WatchDog status register = E07 DBG: WatchDog Windowed status register = 0
是测试监视器的响应。
从时间戳(由 TeraTerm 记录器添加)中可以看出,这些命令之间有5到1个截面,因此预计计数器将在209 ms 后滚动,并将其配置为最大值。
我将执行建议的测试并返回。
好的,明白了。 此外,如果您能够对车载 XRSn 引脚进行示波,请同时分享该引脚的波形。
我进行了建议的测试,最终我使用了 GPIOs 来避免与 log_debug 的串行打印混在一起
我运行了以下代码:
while( 1 ) { if( 0xFF == SysCtl_getWatchdogCounterValue()) { GPIO_writePin( RELAY_2_PIN, 1 ); // Log_debug("W\r\n"); } else { GPIO_writePin( RELAY_2_PIN, 0 ); } if( 0x00 == SysCtl_getWatchdogCounterValue()) { GPIO_writePin( RELAY_1_PIN, 1 ); // Log_debug("0\r\n"); } else { GPIO_writePin( RELAY_1_PIN, 0 ); // Log_debug("0\r\n"); } }
我从中提取了这些范围转储
CH1:(橙色)是来自上述代码的 RELAY _2_PIN
CH2 (蓝色)。是来自上述代码的 RELAY _1_PIN
我的结论是,这台柜台的运行情况与预期的一样。
我将返回 XRSn 测量值。
这是 XRSn 引脚,图片来自 WD 设法重置 CPU 的其中一个,当它停止执行此操作时,XRSn 也会完全静音。
我读出的下拉时间为40 µs,这比您在 sysconfig 中的读数少得多
与 XRSn 的连接
请注意,IC700未安装,如果我们后来发现需要进行永久复位,则会将其放在原理图中以对 PCB 上的空间进行对焦。
因此,XRSn 仅连接到 R701和 C700,我们不使用它来重置任何其他设备。
马丁
[引用 userid="172948" url="~ë/support/icros/c2000-icro-group/c2f/c2000-icro-forum-forum/1067391/tms320f280023c-watchders-stops 触发/3951126#3951126"]我读出的下拉时间为40 µs,这比您在 sysconfig 中的读数少得多
[/引用]此处的 WDCLK 是10MHz 的 INTOSC1 (不是您所显示的),因此低脉冲应为51.2uS 或高。
我假设您正在您的定制板上尝试此操作。 如果您有 TI 主板,您可以在上面尝试一下,看看您是否仍有此问题? 如果您看到相同的问题,我将采集您的示例代码,并尝试在我的设置中重新生成它。
此致,
维耶克·辛格
µs,40 μ m 的距离仅仅是看不那么嘈杂的图形,所以51个声音在读数中是无噪声的。
但是,除了我不担心这段时间,我们也不会将这一信号用于任何目的,它只是让我感到震惊,它与 sysconfig 计算的结果相去甚远,看起来就像 sysconfig 中的一个错误。
关于到 TI 主板的端口,是的,这是在我们自己的主板上测量的,与我发布的示意图一样。
昨天我在一个 TI 电路板上做了快速测试,但这并没有显示错误,因此需要进一步调查。 我现在的日程安排非常紧,所以我不知道我是否能够这样做。
关于 TI 主板,我们使用的是 f280023,启动板使用的是 f280025c (不要认为我可以用 f280023获得启动板)。 这两块芯片上的硅有多相似?
谢谢马丁。
[引用 userid="172948" url="~/support/icles/c2000-iclers-group/c2f/c2000-iclms -forume/1067391/tms320f280023c-watch-stops -trigging/395187#395187184]关于 TI 主板,我们使用 f280023,启动板使用的是280023,启动板使用的是2800c (我不能想到的)。 这两个芯片上的硅有多相似?两者都是相同的,因此在使用这两种方法中的任何一种都没有问题。
此致,
维耶克·辛格
你(们)好
我今天花了大部分时间来将其最小化,但现在我有一组文件将在 LUNCHXL-F280025C 上显示错误。
我可以在这里引用源的主要部分,但如果这不足以让您复制,请建议我如何将所有文件发送给您。
我做了一个小的主电源,首先打开红色 LED 指示灯一小段时间,然后它开始闪烁绿色 LED 指示灯。
这意味着红色 LED 闪烁表示刚刚发生重置,闪烁的绿色 LED 指示主回路正在运行。
运行此程序时,我观察到红色 LED 指示灯闪烁,表示看门狗工作正常,但经过一段时间(2-30秒),红色 LED 指示灯停止工作,只有绿色闪烁,表示看门狗停止工作,主循环正在运行。
Watchds_init()之前的延迟对该故障具有重大影响。我尝试了绕过延迟和/或更改延迟。
与 我们用作偏移量的 C200Ware 示例项目相比,device_init()几乎没有变化,您可以使用 LED_ex1_Bibky。
主片段:
#include "device.h" #include "driverlib/sysctl.h" #include "driverlib/gpio.h" #include "driverlib/interrupt.h" /// @privatesection // ---------------- Local constants (#define) --------------------------------- // LEDs #define DEVICE_GPIO_PIN_RED_LED 31U // GPIO number for LED4 #define DEVICE_GPIO_PIN_GREEN_LED 34U // GPIO number for LED5 /// @privatesection // ---------------- Local type declarations (typedef) ------------------------- /// @privatesection // ---------------- Local data definitions (static) --------------------------- /// @privatesection // ---------------- Local function declarations (static) ---------------------- static void WATCHDOG_init(); /// @publicsection // ---------------- Public function definitions (implementation) -------------- /** * @brief Entry point of the powermicro software. */ void main( void ) { // Initialize device clock and peripherals Device_init(); // Initialize GPIO and configure GPIO pins for CANTX/CANRX GPIO_setPadConfig(DEVICE_GPIO_PIN_RED_LED, GPIO_PIN_TYPE_STD); GPIO_setDirectionMode(DEVICE_GPIO_PIN_RED_LED, GPIO_DIR_MODE_OUT); GPIO_setPadConfig(DEVICE_GPIO_PIN_GREEN_LED, GPIO_PIN_TYPE_STD); GPIO_setDirectionMode(DEVICE_GPIO_PIN_GREEN_LED, GPIO_DIR_MODE_OUT); // Board initialization // This is not needed but it makes the fault happen way more frequent, without it you may need to wait for an hour or more ?? // This delay was originally part of the ADC_init also generated by sysconfig, (adc setup need to wait for a voltage regulator to stabelize) DEVICE_DELAY_US(5000); EALLOW; WATCHDOG_init(); EDIS; GPIO_writePin(DEVICE_GPIO_PIN_RED_LED, 0); DEVICE_DELAY_US(50 * 1000L); GPIO_writePin(DEVICE_GPIO_PIN_RED_LED, 1); for(;;) { // Turn on LED GPIO_writePin(DEVICE_GPIO_PIN_GREEN_LED, 0); // Delay for a bit. DEVICE_DELAY_US(50 * 1000L); // Turn off LED GPIO_writePin(DEVICE_GPIO_PIN_GREEN_LED, 1); // Delay for a bit. DEVICE_DELAY_US(50 * 1000L); } } /// @privatesection // ---------------- Local function definitions (static implementation) --------------- /** * Copied from sysconfig generated code */ static void WATCHDOG_init(){ //WATCHDOG initialization // EALLOW; SysCtl_disableWatchdog(); SysCtl_setWatchdogMode(SYSCTL_WD_MODE_RESET); SysCtl_setWatchdogPredivider(SYSCTL_WD_PREDIV_128); SysCtl_setWatchdogPrescaler(SYSCTL_WD_PRESCALE_64); SysCtl_setWatchdogWindowValue(0); SysCtl_enableWatchdog(); // EDIS; }
您好,马丁,
我在 LAUNCXL-F280025C 上尝试了您的项目,但无法重现该问题(即始终看到红色闪烁)。 您可以共享“设备初始化();'函数吗? 我认为这是唯一一个可能有所不同的事情。
最佳
凯文
不要认为这是设备初始化,它与闪烁示例相同。 但也许是链接器文件。
我可以通过什么方式将整个项目发送给您?
MEMORY { // Mx Ram, Dedicated CPU ram. BEGIN : origin = 0x080000, length = 0x00000002 BOOT_RSVD : origin = 0x00000002, length = 0x00000126 RAMMx : origin = 0x00000128, length = 0x000006D0 // RAMMx_RSVD : origin = 0x000007F8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */ /* Local Shared RAM, shared to CPU, HIC and BGCRC */ RAMLS : origin = 0x0000A000, length = 0x00002000 /* Global Shared RAM, shared to CPU, HIC and DMA */ RAMGS : origin = 0x0000C000, length = 0x000007F8 // RAMGS_RSVD : origin = 0x0000C7F8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */ // PIE_VECTOR_TABLE : origin = 0x0000D000, length = 0x00000200 // TI_OTP : origin = 0x00070000, length = 0x00000400 // DCSM_OTP : origin = 0x00078000, length = 0x00000400 /* on-chip Flash */ FLASH_BANK0 : origin = 0x00080002, length = 0x00007FEE // FLASH_BANK0_RSVD : origin = 0x0008FFF0, length = 0x00000010 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */ BOOT_ROM : origin = 0x003F0000, length = 0x00008000 BOOT_ROM_EXT : origin = 0x003F8000, length = 0x00007FC0 RESET : origin = 0x003FFFC0, length = 0x00000002 } SECTIONS { codestart : > BEGIN, ALIGN(8) .text : > FLASH_BANK0, ALIGN(8) .cinit : > FLASH_BANK0, ALIGN(8) .switch : > FLASH_BANK0, ALIGN(8) .reset : > RESET, TYPE = DSECT /* not used, */ .stack : > RAMMx .init_array : > FLASH_BANK0, ALIGN(8) .bss : >> RAMLS | RAMGS .bss:output : >> RAMLS | RAMGS .bss:cio : >> RAMLS | RAMGS .const : > FLASH_BANK0, ALIGN(8) .data : >> RAMLS | RAMGS .sysmem : > RAMLS | RAMGS // ramgs0 : > RAMGS0 /* Allocate IQ math areas: */ // IQmath : > RAMLS // IQmathTables : > RAMLS .TI.ramfunc : LOAD = FLASH_BANK0, RUN = RAMGS, LOAD_START(RamfuncsLoadStart), LOAD_SIZE(RamfuncsLoadSize), LOAD_END(RamfuncsLoadEnd), RUN_START(RamfuncsRunStart), RUN_SIZE(RamfuncsRunSize), RUN_END(RamfuncsRunEnd), ALIGN(8) } /* //=========================================================================== // End of file. //=========================================================================== */
//############################################################################# // $TI Release: F28002x Support Library v3.04.00.00 $ // $Release Date: Fri Feb 12 18:58:34 IST 2021 $ // $Copyright: // Copyright (C) 2021 Texas Instruments Incorporated - http://www.ti.com/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions // are met: // // Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // // Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the // distribution. // // Neither the name of Texas Instruments Incorporated nor the names of // its contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // $ //############################################################################# /** * @copyright Confidential property of Danfoss Drives A/S 2021-2022. All Rights Reserved. * @copyright (C) 2021 Texas Instruments Incorporated - http://www.ti.com/ * * @defgroup DEVICE TMS32F28002x device module. * @{ * @brief Collection of device specific functions for TMS32F28002x micro controllers. * @inlayer HA_LAYER * * @file */ // ---------------- Dependencies (#include) needed by the implementation ------ #include "device.h" // Always my own interface first #include "driverlib/sysctl.h" #include "driverlib/asysctl.h" #include "driverlib/flash.h" #include "driverlib/gpio.h" #ifdef __cplusplus using std::memcpy; #endif /// @privatesection // ---------------- Local constants (#define) --------------------------------- /// @privatesection // ---------------- Local type declarations (typedef) ------------------------- /// @privatesection // ---------------- Local data definitions (static) --------------------------- /// @privatesection // ---------------- Local function declarations (static) ---------------------- /// @publicsection // ---------------- Public function definitions (implementation) -------------- /** @brief Initialize the device. * Primarily initializes system control to a known state by disabling the watchdog, * setting up the SYSCLKOUT frequency, and enabling the clocks to the peripherals. */ void Device_init( void ) { // Disable the watchdog SysCtl_disableWatchdog(); #ifdef _FLASH // Copy time critical code and flash setup code to RAM. This includes the // following functions: InitFlash(); // // The RamfuncsLoadStart, RamfuncsLoadSize, and RamfuncsRunStart symbols // are created by the linker. Refer to the device .cmd file. memcpy( &RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize ); // Call Flash Initialization to setup flash waitstates. This function must // reside in RAM. Flash_initModule( FLASH0CTRL_BASE, FLASH0ECC_BASE, DEVICE_FLASH_WAITSTATES ); #endif // Set up PLL control and clock dividers SysCtl_setClock( DEVICE_SETCLOCK_CFG ); // Make sure the LSPCLK divider is set to the default (divide by 4) SysCtl_setLowSpeedClock( SYSCTL_LSPCLK_PRESCALE_4 ); // These asserts will check that the #defines for the clock rates in // device.h match the actual rates that have been configured. If they do // not match, check that the calculations of DEVICE_SYSCLK_FREQ and // DEVICE_LSPCLK_FREQ are accurate. Some examples will not perform as // expected if these are not correct. ASSERT( SysCtl_getClock(DEVICE_OSCSRC_FREQ) == DEVICE_SYSCLK_FREQ ); ASSERT( SysCtl_getLowSpeedClock(DEVICE_OSCSRC_FREQ) == DEVICE_LSPCLK_FREQ ); #ifndef _FLASH // // Call Device_cal function when run using debugger // This function is called as part of the Boot code. The function is called // in the Device_init function since during debug time resets, the boot code // will not be executed and the gel script will reinitialize all the // registers and the calibrated values will be lost. // Sysctl_deviceCal is a wrapper function for Device_Cal // SysCtl_deviceCal(); #endif // Turn on all peripherals Device_enableAllPeripherals(); // Lock VREGCTL Register // The register VREGCTL is not supported in this device. It is locked to // prevent any writes to this register ASysCtl_lockVREG(); } /** * @brief Turn on all peripherals. * enabling the clock to the peripherals' registers. * * @note That to reduce power, unused peripherals could be disabled.<br> * But this is not a battery powered device so we let them all be on. */ void Device_enableAllPeripherals( void ) { SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_DMA ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_TIMER0 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_TIMER1 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_TIMER2 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_CPUBGCRC ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_HRCAL ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_TBCLKSYNC ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_ERAD ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_EPWM1 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_EPWM2 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_EPWM3 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_EPWM4 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_EPWM5 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_EPWM6 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_EPWM7 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_ECAP1 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_ECAP2 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_ECAP3 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_EQEP1 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_EQEP2 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_SCIA ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_SPIA ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_SPIB ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_I2CA ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_I2CB ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_CANA ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_ADCA ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_ADCC ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_CMPSS1 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_CMPSS2 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_CMPSS3 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_CMPSS4 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_FSITXA ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_FSIRXA ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_LINA ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_LINB ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_PMBUSA ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_DCC0 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_DCC1 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_CLB1 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_CLB2 ); SysCtl_enablePeripheral( SYSCTL_PERIPH_CLK_HICA ); } /** * @brief Disable pin locks on GPIOs. */ void Device_initGPIO( void ) { // Disable pin locks. GPIO_unlockPortConfig( GPIO_PORT_A, 0xFFFFFFFF ); GPIO_unlockPortConfig( GPIO_PORT_B, 0xFFFFFFFF ); GPIO_unlockPortConfig( GPIO_PORT_H, 0xFFFFFFFF ); } /** @brief Error handling function to be called when an ASSERT is violated * * @param filename File name in which the error has occurred * @param line Line number within the file */ void __error__( char *filename, uint32_t line ) { (void)filename; (void)line; // An ASSERT condition was evaluated as false. You can use the filename and // line parameters to determine what went wrong. ESTOP0; } /// @privatesection // ---------------- Local function definitions (implementation) --------------- /** @} group*/
尝试同时添加页眉,但得到了此信息
您无权访问此服务器上的“”>e2e.ti.com/.../configure。
参考编号:18.7c85655f.1642019252.aad9419
尝试在新帖子中使用标题
不会再去了
您无权访问此服务器上的“”>e2e.ti.com/.../configure。
参考#18.7c85655f.1642019332.aaee0b9.
如果我可以将项目上载到其他地方,会节省我们的时间。
马丁
您应该能够导出项目文件并发送 zip 文件。
此致,
维耶克·辛格
您好,马丁,
我尝试了您提供的链接器 CMD 和 device.c 文件,但仍无法重现该问题。
如 Vivek 所述,您可以通过右键单击项目名称-->选择导出-->浏览对话框,直接在 CCS 中导出 zip 文件。
最佳
凯文
我的问题不是创建文件,而是在何处/如何发送文件。 也许森林阻止了我对树的看法,但我在这里找不到任何地方可以附加文件到本案例中,我尝试单击您的姓名之一,看看我是否可以这样发送文件,但没有找到方法。
你(们)好
如果这是一件批量生产的事情,我在这里附上一张午餐板芯片的图片。
由于您在董事会和启动板上观察到这一问题,我认为这一问题不是特定于批量处理的。
马丁
是否可以尝试插入-->图像/视频/文件-->选择您的压缩文件?
最佳
凯文
这是一个黑客;-) 我会尝试
e2e.ti.com/.../WD_5F00_fail_5F005F00_mao_5F00_at_5F00_danfoss_5F00_com.zip
缝合效果
您将在以下位置找到该项目:
\watchder_fault\product\powermmicro\lowPower\
我知道有些奇怪的路,但这是一个被猜测的项目的遗迹
您好,马丁,
感谢上传。
我按目前的方式尝试了您的项目,但它没有从 Flash 独立运行。 在将“_flash”添加到预定义符号后,它似乎工作正常。
您能否检查项目中是否定义了此符号? 它在 Device_init()中被引用,用于将代码从闪存复制到 RAM。
最佳
凯文
请使用默认配置(尽管命名)。
我还对整个文件夹结构进行了压缩,因此在默认文件夹中,您可以找到编译器中产生的二进制文件以供参考。
您好,马丁,
我尝试了“默认”配置,我可以重现您的问题。 现在了解原因。
您是否知道您在工作的“默认启动板”配置和非工作的“默认”配置之间有何具体区别? 我将进一步了解一下“默认”配置。
最佳
凯文
射线:-)
我很久没有使用“默认启动板”配置,我以为我已经删除了它,这是在我们获得自己的硬件之前,项目启动很早的一种恢复。 因此,请忽略这一点。
正如我在消息来源中提到的,在我初始化看门狗之前的延迟似乎对故障有很大影响。
您好,马丁,
我认为这与 CCS 项目的优化设置有关。 我尝试了以下设置,它似乎正常工作,请也尝试。
我通过比较“默认启动板”和“默认”配置的编译器设置找到了这一点。
最佳
凯文
我可以确认优化设置对问题有影响。
我以 OPT 级别1运行,在10-100重置后看到问题。
如果我尝试您的选择级别关闭建议,我到目前为止已看到问题。
但有趣的是,如果我将选项级别设置为0,问题很快就会出现,即白令0-2重置,我实际上已经手动重置了几次,直到看到看门狗重置发生。
我尝试在单个文件上设置优化级别,结果发现,如果将项目设置为 opt = offf,并且将 powermmicro.c 设置为 opt = 1,则错误会再次出现。
所有这些都不能解释为什么重置之间的行为不同。 但希望它能为您带来一些东西。
您好,马丁,
我们审查了优化的代码,发现在 watcher_init 函数中,所有要注册的写入都有 EALLOW 和 EDIS 代码,优化将删除并替换为一个 EALLOW,然后是所有寄存器写入,然后是 EDIS。 这会创建对 WDCR 寄存器的背对背写,该寄存器有一些限制,因此会产生问题。 我在 WD 启用码之前插入了几个 NOPS,这解决了问题。
请参阅以下代码快照-
此致,
维耶克·辛格
看起来很棒,我认为这是一个可行的结论,可以解释为什么它在重置之间有所不同。
现在,TI 希望您与一些芯片设计人员联系
当设置这些寄存器的正确算法被 knwon 时,请更改 syslib 以遵守此规则。
供参考。 根据您的解决方案,我对我的代码进行了类似的更改,代码已经运行了几个小时,没有任何故障。
static void WATCHDOG_init(){ //WATCHDOG initialization EALLOW; SysCtl_disableWatchdog(); SysCtl_setWatchdogMode(SYSCTL_WD_MODE_RESET); SysCtl_setWatchdogPredivider(SYSCTL_WD_PREDIV_128); SysCtl_setWatchdogPrescaler(SYSCTL_WD_PRESCALE_64); SysCtl_setWatchdogWindowValue(0); SysCtl_delay(10); SysCtl_enableWatchdog(); EDIS; }
主要区别是我使用 sysctl_delay 函数。
您好,马丁,
[引用 userid="172948" url="~/support/icros/c2000-icro-group/c2f/c2000-微控制器-forume/1067391/tms320f280023c-watchdits-stops -trigger/3956476#3956476"]确认此问题为问题是的,这是一个问题,我们对此有待定操作,以更新我们的文档和软件。
[引用 userid="172948" url="~ë/support/icles/c2000微控制器-组/CC2000 /f/c2000微控制器-论坛/1067391/tms320f280023c-watcher-stops 触发/3956476#3956476"] 8 NOP 在所有情况下都足够,或者只是幸运吗?我们将获得此信息并进行更新。
[引用 userid="172948" url="~/support/icros/c2000微控制器-group/c2000 /f/c2000微控制器-forume/1067391/tms320f280023c-watchdits-stops -trigger/3956476#3956476"],我是否有任何状态寄存器可以检测到该故障状态?不,没有可供了解的状态寄存器。 这是我们需要防止并确保不会发生的错误之一。
[引用 userid="172948" url="~ë/support/intrans/c2000微控制器-组/CC2000 /f/c2000微控制器-论坛/1067391/tms320f280023c-watcher-stops -触发/3956476#3956476"]我使用 sysctl_delay 函数的主要区别。这是可以的(相当于50个以上周期),但一旦我们确认了最小周期数,您就可以更新它。
此致,
维耶克·辛格
您好,马丁,
这大约是背对背写之间所需的最小循环次数-
这是39个周期,如果延迟,您有50个以上周期,因此这应该是正常的。
此致,
维耶克·辛格
听起来不错。
您能提供更多的技术细节来解释原因,我需要一些东西来支持这项声明,以便在内部销售此解决方案。
您好,马丁,
请查看以下信息是否有帮助-
此信息将添加到设备文档中。
此致,
维耶克·辛格
这确实解决了我的问题,谢谢你。
但是,我有人建议您使用新文本,您已经在手册中引用了很多驱动程序库函数,因此我建议您在此处包含 sysctl_delay 的用法。 此外,由于插入 NOP 之类的汇编程序命令会影响优化程序,从而影响 C200编译器手册。
我还看到编译器反映了这一点:
如果我使用`asm (“ NOP”);`我从编译器中得到这条评论
由于使用了内嵌汇编 监视程序.c,此文件的链接时间优化被禁用
如果我使用 sysctl_delay(),我将不会收到任何注释。
尽管我的问题已经解决,但这只是一个友好的建议。 :-)
感谢马丁的投入。 我将把它传递给我们的软件团队。
[引用 userid="172948" url="~/support/icros/c2000-icro-group/c2f/c2000-iclot-forume/1067391/tms320f280023c-watchders-stops -trigger/3963294#3963294"]如果我使用`asm (“ NOP”);`我从编译器中得到这条评论
由于使用了内嵌汇编 监视程序.c,此文件的链接时间优化被禁用
[/引用]但我没有看到这条警告。 您是作为警告还是在编译器日志中获得此信息?
此致,
维耶克·辛格
这不是一个警告,而是一个评论。
只有在启用 optlevel 4链路时间优化时,才会出现这种情况。
因此,这不是一个大问题,但可能会造成一些性能损失。
我只是在对序列队列处理进行一些优化,在某种程度上,我尝试使用 DINT 而不是 Sci_disableInterrupt (),突然我在那里的表现大幅下降,这种说法的解释是资金问题。
人们可以考虑这句话是否正确
我想说这是一个优化建议,但这是另一天的讨论;-)
好的,谢谢。
此致,
维耶克·辛格