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.

[参考译文] TMS320F28379D:EPWM ISR 的中断延迟

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1522327/tms320f28379d-interrupt-latency-for-epwm-isr

部件号:TMS320F28379D

工具/软件:

我将 EPWM1A 配置为在 TBCTR=0时变为高电平

其中100MHz SYSCLK 和分频器设置为/1

我将 ISR 配置为在 CMPB=10时触发 (例如、我尝试了不同的值)。  在 CMPB=10时、我预计 ISR 将在0.10us 时触发、再加上一些中断延迟。   

我在 EPWM1a 的上升沿与在 ISR 中设置的调试引脚之间看到了类似5.37us 的内容。  我知道在触发中断和 ISR 执行开始之间存在一些中断延迟、但在5us 后似乎很高。

在 TBCTR=CMPBU 上、我应该预期什么类型的中断延迟?

下面是时序屏幕截图和一些相关代码片段。

 

EPWM_setClockPrescaler (EPWM_DATA_PTR->EPWM_BASE、EPWM_CLOCK_DIVIDER_1、EPWM_HSCLOCK_DIVIDER_1);

EPWM_setTimeBaseCounterMode (PC_EPWM_PTR->EPWM_BASE、EPWM_COUNTER_MODE_UP);

EPWM_setActionQualifierAction (PC_EPWM_PTR->EPWM_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
EPWM_setActionQualifierAction (PC_EPWM_PTR->EPWM_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);

EPWM_setCounterCompareValue (EPWM_DATA_PTR->EPWM_BASE、EPWM_COUNTER_COMPARE_B、10);  

EPWM_setInterruptSource (EPWM_DATA_PTR->EPWM_BASE、EPWM_INT_TBCTR_U_CMPB);

__interrupt void epwm1_isr (){

GPIO_writePin (124、1);

EPWM_clearEventTriggerInterruptFlag (EPWM1_BASE);
INTERRUPT_CLEARACKGROUP (INTERRUPT_ACK_GROUP3);

GPIO_writePin (124、0);

}

I 还启用了死区、DBRED=DBFED=40 (高电平有效互补)

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

    您好:

    我将及时查看和答复。

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

    您好:Mark、

    以下是有关 C28x 上中断延迟的一些一般信息:

    CPU 收到中断时执行的步骤实际如下:

    这些步骤大约需要以下时长

    • 清除 CPU 流水线:~8个周期(如果 CPU 正在执行 RPT 指令、可能更多周期)
    • 上下文保存:~8个周期
    • ISR—x 个周期
    • 上下文恢复:~8个周期

    因此、总的来说、它们可以预期中断开销约为24个周期(因此相当可以忽略不计)。  

    以下是它们可以通过执行的一些其他操作来帮助实现严格的中断时序:

    • 避免在 ISR 内进行(非内联)函数调用。 对寄存器使用直接 HWREG 访问
    • 避免在 ISR 内进行任何类型的轮询/等待循环-例如、不要调用需要 CPU 等待的阻塞 SPI 函数
    • 在工程属性中启用编译器优化以尽量减少所使用的指令
    • 为每个 ISR 设置 HPI 编译器 pragma、以便 FPU 寄存器不需要压入堆栈(此设置将它们保存在影子寄存器中)。
    • 避免使用 RPT 指令

    我将让 Stevan 从 EPWM 角度对中断时序进行注释。

    此致、

    Delaney

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

    我发现有一个由 PWM 触发的 ADC 中断、使 PWM ISR 停止。