阅读:2394回复:1
老板逼疯啦,DDK如何设计PCI9054的DMA驱动模块,救命啊!
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. |
|
沙发#
发布于:2010-08-08 23:15
PLX提供的驱动就是DDK写的啊,直接用提供的SDK
|
|