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.

[参考译文] CCS/LAUNCHXL2-RM57L:中断处理问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/575493/ccs-launchxl2-rm57l-interrupt-handling-question

器件型号:LAUNCHXL2-RM57L

工具/软件:Code Composer Studio

我对 Code Composer Studio 中的 INTERRUPT (func、IRQ/FIQ) pragma 有一个小问题。

我正在使用 RM57Lx LaunchPad 并成功创建中断,但注意到在子例程期间调用中断时出现了问题;一旦中断被处理并返回到被调用函数,它就永远不会离开该函数(main loop->function->interrupt->function->function->function->function->....)。 后来我发现、这是因为 ARM Cortex-R4/R5处理器只有一个 SPSR 和 LR 寄存器、所以在中断后、LR 永远不会被正确恢复。 我找到的解决 方案(在 spnA219:www.ti.com/.../spna219.pdf 中找到它)、但我从未使用它(它从未输入 irqDiscpitch_a.asm 文件、因此堆栈从未与推送/弹出文件一起保存)。 仍然想弄清楚为什么它不能与我的项目配合使用、而是使用示例项目、但我可以稍后处理。

无论如何、当我在 ISR 函数之前放入 INTERRUPT pragma 指令时、推送/弹出内容似乎已实现、并且我不会卡在被调用函数中。 那么、我的问题是 INTERRUPT pragma 到底有什么作用? 对于 MCU 来说仍然相当新、尤其要注意推送/弹出功能等较低级别的功能。  

此外、如果有人知道如何在自定义汇编/C 文件中实施推送/弹出文件并使其正常工作、我们将不胜感激。 我附加了一个.zip、其中包含使用该方法的示例工程(而不是#pragma 中断)。

谢谢

-Maxe2e.ti.com/.../5074.example_5F00_proj.zip

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

    感谢您使用 Hercules 论坛。 我手头上没有所有的信息可以立即回答您的问题、但如果我有机会深入探究一下、我将与您再次联系。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Hanson、

    我们建议您始终对应用程序中的所有 ISR 使用#PROGMA 中断。 它指示编译器为中断函数生成代码(寄存器保存和恢复)。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、这是我的想法、但我只是想确保 这包含了#pragma INTERRUTP 正在执行的操作。

    谢谢!
    最大