阅读:2487回复:3
vxworks PLX9054驱动开发中对DMA操作遇到的问题
我们知道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 |
|
沙发#
发布于: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下好像没有这个区分的吧 |
|
板凳#
发布于:2009-07-03 22:21
回 1楼(flying) 的帖子
呵呵 谢谢你 希望你还能关注这贴 我想跟你学习下 能给我个具体点的代码片段吗 我还是不理解 |
|
地板#
发布于:2009-07-03 22:23
我的QQ 77634247 希望能留下信息跟大家交流
|
|