我们的应用每50ms 接收一次从 FPGA 流式传输的6964字节数据块。 我们的初始实施方案使用了32位 EPI 数据总线以及由 FPGA 提供的请求发送信号。 发送请求信号在端口 P:5触发中断时、将读取 EPI 总线数据并将其写入缓冲区。 一旦接收到完整的数据块、就会通过 SPI0上的 uDMA 发送数据块。 我们遇到的问题是、处理 EPI 数据中断会导致主线程导致 USB 接收/发送停止运行。 因此、我们一直在尝试迁移代码、使用 uDMA 从 EPI 总线传输数据。
我们的初始尝试做出了以下假设:
1.不能在 EPI0和 SPI0之间进行直接 uDMA 传输。 因此、我们的设计使用 uDMA 将数据块从 EPI 总线接收到缓冲区中。 当 EPI 总线上接收到完整的数据块时、使用接收到的 EPI 缓冲区、通过 UDMA 将数据发送到 SPI0。
2.需要使用 EPI 时钟信号将 EPI 读操作与 FPGA 同步。 由于 EPI 时钟频率为 EPI31、因此需要将 EPI 总线宽度降至24、16或8。 uDMA 事务仅限于32、16或8的数据大小。 因此、EPI 数据总线需要减少到16位。
3、将 FPGA 信号源请求发送的信号重命名为帧信号。 FRAME 信号上升沿触发 PortP:5中断以启动 uDMA 事务、接收来自 FPGA 的数据。 帧信号下降沿触发端口 P:5、该端口触发 UDMA 在 SPI 0上流式传输接收到的数据。
请评论是否有任何这些假设不正确或被误解。
我们的以下实现无法运行、问题可能是我们对 Tivaware 文档和示例的解释/理解导致的。 您是否会查看随附的代码块、并就如何使用 uDMA 从 EPI 数据总线传输数据提供指导。
