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.

[参考译文] AM13E23019:MCPWM 中断延迟

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1646283/am13e23019-mcpwm-interrupt-latency

部件号: AM13E23019

你好

我观察到的中断延迟约为 240ns (MCLK = 200MHz )。 下面是 syconfig 配置项  

类型
  • MCPWM4 周期保持在 16KHz(6249 个周期)、向上计数、无预分频器。 当时基计数器等于零时、MCPWM4 为 eCAP 生成 SYNCOUT 脉冲。
  • PWM2_CMPB = 5800 — 这用于生成精确的脉冲,以验证 MCPWM 中断延迟
  • CMPC = 5800 — 这用于生成 MCPWM 中断 (5800 是一些随机数。 目标是在时基计数器变为零之前生成中断)
  • PWM2A 配置为在 TBCTR = 0 时切换  
  • PWM2B 配置为在 TBCTR =向上计数时 PWM1_CMPB 时切换  
  • ET1:时基计数器等于 CMPC(与 PWM2_CMPB (5800) 相同)时。 ET1 配置为生成中断的源
  • MCPWM 中断的优先级保持最高。 Debug3 引脚作为第一条语句在 ISR 中切换。  
extern "C" void APP_MCPWM_4_INT_Handler()
{
    BSP_AM13E230_E2::Debug3Pin_High();
    MotorControl_Callback();
    g_diagCounters.Mcpwm4++;
    DL_MCPWM_clearInterrupt(APP_MCPWM_4_INST, DL_MCPWM_INT_ET_1);
    DL_MCPWM_clearGlobalInterrupt(APP_MCPWM_4_INST);
    BSP_AM13E230_E2::Debug3Pin_Low();
}

void BSP_AM13E230_E2::Debug3Pin_High()
{
    DL_GPIO_setPins(GPIO_GRP_0_PIN_Debug3_PORT, GPIO_GRP_0_PIN_Debug3_PIN);
}
void BSP_AM13E230_E2::Debug3Pin_Low()
{
    DL_GPIO_clearPins(GPIO_GRP_0_PIN_Debug3_PORT, GPIO_GRP_0_PIN_Debug3_PIN);
}

 

观察
  • 对于 MCPWM ISR、可以观察到中断延迟(约 230ns)。 请建议它是否可以改进或这是预期的。  image.png

    注意:逻辑分析仪配置为在 250MHz 处采样



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

    您好、 Zackary Fleenor

    感谢您的详细答复。 进行建议的更改后、我可以实现高达 125ns 的延迟。 以下是所做的更改。  

    1.增加对-O2 的优化(MCPWM4 中断不会在-O3 上发生)

    2.将 ISR 移入 RAM  

    3、将功能转移到内存中