英飞凌
直播中

吴凡

9年用户 861经验值
擅长:48674
私信 关注

TC364如何在不触发CPU中断的情况下实现QSPI+DMA发送信息?

硬件:TC364
软件(用于 QSPI 和 DMA 驱动程序的 iLLD)
目标:我想通过 QSPI+DMA 一次发送 3x 个 8 位信息,但不触发任何 CPU 中断。
GPIO 配置

问题是,当我开始使用 iLLD 的函数时(见下文)
IfxQspi_SpiMaster_exchange( sQspiMaster_Channel_Handle,src,dest,count);
我的传输总是在传输完第二个有效载荷后停止,第三个有效载荷总是丢失,看起来 SPI 传输永远不会完成。

但一旦我更改了 isrProvider,比如

通过使用软件中断例程,我可以在一个卷中成功发送 3 个有效载荷

但这并不是我想要的,我需要实现一种机制,在不中断 CPU 的情况下发送有效载荷
谁能帮我解决这个问题?
1. 我的配置是否正确?
2. 是否有英飞凌示例代码可以实现我正在寻找的功能(SPI + DMA 传输而不触发 CPU 中断)?
谢谢




回帖(1)

甘满盛

2024-5-20 17:27:11
要在不触发CPU中断的情况下实现QSPI+DMA发送信息,您需要使用DMA(直接内存访问)控制器来管理数据传输,而不需要CPU干预。以下是实现此目标的步骤:

1. 配置QSPI接口:首先,您需要配置QSPI接口以实现SPI通信。这包括设置波特率、时钟极性、相位和数据帧格式等参数。

2. 配置DMA通道:接下来,配置DMA通道以在QSPI和内存之间传输数据。这包括设置源地址、目标地址、传输大小和传输类型等参数。

3. 初始化QSPI和DMA驱动程序:使用iLLD(集成低级驱动程序)库初始化QSPI和DMA驱动程序。这将确保硬件和软件之间的正确通信。

4. 使用DMA传输数据:在不触发CPU中断的情况下,使用DMA传输数据。这可以通过将DMA配置为轮询模式或使用DMA中断来实现,但您需要禁用CPU中断处理程序。

5. 检查传输状态:在传输过程中,您需要定期检查DMA传输状态,以确保数据已正确传输。这可以通过轮询DMA状态寄存器或使用DMA中断来实现。

6. 处理丢失的有效载荷:根据您的描述,传输在第二个有效载荷后停止,第三个有效载荷丢失。这可能是由于DMA配置错误或QSPI传输问题导致的。检查DMA和QSPI配置,确保它们正确设置以支持所需的传输大小和类型。

7. 优化代码:最后,优化您的代码以确保在不触发CPU中断的情况下实现高效的QSPI+DMA传输。这可能包括调整DMA传输参数、优化内存访问和确保代码在传输过程中不会阻塞。

通过遵循这些步骤,您应该能够在不触发CPU中断的情况下实现QSPI+DMA发送信息。请注意,实现此功能可能需要对硬件和软件进行详细的调试和优化,以确保数据传输的可靠性和性能。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分