shirullan
驱动牛犊
驱动牛犊
  • 注册日期2008-06-14
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分46分
  • 威望352点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2324回复:1

老板逼疯啦,DDK如何设计PCI9054的DMA驱动模块,救命啊!

楼主#
更多 发布于:2010-08-07 20:19
INTCST、DMAMODE0、DMAPADR0、DMALADR0、DMASIZ0、DMADPR0、DMACSR0这些寄存器如何设置?
我现在只想通过DMA方式将Local端的数据读取回来,不管什么中断之类的。

PCI端的地址如何设置,DMA过来的数据,总要有缓冲区存储,然后应用程序,可以发送IOCTL读取这个缓冲区的数据。

Local端的地址如何设置,据说这个设置后LA[31:0]就是在这个地址的基础上开始+4,+4的。

DMADPR0设置成0x8,只是说明传输方向是Local To PCI

DMACSR0启动DMA。

项目中PCI9054 Local端的地址线、数据线,直接接到了DSP的外部总线上,没有通过FPGA走,所以也观察不到这个上面的数据变化。

另外,DMA回来的数据,也不知道到底存储到什么地方去了,网上一直说DMAPADR0要设置成物理地址,可是驱动中,如何弄这个,这个物理地址是怎么来的,设置好了,驱动如何访问这个物理地址的数据,然后将数据传输到应用程序。

寄存器配置了好多。

READY、BLAST信号等,变化奇奇怪怪的。

想实现PCI9054手册上的
Timing Diagram 5-45. DMA Aligned PCI Address to Aligned Local Address,Bterm Enabled,Bursted Enable这个模式,感觉应该会比较快的。

之前一直是单周期的,每发起一次访问,就要仲裁一次,READY信号,指示PCI9054可以锁存数据,用的是READ_REGISETR_ULONG、WRITE_REGISTER_ULONG之类的函数。

读操作,返回的值,就是函数的返回值,写操作,将写入的数据放在函数的参数中就是的。

现在想要实现DMA,没有什么返回值,要设置的是地址,然后将这个地址的数据返回到应用程序,希望能够得到热心人士的帮助,我的QQ是:396780133.
lenovo001
驱动牛犊
驱动牛犊
  • 注册日期2005-03-11
  • 最后登录2013-11-26
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望74点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2010-08-08 23:15
PLX提供的驱动就是DDK写的啊,直接用提供的SDK
游客

返回顶部