[X]关闭

ZYNQ DMA环路例程中cache操作问题

文档创建者:没落骑士
浏览次数:4945
最后更新:2018-09-06
本帖最后由 没落骑士 于 2018-9-6 19:40 编辑

在米联客提供的ZYNQ教程中S03_CH01_AXI_DMA_LOOP实验中,在DMA发送数据前有个函数:Xil_DCacheFlushRange 。教程中说目的是将数据刷到DDR中。但是Tx_Buffer即指向了DDR内存的绝对地址,在初始化Tx_Buffer过程中也就将数据写入了DDR,为何还要依靠这个函数来写入?我的理解错误在哪?

在接收数据检测函数dma_checkData中也有类似的函数:Xil_DCacheInvalidateRange((u32)RxPacket, Length),不理解它的具体功能。


希望有人帮忙解答。谢谢各位!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

发表评论已发布 1

没落骑士

发表于 2018-9-6 19:35:26 | 显示全部楼层

本帖最后由 没落骑士 于 2018-9-6 19:38 编辑

找了一些博客,有些感悟。我理解大概就是:cache是高速缓冲区,用来备份经常访问的少量数据提高读写效率。当DMA发送DDR数据到PL时,初始化发送数据指针Tx_buffer在cache中,而DMA发送的是DDR内数据,因此需要用函数xil_DCacheFlushRange将cache数据推到DDR内。当接收DMA数据时,DDR数据更新,但相应地址的cache数据没有更新,CPU检测的数据并不是真正DDR相应地址中的数据,所以需要用函数Xil_DCacheInvalidateRange来指定该段cache内容无效,从新从DDR读取来更新cache。这样检测到的接收数据即为DMA从PL端搬移回来的数据。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则