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.

F28335中断嵌套问题

Other Parts Discussed in Thread: CONTROLSUITE

最近在使用F28335做控制器,需要一些中断,现在问几个问题,看自己的理解对不对。

1. 从响应中断-即对IFR.X对应的中断作出相应,到进入ISR过程所有可屏蔽中断是不能打入的?

2. 在进入ISR后,执行EINT 后,比当前中断优先级高的中断可以打入?

3. 在进入ISR后,执行IER |= M_X; EINT; 重新使能当前中断后,当前中断和更高优先级中断可以打入?

4. 在例程中有 

IER |= M_INT1;

IER &= MINT1;

后一语句的作用是什么,理解为屏蔽其它中断,为什么这样做?

请高手帮忙回答下

  • 进入中断后,CPU默认关全局中断,保存IER,进入ISR,执行完后恢复IER,开全局中断。

    进入ISR后,如果执行EINT,即开全局中断,这时候任何使能的中断都能够再让CPU去相应。

    IER|=M_INT1; 是使能这组中断,让这组中断源能够嵌套。

    IER&=M_INT1; 是屏蔽其他中断,然这个ISR中只有第一组能够进行中断嵌套。

    由于进中断的时候IER已经有保存了,所以在这个过程IER如何改变都没关系。

    Eric

  • 进入ISR后执行IER |= M_X; EINT;当前中断是否可以嵌套打入。比如Timer0是否可被自己重入?

  • 是可以的。如果你不想要,可以通过IER关掉。

    Eric

  • 你的意思是否中断可以被自身中断嵌套,自己打断自己,那嵌套层数是多少,可以嵌套几次。

  • 没有限制多少层,但是每次嵌套都会压栈,堆栈空间是有限的。

    另外,实际应用中,常用嵌套一层。

    Eric

  • 您好,请问该方法能实现不同组别中断的嵌套吗?

    例如:欲实现在DMA中断中嵌套定时器中断1,下面的方式能实现吗?

    interrupt void Dma_ISR(void)

    {

         IER |= M_INT7;
         IER &= M_INT1;
         PieCtrlRegs.PIEIER1.all &= 0x40;
         PieCtrlRegs.PIEACK.all = 0xFFFF;
         asm("   NOP");
         EINT;

        ........

        ........

    }

     

  • 你好,请问下怎样的中断方式才叫做多级中断嵌套呢?

    本人在中断嵌套这里遇到一个中断循环嵌套(自我理解只是一级嵌套),但是无法一直执行的问题,还望指点下,谢谢,非常感谢!

    具体情况见附录文件

    中断嵌套无法一直循环执行.docx
  • 这时候任何使能的中断都能够再让CPU去相应”,这句是不是意味着比当前中断优先级低的中断也能相应?

  • 这时候任何使能的中断都�够再让CPU去相应”,这句是不是意味着比当前中断优先级低的中断也能相应?

    ERIC:

    是,如果开中断嵌套后,那么低优先级的中断也可以打断被嵌套的高优先级中断。

  • 您好,Eric Ma!

                               想请教一下您几个问题:

                               1.如果我想实现通过ePWM的SOC信号来触发ADC和DMA的中断,因为他们的中断不同组是否也涉及到中断嵌套的问题?

                               2.DMA触发源是有ePWM的SOC的,但是为什么DMA定义的头文件中只定义了前17个中断源,对18到31未作定义,可否用户自己定义,还是有其他的什么限制?


    希望您可以回答,谢谢!


  • 1.如果我想实现通过ePWM的SOC信号来触发ADC和DMA的中断,因为他们的中断不同组是否也涉及到中断嵌套的问题?

    Eric:

    同个触发源触发两个中断,那两个中断会被CPU根据优先级别来响应。不一定需要中断嵌套,除非你希望低优先级的中断打断高优先级的中断。

    2.DMA触发源是有ePWM的SOC的,但是为什么DMA定义的头文件中只定义了前17个中断源,对18到31未作定义,可否用户自己定义,还是有其他的什么限制?

    Eric:

    有可能你看的是老版本的程序,去下载最新的controlSUITE。

    struct MODE_BITS { // bits description
    Uint16 PERINTSEL:5; // 4:0 Peripheral Interrupt and Sync Select Bits (R/W):
    // 0 no interrupt
    // 1 SEQ1INT & ADCSYNC
    // 2 SEQ2INT
    // 3 XINT1
    // 4 XINT2
    // 5 XINT3
    // 6 XINT4
    // 7 XINT5
    // 8 XINT6
    // 9 XINT7
    // 10 XINT13
    // 11 TINT0
    // 12 TINT1
    // 13 TINT2
    // 14 MXEVTA & MXSYNCA
    // 15 MREVTA & MRSYNCA
    // 16 MXEVTB & MXSYNCB
    // 17 MREVTB & MRSYNCB
    // 18 ePWM1SOCA
    // 19 ePWM1SOCB
    // 20 ePWM2SOCA
    // 21 ePWM2SOCB
    // 22 ePWM3SOCA
    // 23 ePWM3SOCB
    // 24 ePWM4SOCA
    // 25 ePWM4SOCB
    // 26 ePWM5SOCA
    // 27 ePWM5SOCB
    // 28 ePWM6SOCA
    // 29 ePWM6SOCB

  • 我对“低优先级的中断也可以打断被嵌套的高优先级中断”这话感到怀疑。如果真这样的话,岂不是丧失了中断优先级的本质?难道没有一种合理的方式支持中断嵌套但又同时尊重优先级吗?