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.

[参考译文] TMS320F28374:FPU 上溢/下溢中断的原因以及如何定位引起中断的指令

Guru**** 2535750 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/605675/tms320f28374s-cause-of-fpu-overflow-underflow-interrupt-and-how-to-located-the-which-instruction-caused-the-interrupt

器件型号:TMS320F28374S

大家好、

 我的客户使用 TMS320F28374作为主控制器、在使用过程中、INT12.y 报告了 FPU_overflow 或 FPU_underflow 中断。

 您能不能说明导致中断的原因? 另外、您能否向我们展示查找导致中断的指令的方法?  

 客户尝试使用汇编代码进入 ISR 并恢复 XARn 寄存器、但仍然无法找到指令(PC 指针)。

 期待您的回复、谢谢。

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

    一种方法是从堆栈中获取它。 如果您在 ISR 顶部设置了一个断点并查看 SP 寄存器、则应该能够向下浏览堆栈几个地址、并找到中断发生时被压入的返回程序地址。 它应该是从 SP 向下向下的14个字(即7个32位字)、但根据您的代码和编译器设置、您的 ISR 可能会在您到达中断点之前将其他数据压入堆栈、因此它可能是16个或更多字。

    打开内存浏览器以查看堆栈内存并从 SP 返回计数。 您应该在那里看到一个可行的地址、然后在反汇编窗口中找到代码行。

    此致、

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

    您好 Richard、

     更新客户反馈、您能不能帮助指出哪个值应该是找出 FPU 中断原因的正确值?

    非常感谢。

    此致

    Benjamine2e.ti.com/.../FPU-SP-Stack-_5F00_From-Customer.docx

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

    Benjamin、

    我看不到中断断点。  他是否编写了一个单独的 ISR 并将 BP 放置在内部?  如果不是、编译器可能会将其他内容压入栈、以便返回地址会进一步降低、正如我所说的。  

    打开一个拆分窗口以查看 ISR 中被压入的内容。  返回地址应为7个32位字、加上该入栈次数。  根据您的屏幕截图、我想说可能返回地址是0xC010或0x9 87C2。  

    BTW、如果您将存储器浏览器窗口设置为将栈显示为32位十六进制值、则可以更轻松地查看地址。

    此致、

    Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Richard、
    非常感谢您的热情支持。
    似乎客户使用了您提供的解决方案、该解决方案有助于找到正确的 PC 指针。

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

    很高兴这个帖子对我们很有帮助。 感谢您的告知。

    此致、

    Richard