shiweibadboy
驱动牛犊
驱动牛犊
  • 注册日期2009-06-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望31点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2487回复:3

vxworks PLX9054驱动开发中对DMA操作遇到的问题

楼主#
更多 发布于:2009-06-26 21:56
我们知道PLX9054DMA操作中进行数据传输有四个寄存器:
1:PCI 地址寄存器
2:本地地址寄存器
3:传输数据长度寄存器
4:传输方向寄存器

现想实现PCI MASTER (既CPU板)读取目标板存储器上地址为Local Address的长度为length的数据到CPU板的buffer
char *buffer
buffer=malloc(length);


问:

PCI 地址寄存器 写入的就是buffer指向的地址?
本地地址寄存器 写入的就是Local Address?    
这两个寄存器的填写都需要物理地址,我不知道怎么去理解。DMA 传输还需要是连续的
malloc buffer地址是物理地址还是虚拟地址? 其分配的长度为length的空间是否连续?Local Address是目标板的本地地址 还是目标板Local Address映射到PCI的地址?
malloc buffer市虚拟地址的话用什么方法转换到我所需要的物理地址?

哪位高手能帮我将这方面的迷惑解答下和理清下?小弟很是感激
我的邮箱是:shiweibadboy@163.com
flying
驱动小牛
驱动小牛
  • 注册日期2002-08-01
  • 最后登录2016-06-19
  • 粉丝0
  • 关注0
  • 积分197分
  • 威望70点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2009-07-01 21:53
PCI 地址寄存器 写入的就是buffer指向的地址?
->是

本地地址寄存器 写入的就是Local Address?    
->是

这两个寄存器的填写都需要物理地址,我不知道怎么去理解。DMA 传输还需要是连续的
malloc buffer地址是物理地址还是虚拟地址? 其分配的长度为length的空间是否连续?
->需要看你执行的是Block DMA还是SGL DMA了,在Block DMA的时候就需要连续的物理地址,并且最大为64KB。

Local Address是目标板的本地地址 还是目标板Local Address映射到PCI的地址?
->Local Address是目标板的本地地址

malloc buffer市虚拟地址的话用什么方法转换到我所需要的物理地址?
->Vxworks下好像没有这个区分的吧
shiweibadboy
驱动牛犊
驱动牛犊
  • 注册日期2009-06-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望31点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-07-03 22:21
回 1楼(flying) 的帖子
呵呵  谢谢你
希望你还能关注这贴 我想跟你学习下

能给我个具体点的代码片段吗 我还是不理解
shiweibadboy
驱动牛犊
驱动牛犊
  • 注册日期2009-06-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望31点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-07-03 22:23
我的QQ 77634247 希望能留下信息跟大家交流
游客

返回顶部