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.

[参考译文] TMS570LS3137:具有 DMA 和长传输的 TX/RX MibSpi

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1425280/tms570ls3137-tx-rx-mibspi-with-dma-and-long-transfer

器件型号:TMS570LS3137
主题中讨论的其他器件:HALCOGEN

工具与软件:

您好!

我正在尝试使用 MibSpi 和 DMA 模块传输384个字。 我知道、由于传输组缓冲区的长度只有128个字、因此需要3个 DMA 传输来实现这一点。 但是,我不能缠绕我的头如何使这项工作。

我已经尝试将  DMAxCTRL 中的 ICOUNTx 位设置为2 (因此3个 DMA 传输)、但不确定如何 相应地配置 DMA 通道配置。 您是否可以为该用例提供一些示例代码?

谢谢、此致、

亚伦

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

    大家好、Aaron:

    可能很难 使用单个 DMA 通道将384字传输到大小为128个字的 MibSPI RAM 组。

    您可以尝试以下方法:

    配置3个 DMA 通道并链接通道。

      

    例如、假设您声明的 RAM 大小为384个字、 因此、请将第一个通道配置为向大小为128的 MibSPI RAM 组发送1至128个字、并且在传输之后、这将触发链中的下一个通道、并且该下一个通道源地址应指向384个字的第129个字至256个字、并且此通道应发送接下来的128个字、在传输下一个128个字后、该通道应触发链中的下一个 DMA 通道和第三个 DMA 通道 DMA 通道应发送接下来的128个字。

    尝试此方法、如果您在开发过程中遇到任何困难、请告诉我。

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Jagadish:

    感谢您的答复和建议。 我将尝试该解决方案、并向您提供最新情况。

    在边注上、我想知道与 本线程中提供的解决方案类似的解决方案是否 也适用于我的用例。 你怎么看? 是否仍可以访问该线程中共享的示例代码?

    谢谢。此致、

    亚伦

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

    大家好、Aaron:

    在边注中、我想知道与 本线程提供的解决方案类似的解决方案是否 也适用于我的情形。 你怎么看? 是否仍可以访问线程中共享的示例代码?[/QUOT]

    我的建议方法与上述主题中提到的方法不同。

    在我的方法中、我并不是建议对传输组使用单个缓冲区、而是建议对传输组使用128个缓冲区。

    我仍然觉得上述方法有一个缺点、我的意思是如果我们使用单个缓冲区而不是一组缓冲区、那么为什么我们应该为此使用 MibSPI 呢? 我们只能使用 SPI 呢?

    我们只需将其配置为 SPI、即可配置一个 DMA 通道、并可使用单个 DMA 通道传输所需数量的字。 因此、我很容易理解、不用为 MibSPI 配置单个缓冲器。

    ——
    谢谢、此致、
    Jagadish。

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

    您好 Jagadish、

    抱歉、我需要更正初始用例。 我要尝试做的是、首先在 SPI 上传输4个字、然后接收 N * 8个字(其中 N 最多为32个、因此最坏情况下为256个字)。 目前我正在为此使用 SPI 模块、但我要设法减少 CPU 使用率、所以我想将 MibSPI 与 DMA 搭配使用。 您对此有何建议?

    谢谢。此致、

    亚伦

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

    您好 Jagadish、

    你们是否就如何实现这一目标提出了任何建议? 我当时想使用 MibSpi 模块、因为我知道它可以在数据传输期间实现最少的 CPU 使用率、但是也许使用 SPI 模块会更好吗?

    感谢您的帮助、

    亚伦

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

    大家好、Aaron:

    对延迟响应深表歉意。 在这段时间里,我一直坚持其他的问题。

    我认为我们不能轻易在 MibSPI 中更改传输组大小、 这是因为它也会影响下一个传输组的大小。

    传输组的结束地址取决于下一个传输组的起始地址。

    如果您 在此处看到 mibspiSetData 函数定义、则传输组的结束地址将使用下一个传输组的起始地址进行计算。

    也许您可以尝试以下方法:

    1.可以在 HALCoGen 中声明不同大小的传输组、例如一个 TG0、4帧、Tg1、 32、Tg2、64、tg3128等

    首先您可以使用 TG0执行4个帧的传输、您将使用  mibspiSetData 设置数据、然后您可以调用 mibspiTransfer  API 来启动传输。

    在您需要读取 128字节之后、您需要向从器件发送一些128字节的虚拟数据、例如所有零、您可以使用128大小的 tg3初始化128帧的虚拟数据、然后您可以使用  mibspiTransfer 启动传输。   传输成功后、只需调用 mibspiGetData 即可将数据接收到缓冲区中进行处理。

    另一种方法是仅使用 TG0进行所有传输、我的意思是将 TG0的大小从4调整到128、

    您可以执行以下操作;您可以更改 TG1传输缓冲区大小。

    例如、如果我将 TG1起始地址保留为4、则可以用4个帧加载 TG0、然后您可以使用 mibspiSetData 设置数据、然后您可以使用 mibspiTransfer 传输4个帧。 同样、您可以将 TG1起始地址保留为128并可以执行相同的过程。

    ——
    谢谢、此致、
    Jagadish。

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

    您好 Jagadish、

    很抱歉响应延迟、我设法找到了解决方案、然后忘记返回到该主题。

    最后、我实施了一个类似本主题中所述的解决方案: TMS570LS1224:查找在 MibSpi 模式-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛中将长 DMA 传输到单个缓冲器的示例代码。 它根据我所需的用例正常工作、并发现它是最灵活的解决方案。

    谢谢、此致、

    亚伦