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.

[参考译文] TMS320F28388D:ADC 中断至 CLA 任务延迟

Guru**** 2465890 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1484904/tms320f28388d-adc-interrupt-to-cla-task-delay

器件型号:TMS320F28388D

工具与软件:

您好!

我将使用 ePWM1 SOCA (当计数器递增时 CTR = CMPB 时发生)来触发 SOC0 (ACQPS = 40 SYSCLK)和 SOC1 (ACQPS = 50 SYSCLK)序列。

EOC1在后期中断模式下触发 CLA 任务、我在 CLA 任务的第一条指令上切换 GPIO。

由于我需要非常准确的计时、因此我可以通过输出交叉开关在 GPIO 上观察到 ADC SOCA 触发。

我的 ADC 是12位转换。

我的 CPU 在190MHz 上运行。

我的 ADC 时钟以47.5MHz =>预分频比4、因此根据 TRM 的表20-11、t_poc = 41 SYSCLK。

在我的示波器中、我在 ADC SOCA 和 CLA 任务的第一条指令之间测量到990.8ns。

根据数据表、我应该测量 t_sh_SOC0 + t_sh_SOC1 + t_eOC + CLA_LATENCY SOIT 40 SYSCLK + 41 SYSCLK + 50 SYSCLK + 41 SYSCLK + 4 SYSCLK = 926.3ns。

是否有人认为 Δ 值= 990.8ns - 926.3ns = 64.5ns =>~12 SYSCLK?

也许、由于输出 XBAR、ePWM1 SOCA 脉冲和我观察到的 GPIO 之间存在延迟?

感谢 yopur 的支持、

Adrien

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

    Adrien、您好!

    是否启用了任何其他 CLA 任务? 如果触发信号进入时正在执行不同的 CLA 任务、它将在分支到 ADC 触发任务之前完成其他任务执行。

    此致、

    Delaney

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

    尊敬的 Delaney:

    不、这是唯一在 CLA 上运行的任务。 这就是我预计会出现上面提到的准确延迟的原因。 我的任务是用 C 语言编写、而不是用 ASM 语言编写。 以 C 语言编写的这一事实是否会由于上下文保存而增加约12-13 SYSCLK 的额外延迟?

    此致、  

    Adrien

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

    Adrien、您好!

    用 C 语言编写任务不应该是个问题、CLA 编译器通常应该能够生成高效的代码。 但是、GPIO 是在任务开始时使用 GPIO_writePin () driverlib 调用还是使用直接 HWREG 寄存器访问来切换? 我 之前在 CLA 上看到过 GPIO_writePin ()函数的问题、增加了额外的周期。 如果 GPIO 写入仅用于调试/探查目的、我建议直接写入 GPDAT 寄存器、例如如下所示:

    HWREG(GPIODATA_BASE + GPIO_O_GPADAT) &= 0x0001;

    此致、

    Delaney

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

    尊敬的 Delaney:

    我不使用 driverlib。 我使用 TI 提供的寄存器结构直接写入 GPDAT 寄存器。

    因此额外的延迟必须来自其他某个地方。

    我已经尝试关闭编译器的优化、仅保留用于切换 GPIO 的指令(以及用于清除标志的指令)。

    结果相同、我仍测得300ns。

    此致、

    Adrien

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

     Adrien、您好

    Delaney 目前不在办公室、她将在下周返岗时尽快与您联系。

    此致、

    Allison

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

    Adrien、您好!

    您是否可以访问调试器? 您是否可以尝试在 CLA 任务的最开始停止调试器(使用__mdebugstop();)并单步执行反汇编以查看 GPIO 写入行是否花费比预期更多的时钟周期? 我过去在 CLA 上观察到的 GPIO 写入问题是、它在一段时间内一直使用一条指令、而不是反复执行。 如果反汇编中的所有内容似乎都执行顺利、这将排除 CLA 是延迟的罪魁祸首。 如果是这样的话、我将环路 XBAR 和 ADC 专家来研究这个问题。

    此致、

    Delaney

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

    尊敬的 Delaney:

    可以、我可以访问调试器。 你将找到你所要求的内容的屏幕截图。 当我汇编步入时、它似乎执行顺利。

    我还附上了我所采取的措施,其中一个范围说明了我在我的第一篇文章中所描述的内容。 我的测量值为986.4ns、而我预计为926.3ns (请参阅文章1)。 我测得的额外延迟为60.1ns、大约为190MHz 处的11个 SYSCLK。 也许,我会满足这种额外的延迟,我只是想知道的原因或如果我错过了一些东西。

    此致、  

    Adrien

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

    Adrien、您好!

    从反汇编来看、我确实认为11个 SYSCLK 周期来自 CLA 任务的开始。 编译器生成8条 MNOP 指令和4条指令来实际写入 GPIO。 请记住、许多指令也会花费多个 SYSCLK 来完成。 如果您想确认所有11个周期都在这段时间内发生、则可以使用 CCS ( 此处链接)中的分析时钟功能。 在命中调试内在函数时启动时钟、并单步执行反汇编、直到您到达 GPIO 写入指令的末尾。

    您还可以尝试 在工程设置中使用编译器优化来缩短时间。 但是是的、我认为这是根据反汇编中的说明预期的。

    此致、

    Delaney

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

    尊敬的 Delaney:

    我认为系统配置时钟功能不能用于 CLA (在调试 CLA 时、我无法按下"启用"按钮)。 我 在任务开始时使用_mdebugstop()停止了调试器、我注意到我需要单击大约~13/14次以查看 GPIO 切换。 所以您是对的、它来自于 CLA 任务的开头。

    我已经使用了高度优化。 我使用"优化级别"4-整个程序优化以及"速度与尺寸权衡" 5 (速度)。

    是否所有这些 MNOP 指令都是由于管道结构而必须的、或者我能否更好地优化代码?

    也许、我必须将任务转换为装配体、以便进行更好的优化。

    此致、

    Adrien