#include stdioh#include stdlibh#include platformh#include xil_printfh#include xil_cacheh#define DMA_MM2S_PS_ADDR 0x80000000#define DMA_MM2S_PS_SIZE 0x80000004#define NOC_DATA_PKG_ADDR 0x800
该代码主要是对于 DMA 的测试。首先定义了一些寄存器地址,然后定义了一个长度为 100 的数组 data,并将其地址存储在 addr 中。接着对 addr 进行地址对齐,将对齐后的地址存储在 addr_aligned_16 中。
然后使用 WR_u32 函数,将数组 data 中的数据写入内存。再使用 Xil_DCacheFlushRange 函数将写入的数据刷新到内存中。接着进入一个无限循环,进行 DMA 测试。
在 DMA 测试中,首先将 addr_aligned_16 的地址写入 DMA_MM2S_PS_ADDR 寄存器中,将 size 的值写入 DMA_MM2S_PS_SIZE 寄存器中。然后将 NOC_DATA_PKG_ADDR 寄存器的值设置为 0x0200003,将 NOC_DATA_PKG_CTL 寄存器的值设置为 0b00000000110000000010。接着打印 ".",等待 DMA 完成。
然后将 addr_aligned_16+size*16 的地址写入 DMA_S2MM_PS_ADDR 寄存器中,将 size 的值写入 DMA_S2MM_PS_SIZE 寄存器中。将 RESULT_READ_ADDR 寄存器的值设置为 3,将 RESULT_READ_CTL 寄存器的值设置为 size。再次打印 ".",等待 DMA 完成。
最后将 data 数组中的数据打印出来,以便观察 DMA 是否正常工作
原文地址: https://www.cveoy.top/t/topic/eIBK 著作权归作者所有。请勿转载和采集!