0

我必须使用 DMA(直接访问内存)建立并行连接时遇到问题。

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

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

4

1 回答 1

2

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

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

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

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