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.

[参考译文] TM4C1294NCPDT:从 EPI 接口到 SPI 接口的直接 DMA 传输

Guru**** 2556560 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/897931/tm4c1294ncpdt-direct-dma-transfer-from-epi-interface-to-spi-interface

器件型号:TM4C1294NCPDT

您好!

我想从连接到 EPI 接口的外部 SD-RAM 向 SPI FIFO 缓冲区发送数据。

现在、如果 SDRAM 通过 EPI API 和链接器文件正确寻址、您可以直接通过其地址范围进行访问。

但是、如果您在 SDRAM 上执行非阻塞式读操作、则会根据数据表通过 DMA 进行读操作。

如果我想通过 DMA 将数据从 SDRAM 传输到 SPI 缓冲器中、并在函数"MAP_uDMAChannelTransferSet"中输入 SDRAM 的地址范围作为源、它是否起作用? 因为在这里、DMA 单元同时被使用两次。

 MAP_uDMAChannelTransferSet (UDMA_CHANGE_SSI1TX | UDMA_PRI_SELECT、
                                  UDMA_MODE_BASIC、(void *)(pointerToExtSDRAM)、
                                  (void *)(SSI1_base + SSI_O_DR)、
                                  ui16转让字节计数);

重要的一点是、这种操作不应被阻止、因此内核不会被停止、否则它是无用的。



相关信息

Ali Naseri

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

    您好、Ali、

    [报价用户="Ali Naseri">我想从连接到 EPI 接口的外部 SD-RAM 中将数据发送到 SPI FIFO 缓冲区中。
    [/报价]

    因此、如果我在这里理解正确、您将尝试:

    1) 1)通过 EPI 从 SDRAM 读取数据

    2) 2)将 SDRAM 中的数据存储到 EPI FIFO 中

    3) 3)通过 SSI 直接从 EPI FIFO 发送数据、而通过 EPI FIFO 直接发送数据?

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

    您好!

    虽然海报的目标得到了很好的解释并具有一般意义-但由于"SPI FIFO"的"非常小尺寸"、"实践中失败"是否正确?   这种 µDMA 迫使许多非常短(即大小受限)的交易(由于"间接费用需求"而证明效率很低)、而这种交易是 T Ü V 在每次此类交易时强制进行的。

    请注意、μ µDMA 支持的交易号码可以达到1024、能否大幅减少该号码是明智的?

    如果海报的主要目标是"避免核心拖延"、则(可能)可以实现、但代价是 SPI 交易"缓慢且断断续续"。   (寻求供应商批准以确认方法(CAN)成功...)

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

    是的、这是我的目标、通过 DMA 自动将数据(例如500K 字节)从外部 SD-RAM 发送到 SSI 的 FIFO、并且只使用一条命令进行非阻塞。 数据传输的速度应与 SSI 接口的速度相同、以避免缓冲区溢出 FIFO。

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

    您好、Ali、

    经过一些讨论后、我们认为通过仔细的配置可能是可行的。

    EPI 和 SSI 的 FIFO 均为8深、因此对齐方式在此处有所帮助。  

    工作原理是使用 SPI UDMA 从 EPI FIFO 中读取数据、并使用 EPI UDMA 填充 EPI FIFO。 因此、您将配置两个不同的 UDMA 通道。

    需要将 UDMA 配置设置为8个字、作为其仲裁大小、以便 SSI TX FIFO 不会溢出。

    配置这两个接口后、需要首先启动 EPI、并使用非阻塞式读操作来填充全部8个 FIFO 条目。 此时、您启动 SSI、并允许两次猝发请求、每次4个字节、从 EPI 拉取数据并将其输入 SSI TX 缓冲区。 EPI 现在应开始重新填充其 FIFO。 然后、只要 SDRAM 数据的访问速度更快并且 FIFO 在 SSI TX 完成之前填充、SSI 就应该全速运行。

    不是一个命令、而是非常接近。

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

    您好、Ali、

    对 EPI 工作原理进行了一些讨论、可能不需要 EPI 读操作的 uDMA、但涉及的处理要多一些。 不过、它应该大部分是手提的。

    对于 EPI、您应该能够通过提供起始地址、大小和计数来设置非阻塞式读操作。 计数可高达4095。 然后 EPI 将从外部器件读取数据并填充8层深 FIFO。 FIFO 满后、它将停止、直到空间可用、并在下一个读取的地址有空间时恢复。 因此、您实际上不需要该段的 UDMA 来使其成为非阻塞。

    从 uDMA 方面、您最多可以在需要处理传输管理之前执行1024字节的传输。

    EPI 非阻塞式读操作寄存器分为两组。 通过使用乒乓模式、UDMA 可以将1024传输到主通道上的 SPI、然后开始在备用通道上工作、第二组寄存器用于下一个1024。 您只需每1024次传输处理一次 UDMA 中断、即可翻转 DMA 通道控制并设置下一组 EPI 非阻塞式读操作。 因此、您可以将 EPI 读取操作设置为每个读取寄存器1024字节。 在 ISR 中进行切换的时间不应延迟 SPI 输出。