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.

[参考译文] CC2541:在具有 DMA 的 SPI 上进行双缓冲

Guru**** 2563970 points
Other Parts Discussed in Thread: CC2541

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/567458/cc2541-double-buffering-on-spi-with-dma

器件型号:CC2541

您好!

我使用 SPI 与 CC2541进行通信(在专有模式下接收数据包)。
在单模式下使用 DMA、当 DMA 中断发生时、我处理传入的 SPI"数据包"、然后重新布设通道。
因此、在处理数据包所花费的时间内、通道未布防-这意味着 SPI 数据可能会丢失。
显而易见的解决方案是使用单次重复模式、但从我在 PDF 中看到的内容来看、DMA 没有可用的双缓冲。
这意味着在重新布防之前、我必须在 DMA 配置中切换目标缓冲器。
我曾考虑过使用两个 DMA 通道(都配置了相同的 SPI RX 触发器、但具有不同的缓冲器)、并在 CS 引脚激活开关缓冲器时设置中断、但这似乎有点麻烦。
是否有适当的方法来实现此目的? 我缺少什么吗?
谢谢你。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    文档显示数据缓冲寄存器已经被双缓冲、并且与 DMA 的耦合应该是可以的-我认为这里更大的问题是重新布防之前处理传入数据包的时间。 (ESP、如果它超过2个 SPI RX 周期)

    您可以尝试生成一个队列系统来保存接收到的数据包、直到时间被释放。 (如果 RX 命令不频繁或定期)。 或者创建更简单的命令/中断命令、以适应重新臂架的最大时间。

    您可以尝试双缓冲 DMA、如果数据缓冲区已经是双缓冲区、它实际上将是第三个缓冲区。

    此致、
    反叛分子