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.

[参考译文] TMS570LC4357:DWWD 会导致重复复位

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1026560/tms570lc4357-dwwd-causes-repeated-resets

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGENTMDX570LC43HDK

您好!

我在 C:\ti\hercules\HALCoGen\v04.07.01\examples\TMS570LC43x\example_dwwd.c 中的示例 dwwd 代码出现问题

在将 generate_NMI 传递给 dwwdInit()的原始形式中,它看起来工作正常。

但是,我已将其更改为将 Generate_Reset 传递到 dwwdInit()。

现在、在第一次复位发生并且软件重新启动后、它到达到对 dwdCounterEnable (rtiREG1)的调用并且再次复位。

当它无限期地调用 dwCounterEnable (rtiREG1)时、它复位。

为什么它以这种方式运行?

如何停止这些重复复位?

谢谢你。

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

    尊敬的 Andrew:

    这是预期行为。 如果未在定义的窗口中输入狗、看门狗将重置器件。  

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

    您好、QJ Wang、

    感谢你的答复。

    我知道、如果看门狗未被馈送、器件将复位、但我不相信这是我的问题。

    首次启动后、我的测试代码调用
       dwwdInit( rtiREG1,generate_Reset,0,size_100_percent );
       dwdCounterEnable( rtiREG1 );

    然后、它在看门狗停止馈送之前向看门狗馈送5秒钟、从而使器件按预期复位。

    复位后、器件将再次启动、我希望器件的运行方式相同、即调用 dwwdInit()和 dwdCounterEnable()、然后在复位前馈入看门狗5秒钟。

    但它不会。 它在调用 dwdCounterEnable( rtiREG1 )时立即复位。

    看门狗未将器件置于其初始状态是否会导致复位?

    看门狗复位后、器件是否无法恢复?

    此致、

    Andrew

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

    尊敬的 Andrew:

    DWWD 到期时间为(DWDPRE+1)*2^13/RTICLK。 在您的配置中、DWDPRD=0、假设 RTICLK=75MHz、Texpire=2^13/75MHz=109us。  

    因此必须在109us 内为看门狗提供服务。 否则、将生成 NMI 或复位。

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

    您好 QJ、

    当在 TMDX570LC43HDK 开发套件上运行软件并使用调试器时、我注意到当 WDRST 被置位时、系统异常状态寄存器(SYSESR)中的 EXTRST 位没有被置位。

    我意识到这不是正确的行为、但您是否知道它为什么会这样做?

    当 WDRST 被置位时 EXTRST 不被置位的结果是 getResetSource()返回 NO_RESET。

    请注意、当 PORST 或 DBGRST 被置位时、EXTRST 位被置位。

    此致、

    Andrew

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

    尊敬的 Andrew:

    在看门狗复位后 EXTRST 位被置位。

    这是我的测试的快照、SYSESR=0x2808 ->位3被置位

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

    您好 QJ、

    在_c_int00()中,我在 rstSrc = getResetSource()的调用中有一个断点,并且我运行调试器。
    第一次达到断点时。

    SysEr 为0x00000808、如下所示。

    然后、我按 Resume、我的应用程序将运行、直到看门狗过期、中断点再次被命中。

    现在 SysEr 为0x00002800、如下所示。 WDRST 被置位、EXTRST 没有被置位。

    此时我希望 EXTRST 被置位。 我是否正确期望 设置 EXTRST? 如果不是、为什么不呢?

    然后、我再次按 Resume、我的应用程序将运行、直到看门狗过期、并且再次点击断点。

    现在 SysEr 为0x00002000、如下所示。 WDRST 被置位但 EXTRST 没有(DBGRST 已经被 getResetSource()清除)。

    如果我然后重新启动调试器、则在第一次达到中断点时、SysEr 现在为0x00002808。

    为什么第一次设置 WDRST 时 EXTRST 不置位?

    为什么只有在调试器启动后才设置 EXTRST?

    谢谢你。

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

    当 WDRST 发生时、EXTRST 应该被置位。 在代码进入 getResetSource()函数之前,您是否检查了 SYSESR 值?

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

    您好 QJ、

    是的。

    上面的第二个屏幕截图显示了代码进入 getResetSource()函数之前 SYSESR 的值。

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

    由于不活动而关闭此线程。 如果问题仍然存在或出现其他问题、请打开新主题。