免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4808 | 回复: 3
打印 上一主题 下一主题

如何用C语言编程控制DMA的操作 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-28 11:23 |只看该作者 |倒序浏览
我现在在做一个FPGA的项目,主要是实现FPGA和PC间DMA的操作。FPGA和PC是通过PCIe相连的。现在已经有了FPGA的PCIe core,还有PC(linux)的PCIe的DMA驱动程序。

现在我想用C语言在PC编程实现DMA的操作,可是一时不知如何下手。是不是c语言有什么function可以直接调用就可以实现DMA的操作。或者,有什么例子可以借鉴。

谢谢先了。

论坛徽章:
0
2 [报告]
发表于 2010-05-28 22:52 |只看该作者
硬件都已经做了,剩下的就是写驱动的问题了。

老的PCI有一个BUS MASTER的观念,有这个功能就可以进行DMA. 新的PCIE好像有点不一样?记不清了。

一般操作硬件的话,是写一个驱动,比如LINUX PCIE 设备的驱动。首先要初始化设备,然后找到设备的资源。既然是你们自己做的FPGA,应该有寄存器接口,告诉驱动写某个寄存器就会启动DMA,(当然事先可能要设置下地址什么的)。那么驱动就按照要求去做吧。

C语言本身是没有FUNCTION直接调用下就启动DMA的。C语言是个上层应用语言的规范,不关心你怎么操作硬件。因为硬件种类太多,很多不一样。很多驱动用C来实现,是因为C比汇编好写,同时也比较接近硬件。

不知道LZ有没有看过操作系统的书或者类似的课程,最好看下。如果没时间,直接看LDD3吧。不过没有操作系统基础,可能看起来很累。

论坛徽章:
1
NBA常规赛纪念章
日期:2015-05-04 22:32:03
3 [报告]
发表于 2010-06-03 10:20 |只看该作者
应该有相关的寄存器接口吧,通过寄存器接口使能DMA

论坛徽章:
0
4 [报告]
发表于 2010-06-07 19:42 |只看该作者
你要在内核里面写一个驱动,把PIC的寄存器映射到内存,再通过读写这个内存来操作硬件(根据spec)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP