工具/软件: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 中断)。
谢谢