米联客——DMA 闭环测试 学习心得

刚学了米联客的DMA闭环测试这一章,这里记录一下sdk的理解

/*………………主函数………………*/
int main(void)
{

	init_intr_sys();
	axi_dma_test();

}

主函数很简单就两个子函数

首先来看一下 init_intr_sys();

int init_intr_sys(void)
{
	DMA_Intr_Init(&AxiDma,0);//initial interrupt system
	Init_Intr_System(&Intc); // initial DMA interrupt system
	Setup_Intr_Exception(&Intc);
	DMA_Setup_Intr_System(&Intc,&AxiDma,TX_INTR_ID,RX_INTR_ID);//setup dma interrpt system
	DMA_Intr_Enable(&Intc,&AxiDma);
}

这个函数很简单,就是做一些初始化的工作。

前两个函数,分别初始化DMA和系统中断。这两个函数结构都很相似这里就不再解释。(不过在这里有一个疑问,就是前两个函数都是有返回值的,return XST_SUCCESS;return XST_FAILURE;那么它是怎么判断的?如果返回失败串口会打印出来但是程序还是会向下运行?)

第三个是注册中断异常处理程序

第四个是建立DMA中断系统  在这里判断了是否TX RX在工作会返回一个flag即在测试函数中的Txdone 和Rxdone

第五个使能DMA中断  里面只有四个函数两个断开中断、两个使能中断(rx tx)

接下来就是主函数中的第二个子函数DMA的测试函数

先贴一个关于DDR3的博客,讲的很详细https://blog.csdn.net/hanxuexiaoma/article/details/78979212

首先,测试函数初始化参数有  TX RX 标记位

 然后进入一个大的for循环这个循环控制的是测试次数,并且每次初值加一。

   以第一次循环为例,初值位0x0c。函数先将数据包即0x0c--0x862以for循环的形式存入发送缓存区。之后用Xil_DCacheFlushRange 将数据刷进DDR中。先启动一次读XAxiDma_SimpleTransfer,在启动一次写XAxiDma_SimpleTransfer。在这里将会进入中断并将TX RX标志位置1,等待收发完成。完成后计数器加一,并将标志位置0。最后检查数据是否一致。

    

猜你喜欢

转载自blog.csdn.net/qq_40935988/article/details/84673037