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:触发 CLA 任务的中断延迟

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1387649/tms320f28379d-interrupt-latency-to-trigger-cla-task

器件型号:TMS320F28379D

工具与软件:

我将使用 CPU2 CLA 触发 ADC 转换、方法是使用 EPWM_FORCEADCTrigger (EPWM1_BASE、EPWM_SOC_A);

EPWM1 SOCA 用于触发四个 ADC 转换(SOC7、SOC8、SOC9、SOC10)。   

ADC 中断由转换的最后一个 SOC (SOC10)触发。

ADC 中断会触发 CPU1 CLA 任务。  这是配置的唯一 CPU1 CLA 任务。

我在 CPU2 CLA 中设置了一个 GPIO、以便查看 ADC 转换的初始触发器何时开始

我在 CPU1 CLA 中设置了一个 GPIO 以查看 ISR 何时发生

...我用逻辑分析仪测量 GPIO 之间的间隔

我看到 ADC 触发和 ISR 之间的间隔/延迟有很多变化。  在低端、该值为~2.4us、接近于我针对转换4个通道的最短时间进行的计算。  在更高端、我看到延迟高达40us

这种延迟变化是否合理?

... CPU1 CLA 没有其他任务,所以不应该是 CPU1 CLA 繁忙,不能运行 ISR 的情况

...可能有多达两个其他 ADC 通道正在被转换。  (SOC0、SOC1)。  虽然这可能会延迟 SOC7/SOC8/SOC9/SOC10、但我希望这不会使转换时间增加1us 或2us 以上、并且不会导致40us 延迟。

谢谢!

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

    尊敬的 Mark:

    [报价 userid="513451" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1387649/tms320f28379d-interrupt-latency-to-trigger-cla-task "]ADC 中断触发 CPU1 CLA 任务。  这是配置的唯一 CPU1 CLA 任务。

    只是为了澄清一下、您是否在对 CPU1 CLA 任务执行软件触发? 任务是否由 ADC 事件触发?

    以下事件链是否正确:

    1. CPU2 CLA 任务(第1个 GPIO 集)->触发 ADC 转换 SOC7-10  
    2. 分支到 ADC ISR ->软件触发 CPU1 CLA 任务
    3. CPU1 CLA 任务开始(第2个 GPIO 集)

    由于 CLA 任务是在不同的 CPU CLA 上完成的、因此它们不应相互影响、也不应受 CPU 上任何内容的影响。  

    此致、

    Delaney

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

    您好、Delaney、

    CPU1 CLA 任务由 ADC 事件触发

    1. CPU2 CLA 任务(第1个 GPIO 集)->触发 ADC 转换 SOC7-10  
    2. ADCC 中断1触发 CPU1 CLA 任务启动(第2个 GPIO 集)

    谢谢!

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

    尊敬的 Mark:

    好的、我看、由于 CPU1 CLA 上的 CLA 任务是它的唯一任务、当触发后、应该立即启动。  延迟的差异应该与 ADC 转换本身有关、因此我将召集 ADC 专家来看看他们这里是否有任何输入。

    此致、

    Delaney

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

    标记、

    [报价 userid="513451" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1387649/tms320f28379d-interrupt-latency-to-trigger-cla-task ]...转换其它最多两个 ADC 通道是可能的。  (SOC0、SOC1)。  虽然这可能会延迟 SOC7/SOC8/SOC9/SOC10、但我预计这不会使转换时间增加1或2 μ s 以上、并且不会导致40 μ s 的延迟。

    您的 aCQPS 价值是什么? 除非非常高、否则我同意每个 ADC 转换只需不到1us。

    此致、

    Ben Collier

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

    所有通道的 ACQPS 为15。

    我正在尝试创建一个独立的项目、我可以分享该项目来说明问题。  我在这里遇到了几个问题:

    1. epwm_forceADCTrigger (EPWM1_BASE、EPWM_SOC_A);在 CPU2上、CLA 似乎未触发转换。   

    --我把 SOCA 预分频设置为15

    --我定期清除 SOCA 事件计数,这样它永远不会达到15

    --当需要时,我使用 EPWM_FORCEADCTrigger 并跳过清除 SOCA 事件计数

    在 CPU2中、由 EPWM1中断触发的 CLA 任务1:

    if (tableindex == 0){

    EPWM_forceADCTrigger(EPWM1_BASE, EPWM_SOC_A);

    }
    else if (tableindex == 10){
    // Reset event count periodically, make sure event count never gets to the prescale=15
    EPWM_forceADCTriggerEventCountInit(EPWM1_BASE, EPWM_SOC_A);
    EPWM_clearADCTriggerFlag(EPWM1_BASE, EPWM_SOC_A); // EPWM1 SOCA
    }

    tableindex++;
    if (tableindex >= 20)
    tableindex = 0;

    针对上述情况、我的预期是 ADC 转换将在 EPWM1的每20个脉冲上触发一次

    2.如果禁用上述代码片段、则跳过 EPWM_FORCEADCTrigger 的使用 、例如将预分频设置为8、即会触发转换。  CPU1 CLA 由 CLA_TRIGGER_ADCC1触发。  但只有当我同时启用了一个 CPU 中断时、它才会运行。  如果我没有配置 CPU 中断、CPU1 CLA 不会运行。  我希望让 CPU1 CLA 自行由 ADCC1触发。

    是否可以通过 PM 向您发送项目、以提供有关我正在做什么的更多详细信息?

    谢谢!

    标记

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

    我认为这可能与此相关:

    EPWM_enableADCTriggerEventCountInit (EPWM1_BASE、EPWM_SOC_A);
    EPWM_setADCTriggerEventCountInitValue (EPWM1_BASE、EPWM_SOC_A、0);

    当我禁用上述线路时、预分频触发器开始工作。  启用后、它不起作用。

    我使用了上述内容来尝试清除 SOCA 事件计数、保留 SOCA 事件计数、以便绝不会达到预分频值、也绝不会触发 ADC 转换。  因此、触发 ADC 转换的唯一方法是通过  EPWM_FORCEADCTrigger。   


    读取 TRM、事件触发器计数器由同步事件或软件强制进行初始化。  猜猜、同步事件会妨碍我尝试执行的操作。   

    是否有其他方法可以将 SOCA 事件计数清除为零?

    谢谢!

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

    供参考...我最后要做的是将 CMPB 设置为大于该周期的值、这样 CMPB 绝不会触发 SOCA。  然后、我可以 随时使用 EPWM_FORCEADCTrigger、该器件现在可正常使用。