TI中文支持网
TI专业的中文技术问题搜集分享网站

F28035中断嵌套问题

请问下,关于中断嵌套方面需要做哪些处理。

我项目上,有两个中断。中断A和中断B。B优先极高。

当A在执行中断函数,B可以打断,进入B的中断,这时候A的堆栈是否需要软件手动保留?还是自动压栈?

如果是自动压栈,A执行完中断后就会回到B的中断,最后回到最初压栈的地方?

我可否这么理解:

      只需要在A的中断函数里第一行就清除所有中断标志位,打开所有除了A中断的中断?这样就可以优先级高的B中断就没问题了?

     B中断函数按照正常中断来就行。不可以被打断?

Seven Han:

您好,

可参考WIKI链接:http://processors.wiki.ti.com/index.php/Interrupt_Nesting_on_C28

以及例程:C:\ti\controlSUITE\device_support\f2803x\v130\DSP2803x_examples_ccsv5\sw_prioritized_interrupts

请问下,关于中断嵌套方面需要做哪些处理。

我项目上,有两个中断。中断A和中断B。B优先极高。

当A在执行中断函数,B可以打断,进入B的中断,这时候A的堆栈是否需要软件手动保留?还是自动压栈?

如果是自动压栈,A执行完中断后就会回到B的中断,最后回到最初压栈的地方?

我可否这么理解:

      只需要在A的中断函数里第一行就清除所有中断标志位,打开所有除了A中断的中断?这样就可以优先级高的B中断就没问题了?

     B中断函数按照正常中断来就行。不可以被打断?

Emma Wang:

您好,

我们设定中断A使用ADCINT2,中断B使用ADCINT1。

这样中断B的优先级高于中断A。

B中断,代码与平时无异:

interrupt void B(void)

{

          //user code

AdcRegs.ADCINTFLGCLR.all = 0x1;               //Clear interrupt flag;

PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;

AdcRegs.ADCINTFLGCLR.all = 0x1;               //Clear interrupt flag;

}

在被打断的A中断中,代码修改如下:

interrupt void A(void)

{        volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all;

IER |= M_INT1;

IER &= M_INT1;

PieCtrlRegs.PIEIER1.all &= 0x01; // Only allow ADCINT1 to interrupt

PieCtrlRegs.PIEACK.all = 0xFFFF;

EINT;

…………

//user code

DINT;

AdcRegs.ADCINTFLGCLR.all = 0x2;               //Clear interrupt flag;

PieCtrlRegs.PIEIER1.all = TempPIEIER;

}

请问下,关于中断嵌套方面需要做哪些处理。

我项目上,有两个中断。中断A和中断B。B优先极高。

当A在执行中断函数,B可以打断,进入B的中断,这时候A的堆栈是否需要软件手动保留?还是自动压栈?

如果是自动压栈,A执行完中断后就会回到B的中断,最后回到最初压栈的地方?

我可否这么理解:

      只需要在A的中断函数里第一行就清除所有中断标志位,打开所有除了A中断的中断?这样就可以优先级高的B中断就没问题了?

     B中断函数按照正常中断来就行。不可以被打断?

user5089339:

回复 Seven Han:

我其实知道例程,但是感觉好乱,很反感,直接不想看。还是谢谢!

请问下,关于中断嵌套方面需要做哪些处理。

我项目上,有两个中断。中断A和中断B。B优先极高。

当A在执行中断函数,B可以打断,进入B的中断,这时候A的堆栈是否需要软件手动保留?还是自动压栈?

如果是自动压栈,A执行完中断后就会回到B的中断,最后回到最初压栈的地方?

我可否这么理解:

      只需要在A的中断函数里第一行就清除所有中断标志位,打开所有除了A中断的中断?这样就可以优先级高的B中断就没问题了?

     B中断函数按照正常中断来就行。不可以被打断?

jiangfeng li40:

弄明白的就不觉得乱了

赞(0)
未经允许不得转载:TI中文支持网 » F28035中断嵌套问题
分享到: 更多 (0)