阅读:2526回复:3
物理地址与逻辑地址,虚拟地址的转换关系?????
最近在做一个项目,用到ALTERA的FPGA,内部实现PCI接口与主控DMA处理器,和1K双端口RAM功能,且卡内部实现了DMA从内存中到双端口RAM中的硬件实现.
ALTERA中采用5个寄存器来控制数据搬运如下: A.状态 B读地址 C写地址 D搬运长度 E控制 问题? 1采用公用缓冲区模式,将在STARTDEVICE中加入IOGETDMAAP.....得到DMA控制器.再用IOALLOCATECOMMONBUFFER来得到虚拟地址和物理地址. 2通过IOALLOCATECOMMONBUFFER中的虚拟地址来写连续数据0,1,2,3,.....19. 3通过WRITE_REGISTER_BUFFER_ULONG中写到双端口RAM中为数据,F,F,F.....F(20个) 4在实际的DMA操作时进行以下操作: A写读地址寄存器,内容为IOALLOCATECOMMONBUFFER中返回的PHYSICAL_ADDRESS的LOWPART值. B写写地址,内部卡固定为0X00 C写长度,20*4个长整形 D写状态为0 E写控制进行搬运 结果:数据搬运个数正确,写地址正确,长度正确,就只有数据错误,不知道什么原因. 个人看法: 是不是通过IOALLOCATECOMMONBUFFER中得到的物理地址不是卡中DMA所需要的物理地址,因为相关文档中说明是逻辑地址,而又没有相关函数来转换, 这个问题困扰了很久了,请各位大侠给个看法,给个意见, |
|
沙发#
发布于:2009-07-31 17:25
或是驱动中是否存在问题.?
allocatecommonbuffer中返回的物理地址,,且DDK中说明此为锁定内存,且不需要通过MAPTRANFER来锁定.但试过好象仍不行. |
|
板凳#
发布于:2009-08-13 22:27
问题解决
|
|
地板#
发布于:2009-09-14 11:36
怎麼解決的也不提,很垃圾
|
|