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.

[参考译文] F29H850TU:在 F29H85X-DMA-EVM 上下电上电后、结果的 RTDMA 传输失败(无 SOM 中断)

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1651424/f29h850tu-rtdma-transfer-of-adc-results-fails-after-power-cycle-on-f29h85x-som-evm-no-dma-interrupt

器件型号: F29H850TU
Thread 中讨论的其他器件: F29H85X-F29H85X-EVM-EVM SOM

您好 TI 支持团队:

我在使用 RTDMA 从 ADCE 传输 ADC 结果时遇到问题、特别是在下电上电后、请提供有关可能原因或调查点的建议。

器件:F29H85X-EVM-EVM SOM

配置和预期行为:

  • ADC:SOC1–SOC32 的 ADCE 结果寄存器
  • DMA:RTDMA2 通道 5
  • 传输内容:
    • 在单次 DMA 传输中将 SOC1–SOC32 结果传输到数组
    • 在 5 次传输后生成中断
  • DMA 触发:ADCE SOC3 EOC
  • DMA 设置:
    • DMA_configTransfer (RTDMA2CH5_BASE、5、–64、0);

观察到的行为:

  • 在 CCS 中启动调试会话后、它就会按预期工作。
  • 关闭和打开电路板电源(下电上电)后:
    • 不会发生 DMA 中断。
    • 仅发生第一次传输、数组数据此后不会更新。

您能否提供有关潜在原因和建议的故障排除步骤的建议? 如果您需要任何其他信息、我很乐意提供这些信息。

非常感谢您的时间和支持。

