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.

F28035中断嵌套问题

Other Parts Discussed in Thread: CONTROLSUITE

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

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

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

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

我可否这么理解:

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

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

  • 您好,

    可参考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使用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;

    }


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

  • 弄明白的就不觉得乱了