lurel 2011年12月05日
Pcie Dma传输数据,不建立DMA事务直接读取寄存器行吗?
本人才接触驱动,对于驱动基本是白痴一个。最近需要做一个Pcie驱动,需要用DMA方式来传输数据。


看了好多例子,发现在DMA传输时需要在驱动中建立DMA事务。
例如:首先 WdfDmaTransactionInitialize,然后 WdfDmaTransactionExecute,在EvtProgramDma函数中对寄存器进行读写,主要是把内存的物理地址写给寄存器的操作,然后等待中断,完成事务,释放。


我所疑惑的是,为什么要建立这个DMA事务呢?直接通过MmGetPhysicalAddress这个函数可以得到内存的物理地址,把它直接写给寄存器不行吗?为什么要EvtProgramDma 里面写呢?非要建立DMA事务吗? 既然在pcie设备加载的时候,我们已经取得的硬件基地址,直接读写不行吗?在FPGA里面能实现吗?


希望大侠帮忙解释一下, 谢谢啦
...全文
661 点赞 收藏 19
写回复
19 条回复

还没有回复,快来抢沙发~

发动态
发帖子
驱动开发/核心开发
创建于2007-09-28

9169

社区成员

2.1w+

社区内容

硬件/嵌入开发 驱动开发/核心开发
社区公告
暂无公告