此致

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

    您好、  

    该专家目前已离职。 请期待他们下周回到办公室时得到回复。  

    此致、
    Aj Favela.  

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

    感谢您的及时回复。

    我感谢更新并了解情况。 我将等待专家下周的答复。

    此致、高木幸治

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

    尊敬的 Kouji:

    感谢您的理解。 专家仍在计划下周返回、请等待他们的答复。

    此致、

    Delaney

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

    您好:

    感谢您的更新—我很感激。

    同时、我准备了一个最小的测试项目来重现此问题、并将其附上以供您参考。

    此致、
    Koujie2e.ti.com/.../adc_5F00_dma_5F00_check.zip

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

    尊敬的 Kouji:

    谢谢你的耐心,当我离开办公室. 您在应用程序代码的哪一部分期间发出 POR? 请记住、在发出 CPU 复位和/或 POR 之前退出 ISR、否则应用程序可能会卡在中断上下文中、从而导致 NMI。 此时、您需要 CPU 复位+ POR 来清除错误。

    在 POR 之后、您提到:

    (1) 使用 F29x 错误处理和调试指南检查 ESM + EA + PIPE 寄存器、查看是否存在任何类型的错误。

    (2) 第一次传输后,当没有更多的传输时, 应用程序代码的行为是什么?

    此外、我们还有以下 ADC DMA 示例、您也可以参考这些示例:

    此致、

    Aishwarya

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

    尊敬的 Aishwarya:

    非常感谢您的支持。

    关于 POR、我不确定它是否在 ISR 内发出;但是、在 POR 后不会发生 NMI。

    对于 (1)、我们观察到以下误差:
    C29xx_CPU1:ESM_CPU1 状态:
    C29xx_CPU1:所有活动/挂起错误事件:
    C29xx_CPU1: — ESM_EVENT_ErrorAggator_RTDMA2_HPERR
    C29xx_CPU1:活动/挂起和已启用错误事件:
    C29xx_CPU1:ESM_CPU1 状态完成

    C29xx_CPU1:错误聚合器状态:
    C29xx_CPU1: — RTDMA2_DR 错误 (HP 错误地址= 0x303BFFFE、LP 错误地址= 0x00000000、PC = 0x00000000)
    C29xx_CPU1: — ACC_ACK_ERR
    C29xx_CPU1:错误聚合器状态完成

    →我们期望该地址返回到 ADCA SOC0 结果寄存器 (0x303C0000) 的开头、但它进一步后退一个地址到 0x303BFFFE。
    我们知道这个错误是 DMA 停止的原因、但您能解释一下为什么会发生这种情况吗?
    软件写入后不会发生;它在 POR 之后发生。
    当我们将 srcStep 设置为–62 时、不会发生错误;但是、地址回滚量会逐个移动(作为设置)、因此我们无法获取预期数据。此行为在 POR 前后都是相同的(没有错误)。

    对于 (2)、应用继续在主例程中循环。

    感谢您提供有关 F29H859DU-Q1:F29 RTDMA 更新问题的信息。 但是、我无法访问链接的页面。
    如果有其他链接或文档、能否分享?

    如果有用、另请参阅我之前分享的测试项目作为附件。

    此致、
    Kouji

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

    高木山

    对延迟深表歉意。 您现在应该能够看到链接的帖子。

    我明天将运行该示例以帮助进一步调试、但乍一看、DMA 似乎正在尝试写入超出预期的额外地址。 请进行研究。

    此致、

    Aishwarya

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

    高木山

    我无法运行您的程序、但请查看我对所提供代码的分析:

    DMA 配置为 DMA_configBurst(..., 64, 2, 2) (64 次读取× 2 字节=每次突发 128 字节)、但 ADC 只有 32 个结果寄存器× 2 字节= 64 字节 有效数据。 srcTransferStep = -64 −对于 32 μ s 的突发 、仅在数学上正确、它可以完全后退 32 次读取。 当 BURST=64 时、阶跃只会撤销一半的前进量、因此源窗口每次突发会向前漂移 64 字节、最终从无效地址读取。

    地址 0x303BFFFE = 0x303C003E (RESULT31)−64、这是传输步骤  在 ADC 结果基址之前过早触发一个位置−2 个字节的结果。

    POR 之后是正确的行为。 在调试会话期间、存在可能改变行为的断点和其他调试器连接。  

    修复:

    1. 将 64U 32U 中的突发大小从更改为 DMA_configBurst(...).

    2. 删除冗余 DMA_configTransfer 和 DMA_startChannel 中的呼叫 main() (第 79–80 行)。

    此致、

    Aishwarya

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

    尊敬的 Aishwarya:

    对延迟的答复表示歉意。
    感谢您的检查;我现在可以访问链接的帖子。

    我也很感谢您的建议。
    本周我没有时间、但我将尝试在下次星期一中验证行为。

    此致、
    高木

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

    高木山

    感谢您的更新。

    此致、

    Aishwarya

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

    尊敬的 Aishwarya:

    感谢您的支持。

    • 根据您的建议、我进行了以下更改并运行了代码、但现象保持不变:

      1. 在 DMA_configBurst (...) 中将突发大小从 64U 更改为 32U。
      2. 删除 main()(第 79–80 行)中冗余的 DMA_configTransfer 和 DMA_startChannel 调用。
    • 它在复位之前工作、但复位后不再触发中断。
      检查错误聚合器状态会显示 RTDMA DR 错误:
       C29xx_CPU1:错误聚合器状态:
       C29xx_CPU1: — RTDMA2_DR 错误 (HP 错误地址= 0x303BFFDE、LP 错误地址= 0x00000000、PC = 0x00000000)
       C29xx_CPU1: — ACC_ACK_ERR
       C29xx_CPU1:错误聚合器状态完成

    我正在查看您提供的其他信息并考虑采取对策;目前、我想分享当前状态。

    您提到以前的代码无法在您这边运行;我附上了修改后的源代码以供参考。

    此致、
    高木

    e2e.ti.com/.../4265.adc_5F00_dma_5F00_check.zip

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

    高木山

    我会给它一个尝试,并 在本周结束时回到你身边。

    此致、

    Aishwarya

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

    尊敬的 Aishwarya:

    感谢您的更新。

    感谢您的支持。
     接下来我将尝试运行 ADC_ex6_Continuous_dma 工程。

    此致、

    高木

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

    尊敬的 Aishwarya:

    根据您提供的信息、我仔细检查了设置并验证了以下配置是否完全符合预期:

    • 读取数据大小、写入数据大小一次= 16 位
    • 突发大小= 64
    • 传输大小= 5
    • 源地址突发阶跃= 2、 传输阶跃= 0
    • 源绕回大小= 1、源地址绕回步骤= 0
    • 目标地址突发步骤= 2、 传输步骤= 2
    • 目标绕回大小=65536、 目标地址绕回步骤=0

    此外、我现在了解了为什么我以前的配置存在问题。
    查看图 12-2(TRM 中的 RTDMA 状态图)后、我意识到源和目标传输地址在最终突发后不会更新。

    因此、源地址传输步骤–64 将导致 2 字节不对齐、从而阻止进程像我错误地预期的那样返回到正确的目标。
    基于此、我已将设置更新为:源地址传输步骤=–62、目标地址传输步骤= 2 和源绕回大小= 65536、并已确认系统现在按预期运行。

    非常感谢您提供富有洞察力的建议。 这是真正有帮助的。