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.

[参考译文] RM44L920:使用 NMI 选项时、RTI 数字窗口式看门狗反应控制如何工作?

Guru**** 2528030 points
Other Parts Discussed in Thread: HALCOGEN, RM44L920

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/742894/rm44l920-how-does-the-rti-digital-windowed-watchdog-reaction-control-work-when-the-nmi-option-is-used

器件型号:RM44L920
主题中讨论的其他器件:HALCOGEN

Halcogen RTI.c 模块具有函数 dwwdInit (generate_Reset、PRELOAD 值、WindowSize)、当预加载值时间之后发生看门狗复位时、该函数将复位 CPU。

我已使用 Generate_NMI 参数向量关闭 TMS570处理器上的 esmNotification 函数、该函数可用于将应用程序在 WDT 过期时所在的 PC 拉离。

但在 RM44L920处理器上、generate_NMI 参数看起来完全禁用了看门狗、也就是说看门狗过期时不会向量输出任何内容。   RTI 看门狗状态寄存器指示看门狗已过期。   在本例中、我有一个永不退出的自旋环路。  

这个"Generate_NMI"参数是如何工作的来强制 RM44上的 NMI 中断的?   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Chris、
    在 HALCoGen 示例文件夹(..\Hercules \HALCoGen\v04.07.00\examples\RM44x\)中、您可以找到使用 DWDD 的示例(example_dwwd.c)。

    查看此示例是否对您有所帮助。

    此致、
    米罗
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你。 我没有启用通知、现在我获得了我所期望的 NMI。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    这种工作方式、但现在完全符合我的要求。 在 dwwdInit 中使用 Generate_NMI 时、我没有获得所需的 NMI。
    通过使用示例代码、我能够使 RTI Compare0中断关闭、我可以检查 WD I Guess 的状态、并在需要时复位 CPU。 但在570上、我得到了一个真正的 NMI、它使我可以转到 esmNotification 函数、而不涉及 RTI Compare0中断。

    我知道该组不会像我一样使用 RTI Compare0中断来实现此功能。 在 TMS570上、这个 NMI 的工作原理是、我已经查看了 ESM、启动和 RTI Halcogen 代码、并且我已经成功地将570函数替换到 RM44代码中。

    我还没有准备好结束这项工作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Chris、
    在这个示例中、rtiNotification 是为 DWD 提供服务(用 dwdReset()复位 DWD)。 如果不发生这种情况(当 RTIDWDKEY 寄存器未写入适当的值时)、则 DWD 会生成 NMI/复位。

    DWWD NMI 被分配给 ESM 组2通道24。 当该通道处于活动状态时、将生成 NMI。 为了激活 FIQ/NMI、必须清除 CSPR 位 F。

    此致、
    米罗
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Miro、今天我将介绍 ESM 组2并告诉您。 我在 TMS570处理器上有可以正常工作的代码、因此我有一个可以正常工作的示例。 我需要使其在 RM44和 RM46微控制器上正常工作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Miro、我发现了在处理看门狗 NMI 时为什么不清除 CPSR 位 F 标志。 在 TMS570中、Halcogen 文件 sci.c - InitSCI 生成了一对_disableInterrupt//_enableInterrupt_()。 Halcogen 版本4.06中删除了此项、因此我的 RM44项目从未启用此 CPSR 标志。 我能够清零该位、最终获得了预期的 NMI。

    但是- 0x1C 处的 NMI 向量具有代码 LDR PC、[PC、#-0x1b0]。 在 TMS570上、这将跳转到我的引导加载程序应用、在该应用中、我可以拉出 PC 并创建一个堆栈转储、以便我写入闪存。 函数是 esmHighInterrupt、然后调用我的自定义 esmSiemensNotification。 这在570项目上运行良好、但 RM44跳转现在转到我的应用程序的 esmHighInterrupt 版本。 这不会调用我的通知函数、即使确实调用了通知函数、我们的应用程序也不包含用于将其存储到闪存存储器的闪存库以及引导加载程序应用程序包含的其他功能。

    我可以通过将 LDR 指令替换为我的函数的直接分支来解决此问题-即 b esmHighInterrupt。 现在、这会转到预期的例程、一切都恢复正常。 但我的经理想知道为什么 RM44在这方面不同于570。 我在下载代码时发现该 FIQVECREG 包含错误的值。 这不是我在启动时可以执行的操作、当它加载时、它已经断开。 链接器命令文件中必须执行此操作。

    此外、行的目的是什么- LDR PC、[PC、#-0x1b0]。 是要分支到应用程序的 NMI 处理程序还是当前加载的应用程序、在我的本地引导加载程序中。

    你们非常乐于助人,我的工作实际上已经完成了,但是人们想知道为什么这是