linux zynq ps dma,zynq在ucosiii系统下ps dma api编程

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

65d2e0eee43bf78f1f925e426377cc14.png

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

a0b655a53098ea6c6ef5905350ed21d1.png

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

fe22ca5f43e61b65fb2c56985a42ad32.png

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

feaf4a239c6fe6a6a2a4642af5f346b4.png

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

76e80edcb76653c05ee0d2ff7c0a649e.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Zynq DMA(Direct Memory Access)是一个针对Xilinx的Zynq系列芯片的外设模块,用于实现高速数据传输。Zynq芯片集成了FPGA和ARM Cortex-A9处理器,DMA模块位于Processing System(PS)和Programmable Logic(PL)之间,提供了高性能的数据传输通道。 在Linux操作系统的支持下,Zynq DMA可以实现快速的数据传输和处理。Linux提供了对DMA控制器的驱动程序,使得用户可以在操作系统上使用DMA功能。用户可以通过在Linux上进行编程,使用DMA来实现高效的数据传输和处理,从而提高系统的性能。 使用Zynq DMA的好处是它可以通过减少CPU负载和系统总线使用来提高系统性能。由于DMA是一种直接从外设到内存的数据传输方式,可以在不占用CPU资源的情况下完成数据传输。因此,使用Zynq DMA可以提高系统的并发性和效率。 在Linux上使用Zynq DMA需要进行一些配置和编程。用户需要配置DMA引擎及其相关寄存器,以确保正确的数据传输。然后,用户可以使用Linux上的API或驱动程序来访问DMA模块,并指定数据传输的方向、缓冲区等参数。通过这种方式,用户可以灵活地控制DMA的操作,实现高效的数据传输和处理。 总而言之,Zynq DMA PS-PL Linux是一种在Zynq芯片上使用DMA模块实现高速数据传输的方法。通过在Linux操作系统上进行配置和编程,用户可以灵活地控制DMA的操作,提高系统的性能和效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值