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.

[参考译文] TMS320F2812:PDPINTB 意外发生

Guru**** 2538930 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/611515/tms320f2812-pdpintb-unexpectedly-occurs

器件型号:TMS320F2812

当任一信号变为低电平时、我尝试使用引脚/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。

 

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

     请查看数据表中的此注释: