关于pc机dma传输的问题

大神能不能帮我解答一下,现在要做一个pci通信,用的是9030,没有dma控制器,想用pc机上的南桥上的dma主动发起传输,这样实现可能吗?

http://zhidao.baidu.com/link?url=C8-wQd9to_ojqqgPJ4n2ahMhQ0Mb1V0KqeP0FL4hPYaNAPZbrCgDtUVyvdNghvBBlzqwB1mx5af-LpjY2GeKr_

如果您使用的是PCI 9030芯片,并且没有DMA控制器,但希望通过PC机上的南桥的DMA来实现主动发起传输,这可能是一种可行的解决方案。以下是一个示例,展示了如何使用南桥的DMA来进行PCI通信:

  1. 配置南桥的DMA通道:首先,您需要配置南桥的DMA通道以与PCI 9030进行通信。这通常涉及设置DMA通道的起始地址、传输长度和其他相关参数。具体的配置方法取决于您使用的南桥芯片型号和所使用的操作系统。

  2. 初始化PCI 9030芯片:在您的应用程序中,初始化PCI 9030芯片以使其准备好接收DMA传输。这可能涉及设置相应的寄存器或配置寄存器。

  3. 触发DMA传输:使用南桥的DMA通道发起传输。您可以使用操作系统提供的DMA API或相关库函数来触发传输。确保设置正确的源和目标地址,以及传输的长度。

  4. 处理传输完成中断:在传输完成后,南桥会触发一个中断来通知您传输已完成。您需要编写中断处理程序来处理这个中断,以便您可以读取或处理从PCI 9030芯片传输过来的数据。
    下面是一个示例代码片段,展示了如何使用南桥的DMA来进行PCI通信:

// 配置南桥的DMA通道
configure_dma_channel();

// 初始化PCI 9030芯片
initialize_pci_9030();

// 触发DMA传输
trigger_dma_transfer(source_address, destination_address, transfer_length);

// 等待传输完成中断
wait_for_dma_transfer_complete();

// 处理传输完成中断
handle_dma_transfer_complete_interrupt();

// 从PCI 9030芯片读取数据
read_data_from_pci_9030();

具体的实现取决于您所使用的南桥芯片型号和操作系统。您需要根据相关文档和资料来配置DMA通道、初始化PCI 9030芯片以及处理传输完成中断。