sandybull
驱动牛犊
驱动牛犊
  • 注册日期2002-09-30
  • 最后登录2003-11-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1746回复:8

关于9054DMA的问题

楼主#
更多 发布于:2003-06-28 10:38
现在用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附什么数值呢???
sandybull
驱动牛犊
驱动牛犊
  • 注册日期2002-09-30
  • 最后登录2003-11-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-29 14:15
救命了
现在很急阿
由没有哪位高人直到阿

ml0552
驱动牛犊
驱动牛犊
  • 注册日期2003-05-27
  • 最后登录2003-10-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-29 16:02
buf应该赋的是PCI侧的地址,其实可以在程序中定义一个buf【】数组,那么buf就是数组的首地址。P9054_DMAReadWriteBlock这个函数会自动将内存分配给buf[]的首地址写入DMA寄存器。
我还想问你一个问题,上次你发帖子讨论的ready 的时序用vhdl表示问题,后来解决了吗?
我现在很苦脑的就是不知如何用VHDL来表示在ads的上升沿,ready为0,blast下降沿,ready为1?
sandybull
驱动牛犊
驱动牛犊
  • 注册日期2002-09-30
  • 最后登录2003-11-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于: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,说不定我可以帮你
ml0552
驱动牛犊
驱动牛犊
  • 注册日期2003-05-27
  • 最后登录2003-10-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-30 16:10
我给你发邮件了,你注意查收。咱们做的东西好像很相似。希望能够多沟通。
sandybull
驱动牛犊
驱动牛犊
  • 注册日期2002-09-30
  • 最后登录2003-11-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-07-01 18:12
始终是不明白buf是做什么的
DMA中的缓冲应该是由系统分配的一段内存空间,对把
是否是说,设定一个数组buf[100],数组占据一段内存空间
这样Local to PCI 的DMA的时候,DMA控制器将本地端的数据附值给这个数组,就是相当于将本地端数据传送到了内存空间之中
最后再由CPU读去数组的数值就可以了

wwenguang
驱动小牛
驱动小牛
  • 注册日期2002-08-12
  • 最后登录2005-08-22
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-07-02 18:21
老兄,我已经给你发邮件了,状态机mail我一份吧,救命了。
ml0552
驱动牛犊
驱动牛犊
  • 注册日期2003-05-27
  • 最后登录2003-10-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-07-03 20:24
我认为就是那个意思。我已经这么做了。虽然读出的数不对,但我认为和驱动没什么关系,我得问题应该是硬件上的问题。软件方面好像就是你说的那样。
louis_hioe
驱动小牛
驱动小牛
  • 注册日期2003-04-23
  • 最后登录2008-12-18
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望22点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-07-04 14:13
关于buf,可以参考WD_DMALock()函数,相信对你会有帮助。
能否将你设计的DMA时序逻辑的VHDLe_mail一分给我?谢谢!
游客

返回顶部