Pcie Dma传输数据,不建立DMA事务直接读取寄存器行吗?
lurel 2011-12-05 10:28:03 本人才接触驱动,对于驱动基本是白痴一个。最近需要做一个Pcie驱动,需要用DMA方式来传输数据。
看了好多例子,发现在DMA传输时需要在驱动中建立DMA事务。
例如:首先 WdfDmaTransactionInitialize,然后 WdfDmaTransactionExecute,在EvtProgramDma函数中对寄存器进行读写,主要是把内存的物理地址写给寄存器的操作,然后等待中断,完成事务,释放。
我所疑惑的是,为什么要建立这个DMA事务呢?直接通过MmGetPhysicalAddress这个函数可以得到内存的物理地址,把它直接写给寄存器不行吗?为什么要EvtProgramDma 里面写呢?非要建立DMA事务吗? 既然在pcie设备加载的时候,我们已经取得的硬件基地址,直接读写不行吗?在FPGA里面能实现吗?
希望大侠帮忙解释一下, 谢谢啦