尊敬的:
我将在我的项目中使用带定时器0 (INT1.7)和定时器1 (INT13)的嵌套中断。
计时器0是一个1ms 计时器、用于处理我的主状态机。 在此中断中、我启用中断、以便能够处理其他通信中断。
中断空 CPU_INT_TIMER_T0 (空)
{
//重新启用此中断以接收更多计时器中断
IER |=PIE_INT1;
//确认中断组以接收该组的更多中断
PieCtrlRegs.PIEACK.All=PI_INT1;
asm (" nop");
//允许重新输入
EINT;
//框架通用计时器中断
State_Machine ();
Dint;
}
定时器1用于在更改 RS485驱动器中的 GPIO 引脚之前增加延迟。 (设置硬件方向引脚)
中断空 CPU_INT_INT13 (空) { //根据需要调用应用程序计时器服务例程 RS485_InterruptRoutine(); //清除任何挂起的中断 IFR&=~PI_INT13; }
我所面临的问题是、在某些情况下(并非总是)、当在定时器1的中断中执行时、GPIO 被正确设置、但当退出定时器0中断时、GPIO 被设置回先前的状态。
1) 1)进入 Timer 0中断
2) 2)开始执行 State_Machine()代码
3) 3)进入定时器1中断
4)执行 RS485_InterruptRoutine ()
5) 5)退出计时器1中断、GPIO 发生变化
6)完成 State_Machine ()代码
7) 7)退出计时器0中断
8)此处、GPIO 会改回先前的状态
有人知道什么原因会导致这种情况? 我想这取决于中断计时 器1何时执行中断0的退出是否出错?
提前感谢。