尊敬的 C2000专家:
我使用 C 函数作为 ISR 入口、并希望在 C ISR 中调用汇编函数。 但是我发现、如果我在汇编函数的开头使用 ASP 指令、在函数的末尾使用 NASP 指令、那么 PC 就不能恢复到中断前的值。 您能告诉我原因吗? 使用 ASP/NASP 指令的限制是什么?
我的代码如下所示:
用于 ISR 入口的 C 函数:
//
// epwm1_timer_ISR -此示例中使用的中断例程
//
_interrupt void
epwm1_timer_ISR (空)
{
EPwm1TimerIntCount++;
Assembly_func();
//
//清除此计时器的 INT 标志
//
EPwm1Regs.ETCLR.bit.INT = 1;
//
//确认此中断以接收来自组3的更多中断
//
PieCtrlRegs.PIEACX.ALL = PIEACK_Group3;
}
2.汇编函数代码:如果 ASP 和 NASP 指令在函数中、则在 ISR 完全执行后、PC 无法恢复为正确的值。
;标签到_assembly_func 函数
.def _assembly_func
.text
汇编_func:
;上下文保存
ASP
按 AR1H:AR0H
按 XAR2
按 XAR3
按 XAR4
按 XAR5
按 XAR6
按 XAR7
按 XT
;--------------
;完整的上下文恢复
弹出 XT
弹出 XAR7
弹出 XAR6
弹出 XAR5
弹出 XAR4
弹出 XAR3
弹出 XAR2
弹出 AR1H:AR0H
NASP
LRETR;使用 RPC 的长返回
此致、
插孔