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.

TMS320F28004x的中断问题

Other Parts Discussed in Thread: TMS320F280045

我正在使用TMS320F280045的芯片,其中有1个ADCA1(INT1.1)中断,发现有时会被TIMER2(INT14)打断。根据手册,ADCA1的优先级为5, 而TIMER2的优先级为18,为什么高优先级中断会被低优先级中断打断呢?这个是芯片本身的问题还是应用的问题呢?

Thanks

Teasir Chen

  • 谢谢你的答复!但是我的问题跟他们的还不一样,我的是高优先级的ADCA1中断,被低优先级的TIMER2 打断了。ADCA1中断进入后,代码还没执行完毕,TIMER2的时间到了,结果被它打断了。根据手册,ADCA1的优先级为5, 而TIMER2的优先级为18,现在的情况刚好反了,这是什么原因呢?
  • 您现在是否使用了TI-RTOS?

    您可以看一下 www.ti.com.cn/.../sprui33b.pdf 的 Table 3-4. CPU Interrupt Vectors

    CPU TIMER2 Interrupt (for TI/RTOS use)

    另外能否分享一下您的ISR代码?您使用了中断嵌套?

    E2E上有一个类似的帖子,您也可以先看一下

    e2e.ti.com/.../502545
  • Susan, 您好!

    我没有用TI-RTOS,用的是uc OS/II,其中Timer 2用来当OS的timer ticket - 1ms时钟,ADCA1用来做ADC采样和控制算法 - 40KHz频率。因为ADCA1中跑的是实时性控制代码,不能被延时或被其它中断打断。但是希望ADCA1能打断其它的中断,包括Timer 2。下面分别是ADCA1和Timer 2的部分代码:

    1. ADCA1中断代码

    #pragma CODE_SECTION(adc_ISR, ".TI.ramfunc");
    interrupt void adc_ISR(void)
    {
        DINT;

        if(!OSRunning)
        {
          AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
          PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
          return;
        }
        
        // 用户代码,这里没粘出来
        // ......
        
        PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
        asm(" NOP");
        EINT;
    }

     

    2. Timer 2中断代码

    .page
    .text

      .global _OSTickISR

    _OSTickISR:
      .ref _OSTimeTick
      .ref _OSIntEnter
      .ref _OSIntExit
      .ref _OSTCBCur
      .ref _PieCtrlRegs
      .ref _OSIntNesting
      .ref _OSTestIOHigh
      .ref _OSTestIOLow

      PUSH    RPC
      PUSH    AR1H:AR0H
      PUSH    XAR2
      PUSH    XAR3
      PUSH    XAR4
      PUSH    XAR5
      PUSH    XAR6
      PUSH    XAR7
      PUSH    XT
      ASP
      PUSH    DP:ST1

      CLRC    PAGE0,OVM
      CLRC    AMODE

    ;  MOVW      DP,#_OSIntNesting
    ;  INC       @_OSIntNesting
        
      LCR    _OSIntEnter
      LCR    _OSTimeTick
      LCR    _OSIntExit

      POP     DP:ST1
      NASP
      POP     XT
      POP     XAR7
      POP     XAR6
      POP     XAR5
      POP     XAR4
      POP     XAR3
      POP     XAR2
      POP     AR1H:AR0H
      POP     RPC

      IRET

    .end

    我看了一下你给的这个帖子 e2e.ti.com/.../502545,觉得问题跟我的有点类似。如果ADCA1中不想被其它中断打断,用 IER &= xxx 屏蔽其它中断就可以了,对吗?

    还有中断在运行的时候,高优先级的也可能会被低优先级的打断,只是同时有2个或多个中断在等待的时候,才会排优先级,我的理解对吗?

     

    Thanks

    Teasir Chen