zynq在ucosiii系统下ps dma api编程

2016-05-26 21:07 阅读 413 次 评论 0 条

zynq下的ucos系统并没有像uart一样,已经封装成ucos系统下的调用方式。如果在ucos系统下使用,就需要按照ucos系统的方式,进行封装sdk下的xdmaps中函数,因为ucos将中断的调用方式,重新做了封装,所以直接使用xdmaps估计中断会存在问题。

clip_image002

首先是dmsps的初始化,封装函数如下,基本调用xdmaps中的函数,增加了互斥信号量与使用信号量,见上面UCOS_DMAPS的定义。ps dma含有8个通道,每个通道可以单独工作,这里只有使用了通道0,所以只对通道0进行了信号量控制。

clip_image004

初始化中可包含了,对dma通道0中断的映射,这个完全是调用ucos的函数进行的。并且中断处理函数的指针与xdmaps中的handle也是不一样的,如下所示。中断id需要在sdk中查询,然后赋值,见上图中的XPAR_XDMAPS_0_DONE_INTR_0。前4个通道与后4个通道的中断id是不连续的。

clip_image006

启动dma传输还是使用xdmaps中的XDmaPs_Start()函数,只是在启动前,增加了获取互斥信号量与通道信号量的内容,代码如下。

clip_image008

最后是dma中断处理,函数如下所示,调用了xdmaps中的XDmaPs_DoneISR_0()中断函数,里面有清中断标志操作等,如果自己写,不一定能写全,所以直接调用了。这里就是释放dma通道信号,使程序回到dma发送函数中,完成发送同步。

clip_image010

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:zynq在ucosiii系统下ps dma api编程 | 起点博客
分类:应用笔记 标签:, , ,

发表评论


表情