我在DMA日常工作将数据从PC传送到FPGA中的PCIe卡上。 我读DMA-API.txt和LDD3通道。 15的详细资料。 然而,我无法弄清楚如何做从PC DMA传输IOMEM的PCIe卡上的一致块。 在LDD3 PCI爸爸样本映射一个缓冲区,然后告诉办卡的DMA传输,但我需要在PC上做到这一点。
我已经发现:
请求总线主控器
pci_set_master(pdev);
设置DMA面具
if (dma_set_mask(&(pdev->dev), DMA_BIT_MASK(32))) { dev_err(&pdev->dev,"No suitable DMA available.\n"); goto cleanup; }
请求DMA通道
if (request_dma(dmachannel, DRIVER_NAME)) { dev_err(&pdev->dev,"Could not reserve DMA channel %d.\n", dmachannel); goto cleanup; }
地图DMA传输缓冲区
dma_handle = pci_map_single(pci_dev, buffer, count, DMA_TO_DEVICE);
题:
我有什么为了让电脑执行DMA传输,而不是办卡?
感谢您的帮助!
首先感谢您的回复。 也许我应该把我的问题,更准确地说:
- 在我的理解的PC必须有一个DMA控制器。 我如何进入这个DMA控制器开始转移到PCIe卡映射IO区上的内存?
- 我们的规范要求,该PC的DMA控制器启动传输。 但是,我只能找到例子,其中设备会做DMA工作(DMA_mapping.txt,LDD3 ch.15)。 是否有一个原因,为什么没有人使用PC的DMA控制器(它仍然有DMA通道,虽然)? 它会更好,请求我们的项目规格改变?
谢谢你的耐心。