当任一信号变为低电平时、我尝试使用引脚/C4TRIP 和/C5TRIP 来触发 PDPINTB。 我在公司中违反惯例的新电路板使用了/TC3TRIP_PDPINTB 和/TC1TRIP_PDPINTA 作为 GPIO。 我在初始化后遇到意外的 PDPINTB 中断。 我在 ISR 中设置了一个断点、 并且此中断的 EvbRegs.EVBIIFRA.bit.PDPINTB=0。 未来所有合法的中断都有 EvbRegs.EVBIFRA.bit.PDPINTB=1。 我在该意外中断中验证了 C1TRIPE、C2TRIPE、C3TRIPE、C6TRIPE、T1CTRIPE、 T2CTRIPE、T3CTRIPE 和 T4CTRIPE 都为零、BeSides C4TRIPE 和 C5TRIPE 应该为1、并且由于/TC3TRIP_PDPINTB 是 GPIO、此中断是否有任何其他源?
以下是我的初始化代码:
// //名称:InitC4C5Trip //说明:设置 C4Trip 和 C5Trip //参数:无 // #pragma CODE_SECTION (InitC4C5Trip、"ramfuncs") void InitC4C5Trip (void) { //------------------- //启用 C4TRIP 和 C5TRIP 中断 //--------------- EALLOW; GpioMuxRegs.GPBMUX.bit.C4TRIP_GPIOB13=1;//用作外设 GpioMuxRegs.GPBMUX.bit.C5TRIP_GPIOB14=1;//用作外设 EDIS; //--- // C4C5Trip_IRQ 中断设置 //------------------------------------ EALLOW; PieVectTable.PDPINTB =&PDP_B_IRQ; PieVectTable.PDPINTA =&PDP_A_IRQ; EDIS; IER |= M_INT1; //---------------------------------- // PDPINT 设置中断屏蔽和标志 //--------------- EvbRegs.EXTCONB.bit.INDCOE = 1; EvaRegs.COMCONA.bit.C1TRIPE = 0; EvaRegs.COMCONA.bit.C2TRIPE = 0; EvaRegs.COMCONA.bit.C3TRIPE = 0; EvaRegs.GPTCONA.bit.T1CTRIPE = 0; EvaRegs.GPTCONA.bit.T2CTRIPE = 0; EvbRegs.COMCONB.bit.C4TRIPE = 1; EvbRegs.COMCONB.bit.C5TRIPE = 1; EvbRegs.COMCONB.bit.C6TRIPE = 0; EvbRegs.GPTCONB.bit.T3CTRIPE = 0; EvbRegs.GPTCONB.bit.T4CTRIPE = 0; PieCtrlRegs.PIEIER1.bit.INTx2 = 1;// PDPINTB //--- // PDPINT 设置中断屏蔽和标志 //--------------- EvbRegs.EVBIFRA.bit.PDPINTB = 1;// PDPINTB、IRQ 标志寄存器、复位中断标志 EvbRegs.EVBIMRA.bit.PDPINTB = 1;// PDPINTB、IRQ 屏蔽寄存器、启用中断 }
勘误表 SPRZ193N 第4.1.1节提到:
"用于嵌套中断的某些代码序列允许 CPU 和 PIE 进入不一致的状态、从而触发不需要的中断。 进入此状态所需的条件为:
1. PIEACK 清除后立即启用全局中断(EINT 或 ASM (" CLRC INTM")。
2.嵌套中断清除其组的一个或多个 PIEIER 位。"
但是,我不认为我有这种情况。 是否有人看到了这个问题、希望能解决这个问题?
如果我无法解决此问题、我认为我的潜在解决方法是返回到我的硬件工程师、让他通过连接 到/T1CTRIP_PDPINTA 的 OR 门运行/C4TRIP 和/C5TRIP 引脚、并使用/C5TRIP 作为 GPIO。
