您好、
我目前正在处理 TMS570的 RTI 数字看门狗、我正在努力找到有关我的问题的正确信息。
我希望能够在触发 DWD 复位之前读出最后一个返回地址、这样我就可以看到代码在哪里"运行"。 为此、我目前正在设置 DWD、以便它触发中断而不是直接复位。 在系统复位且内存重新初始化后、从 esmGroup2Notification 中断例程 I 写入 r14寄存器值到 EEPROM 以便可以访问该寄存器。 将地址存储到 EEPROM 后、我通过写入 SYSECR 寄存器来触发复位。 此外、我编辑了 HL_system.getResetSource 函数来同时检查看门狗状态寄存器、以便它能够确定复位实际上是由看门狗违反引起的。 复位完成且系统重新初始化后、我只需从 EEPROM 读取地址即可。
到目前为止、这似乎工作正常、感觉是一种很好的变通办法、但我的三个问题是:
Q1:是否建议采用其他方法、在触发 DWD 复位之前获取最新的返回地址?
Q2:根据我的理解、由 DWD 违反引起的 NMI 是一个已经具有高优先级的 FIQ。 这是否意味着它将中断发生违规时可能正在运行的所有 IRQ?
问题3:在违规时可能正在运行的 FIQ 如何?
Q2和 Q3或多或少连接、因为我想确保 DWD 违反具有最高优先级、 并且将被处理、而不是在 esmGroup2Notification Handler 内部引起复位。 我担心的是、另一个中断可能会"运行"并导致系统挂起、这应该由 DWD 注意并处理。 到目前为止,我还无法从手册中得到这方面的答案。
谢谢、Alex