阅读:1746回复:8
关于9054DMA的问题
现在用PLXmon测试DMA
设定从PCI-Local时是对的,内存中的数据传送到了本地存储器中 但是在Local-PCI的时侯,不知道数据传送到那里去了, 是否传送到和本地空间相映射的PCI内存空间?? 还有,怎么用Windriver的API作9054的DMA阿,以前没用过VC 现在看着一大堆子函数头都大了 关于DMA的有P9054_DMAReadWriteBlock,P9054_DMAstart,P9054_DMAclose,P9054_DMAopen等等, 不知道该怎么用 还有例如对于Void P9054_DMAReadWriteBlock(P9054_HANDLE hPlx,DWORD dwLocalAddr,PVOID buf,DWORD dwBytes,BOOL fIsRead,P9054_MODE mode,P9054_DMA_CHANNE dmaChannel) 这里面参数很多,DWORD dwLocalAddr应该是指本地端存储器的地址,buf应该是系统为DMA分配的缓冲区,我要调用该函数的时候应该为buf附什么数值呢??? |
|
沙发#
发布于:2003-06-29 14:15
救命了
现在很急阿 由没有哪位高人直到阿 |
|
板凳#
发布于:2003-06-29 16:02
buf应该赋的是PCI侧的地址,其实可以在程序中定义一个buf【】数组,那么buf就是数组的首地址。P9054_DMAReadWriteBlock这个函数会自动将内存分配给buf[]的首地址写入DMA寄存器。
我还想问你一个问题,上次你发帖子讨论的ready 的时序用vhdl表示问题,后来解决了吗? 我现在很苦脑的就是不知如何用VHDL来表示在ads的上升沿,ready为0,blast下降沿,ready为1? |
|
地板#
发布于:2003-06-29 22:15
buf 是地址吗?
哦,是不是buf是系统分配给DMA传输用的数据缓冲区的基地址 对吗?? 那么buf是什么地址呢,物理地址还使虚拟地址?? 如果我作DMA将本地空间0中前100字节的数据传入内存空间 应该用P9054_DMAReadWriteBlock(hPlx,00000000,buf,100,0,2,0) 这里buf应该些什么数值呢?? 请帮帮我!! 至于你说的READY,我使用VHDL的有限状态机来实现的,参考HDK中的例子。我曾经考虑READY的问题有两个星期,现在觉得直接使用一般的if语句等等很不好实现,还使有限状态机容易一些。 不行的话就给我发信,告诉我你的EMAIL,说不定我可以帮你 |
|
地下室#
发布于:2003-06-30 16:10
我给你发邮件了,你注意查收。咱们做的东西好像很相似。希望能够多沟通。
|
|
5楼#
发布于:2003-07-01 18:12
始终是不明白buf是做什么的
DMA中的缓冲应该是由系统分配的一段内存空间,对把 是否是说,设定一个数组buf[100],数组占据一段内存空间 这样Local to PCI 的DMA的时候,DMA控制器将本地端的数据附值给这个数组,就是相当于将本地端数据传送到了内存空间之中 最后再由CPU读去数组的数值就可以了 |
|
6楼#
发布于:2003-07-02 18:21
老兄,我已经给你发邮件了,状态机mail我一份吧,救命了。
|
|
7楼#
发布于:2003-07-03 20:24
我认为就是那个意思。我已经这么做了。虽然读出的数不对,但我认为和驱动没什么关系,我得问题应该是硬件上的问题。软件方面好像就是你说的那样。
|
|
8楼#
发布于:2003-07-04 14:13
关于buf,可以参考WD_DMALock()函数,相信对你会有帮助。
能否将你设计的DMA时序逻辑的VHDLe_mail一分给我?谢谢! |
|