C应用程序,用于直接内存访问的并行通信

时间:2013-08-08 12:55:20

标签: c parallel-processing dma

我遇到了并行连接问题,我必须使用DMA(Direct Acces Memory)建立。

我必须通过C应用程序将一些字符写入具有给定地址的并行端口。我知道对于PIO访问,有_inp / _outp函数,但我不知道如何管理直接内存访问并行通信。

有谁知道我应该怎么做或有任何好的联系(即使经过长时间的网络研究,我也找不到任何链接

1 个答案:

答案 0 :(得分:2)

这不是一般可以回答的问题。

DMA访问由DMA控制器(在旧PC中)或使用"总线主控"确定。 (PCI以后)。这些解决方案中的任何一个都需要访问您正在使用的设备的相关硬件手册(以及DMA控制器,如果适用)。

一般来说,这个原则就是这样:

  1. 为设备保留一块内存(DMA缓冲区)以存储数据。
  2. 配置设备以将数据存储在所述区域中(请记住,在几乎所有情况下,DMA都发生在物理地址上,而不是Windows或Linux使用的虚拟地址)。
  3. 当设备存储了所请求的数据时,将触发中断,负责设备的软件接收中断并向数据已准备好的某些更高级软件发出信号,并(可能)重新编程设备以再次开始存储数据(将DMA缓冲区复制到其他位置,或者分配新的DMA缓冲区之后)。