新手入门
- 积分
- 13
- 金钱
- 13
- 注册时间
- 2025-10-8
- 在线时间
- 7 小时
|

楼主 |
发表于 2025-10-17 12:43:13
|
显示全部楼层
本帖最后由 mpoint 于 2025-10-18 14:17 编辑
感谢前辈的回复及提供的思路!!
其他我做过的实验我详细说明一下:
1 不使用DMA传输方式,优化开到-o3,在主循环while(1)中,使用非DMA的 HAL_QSPI_Transmit(&hqspi, Tx_Buffer_Ping, 1) 传输数据, qspi总线中断间隔的时间是5us左右,使用寄存器方式操作, 时间在1.5us左右. 此时cpu负载应该是最大.
2 使用DMA的循环模式,关闭DMA及QSPI的所有中断使能, 在主循环while(1)前调用一次HAL_QSPI_Transmit_DMA(&hqspi,Tx_Buffer_Ping); 后续DMA自动循环进行数据搬送到qspi. qspi总线中断间隔的时间是1.5us左右. 此时cpu负载应该最小,但是没办法更新传送缓冲区中的数据.
3 使用DMA的普通模式,打开DMA及QSPI中断(半传输完成,全传输完成),在主循环while(1)前调用一次HAL_QSPI_Transmit_DMA(&hqspi,Tx_Buffer_Ping); 后续在qspi传输完成中断中继续进行HAL_QSPI_Transmit_DMA() 调用,使用了双缓冲方式. qspi总线中断间隔的时间是6.7us左右,是间隔时间最大的,可以看出中断响应对qspi总线中断影响较大.
4 代码中,我设置了ping,pong两个缓冲区,缓冲区的数据量用 FRAME_BUF_LEN 调节, 发现缓冲区数据没有发完,qspi总线是不会停止的,故qspi总线间断是发生在数据传输完成后. 原来认为2中DMA循环方式数据指针掉头操作应该很快,但此方案还是让 qspi总线中断了1.5us,对xy2-100协议来说可能有影响(影响还在搭建环境进行测试).
现在主要要解决的问题就是想尽一切办法,让传输给qspi总线的数据不中断,也就让qspi持续产生xy2-100协议数据.
结合前辈的回复及思路,感觉是传输给qspi的数据产生断流了,但这个断流是如何产生的?
|
|