DSP2812产生同组中断嵌套问题

2019-07-27 16:23发布

本人最近需要用2812的中断嵌套解决一个问题,经过验证不同组的中断可以通过EINT来实现中断嵌套。

而同组中断由于使用相同的应答位,所以当同组有一个中断在响应时(已经使能全局中断EINT),同组另一个中断被触发,ACK不能响应,所以无法实现中断嵌套,例如EVA外设在响应TIUFINT中断时(已有EINT),如果触发了TIPINT中断,不会发生中断嵌套,所以为了实现同组中断嵌套,在进入同组中某个intISR时,必须清除应答位和使能全局中断EINT。

我使用了EVA外设的T1UFINT和TIPINT中断,中断配置如下:

EvaRegs.GPTCONA.all = 0;

//打开T1UFINT的外设IFR和IER,以及PIE中的IFRIER
EvaRegs.EVAIMRA.bit.T1UFINT = 1;
EvaRegs.EVAIFRA.bit.T1UFINT = 1;

PieCtrlRegs.PIEIER2.bit.INTx6 = 1; /* T1UFINT */
PieCtrlRegs.PIEIFR2.bit.INTx6 = 0; /* T1UFINT */

/////////打开T1PINT的外设IFR和IER,以及PIE中的IFRIER///////
EvaRegs.EVAIMRA.bit.T1PINT = 1;
EvaRegs.EVAIFRA.bit.T1PINT = 1;

PieCtrlRegs.PIEIER2.bit.INTx4 = 1; /* T1PINT */
PieCtrlRegs.PIEIFR2.bit.INTx4 = 0; /* T1PINT */

IER |= M_INT2;

EvaRegs.T1PR = 7499;
EvaRegs.T1CON.all = 0x8842

中断子程序如下:

interrupt void T1UFintISR(void)

{

    ////低优先级的TIUFINT一旦响应,就复位PIEACK和外设中断标志位,以便同组的TIPINT中断可以顺利通过三级中断通道到达CPU来响应

     EvaRegs.EVAIFRA.all = BIT9;

    PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;
    EINT;

   T1UFINT();

}

interrupt void T1PintISR(void)

{

T1PINT();

//中断TIPINT()执行完后,清除外设中断标志和PIEACK。

EvaRegs.EVAIFRA.all = BIT7;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;

}

通过配置两个中断都实现了,但是中断嵌套确没有实现。按理说,上面的偏置应该可以使TIPINT中断可以打断TIUFINT中断,而反之不能。

不知道哪里出问题了!希望高手可以解答一下!谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。