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.
工具与软件:
您好!
我正在尝试使用 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 传输到单个缓冲器的示例代码。 它根据我所需的用例正常工作、并发现它是最灵活的解决方案。
谢谢、此致、
亚伦