C应用程序,用于具有直接存储器访问的并行通信



我遇到了一个并行连接的问题,我必须使用DMA(直接访问内存)来建立。

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

有人知道我应该怎么做吗?或者有任何好的链接吗(即使在对Web 进行了长时间的研究后,我也找不到任何链接)

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

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

一般来说,原理是这样的:

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

最新更新