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.

[参考译文] TMS320F28034:嵌套中断的特定过程

Guru**** 2539500 points
Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1029107/tms320f28034-the-specific-process-of-nesting-interrupt

器件型号:TMS320F28034
主题中讨论的其他器件:C2000WARE

您好 Champ、

我正在向客户提出要求。

它们在其程序中使用嵌套中断。

通过执行 EWPM5_INT 可以中断 ADC1_INT、因此  ADC1_INT 嵌套的总时间被中断 = ADC1_INT 的例程时间+  EWPM5_INT 的时间 +额外的时间延迟(6us)。

他们想知道 额外的时间延迟来自哪里?

我是否可以知道嵌套中断的特定过程, 我认为这可能会导致  额外的时间延迟? 我是对的吗?

如果有一个解释该过程的图、那将是完美的。

谢谢

BR、Johnny

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Johnny、

    您可以查看 C2000Ware 中的 SW_SFFITICE_INTERRUPTS 示例、以查看下一个中断需要执行的代码。 不过、为了给您提供一个示例 ISR、我将在这里输入一些代码:

    __interrupt void 
    ADCINT1_ISR( void )
    {
        //
        // Set interrupt priority:
        //
        volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all;
        
        IER |= M_INT1;
        IER	&= MINT1;	  	               // Set "global" priority
        PieCtrlRegs.PIEIER1.all &= MG11;   // Set "group"  priority
        PieCtrlRegs.PIEACK.all = 0xFFFF;   // Enable PIE interrupts
        __asm("  NOP");
        EINT;
    
        //
        // Insert ISR Code here
        //
        for(i = 1; i <= 10; i++)
        {
            
        }
    
        //
        // Restore registers saved
        //
        DINT;
        PieCtrlRegs.PIEIER1.all = TempPIEIER;
    
        //
        //  Add ISR to Trace
        //
        ISRTrace[ISRTraceIndex] = 0x0011;
        ISRTraceIndex++;
    }

    您可以忽略 ISRTrace 内容和 for loop -这些只是为了显示示例的工作原理。 启用嵌套的主要操作是屏蔽 IER 和 PIEIERx 中的不同位、清除 PIEACK、重新启用中断、然后在末尾恢复 PIEIERx 的值 它们是否在"Time of ADC1_INT"和"Time of EWPM5_INT"数字中对这些行的执行进行计数?

    其中一些额外时间与嵌套中断的上下文保存和恢复相关、尽管不是完整的6us。 它们的 SYSCLK 速度是多少? 60 MHz?

    他们如何衡量执行时间? 切换 GPIO?

    惠特尼

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的惠特尼:

    感谢您向我展示如何 实现嵌套中断。  我支持客户  成功实现嵌套中断。

    你是对的。  额外的延时 时间实际上是5.75us、 而不是完整的6us、通过  在示波器上切换 GPIO 来测量。  (SYSCLK

    速度为60M Hz)您如何知道它 不是全6us,我知道吗?

    如果程序中只有两个 ISR (EWPM5_INT 和 ADC1_INT)、我能否坚定地告诉 大家、额外的时间延迟 来自 上下文保存和

    是否恢复嵌套中断?  我能确定这一点吗?

    此外,我们 是否有任何特定的文档显示    嵌套中断的上下文保存和恢复的延迟? 这就是我想知道的。

    谢谢!

    BR、Johnny

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是否在两个 ISR 中切换 GPIO? 您能给我提供更多详细信息吗、比如当不发生嵌套时、每个 ISR 独立执行需要多长时间?

    最小中断延迟约为14个周期。 我找不到记录的退货/恢复、但我认为它大约为10。 延迟可能更多地考虑等待状态、应用程序是否在任何时刻禁用中断等...

    我认为器件技术讲座对中断延迟进行了很好的描述、但它并未专门介绍嵌套:

    https://dev.ti.com/tirex/explore/node?node=AO3tuUWy1t1n-PFt5oLFCQ__jEBbtmC__LATEST

    这里有一个嵌套文档、尽管它不讨论周期计数:

    https://software-dl.ti.com/C2000/docs/c28x_interrupt_nesting/html/index.html

    惠特尼