米联客——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。最后检查数据是否一致。

    

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值