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.

[参考译文] TMS320F280039C:如果在配置和激活之间没有应用延迟、则不会进行看门狗复位

Guru**** 2943350 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1423295/tms320f280039c-no-watchdog-reset-if-no-delay-applied-between-config-and-activation

器件型号:TMS320F280039C
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、但不会触发复位。

测试似乎表明、在配置看门狗模式时、有必要在激活看门狗之前应用一定的延迟、 否则、有时即使寄存器指示看门狗复位已启用、也不会发生复位。

您能确认问题吗?建议的解决方法是什么?

谢谢

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

    您好!

    器件 TRM 中有以下部分:

    Vivek Singh

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

    尊敬的 Vivek、

    谢谢、我发现类似的主题有相同的问题:

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1188459/tms320f280025c-watchdog-stops-triggering-or-never-triggers

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1067391/tms320f280023c-watchdog-stops-triggering/3963305?tisearch=e2e-sitesearch&keymatch=watchdog#3963305

    我不明白的是、 SysCtl_setWatchdogMode 函数将写入此列表中之外的 SCSR 寄存器。 如果我为配置看门狗模式添加注释行就没问题了。 寄存器 SCSR 是否必须在表3.15中?

    如另一位成员所述、软件看门狗是安全功能的一部分、而且软件看门狗并非总是配置正确也令人担忧。  所有寄存器都指示正常的看门狗操作/配置、但在某些情况下不会出现复位。

    也许一个勘误说明将有助于更好地识别为了正确配置看门狗而需要采取的预防措施

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

    您好、Nicolas、

    该问题与时钟域从 SYSCLK 交叉到 INTOSC1的寄存器具有限制有关。

    优化将影响寄存器写入的放置方式、因此您会看到行为的差异。  

    我不明白的是 SysCtl_setWatchdogMode 函数将写入此列表中之外的 SCSR 寄存器。 如果我为配置看门狗模式添加注释行就没问题了。 寄存器 SCSR 是否必须在表3.15中?[/QUOT]

    否、SCSR 不在 INTOSC1域中的寄存器列表中。

    我建议您使用最新的 c2000ware、其中我们在 driverlib 函数本身中添加了每次寄存器写入后的延迟。

    示例:

    谢谢。

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

    Prarthan、您好

    谢谢、我可以确认、如果我们在 v5.2中使用 C2000Ware 库、则没关系。

    是否有每个版本的 C2000Ware 中修复的完整错误列表?

    例如 、在 v5.2和 v5.3之间、我可以找到 SPI 的变化  

    或在 SYSCTL 中添加的另一个延迟:

    但没有详细介绍发布说明  

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

    您好、Nicolas、

    或在 SYSCTL 中添加了另一个延迟:

    在我们刚刚创建延迟定义之前、SYSCTL 延迟已经存在、可实现更好的代码结构。

    例如 、在 v5.2和 v5.3之间、我可以找到 SPI 的更改 

    如果您可以创建一个仅针对5.3更改的发行说明查询的主题、我们会将该主题分配给软件团队、并根据需要要求进一步说明。

    谢谢