4

我想将数据从闪存复制到 RAM。那么如何在 DMA 控制器中设置 RAM 的目标内存地址,以便它可以使用其通道将数据从源地址(在闪存中)复制到 RAM 内存。

我在 x86 架构上做它,它是一个 8237 DMA。

4

1 回答 1

1

8237 DMA 控制器能够进行从 RAM 到 RAM、从 I/O 到 RAM 以及从 RAM 到 I/O 设备的传输。

您必须考虑到您最多只能复制 64KB 的数据。如果要复制超过 64KB,则需要多次传输操作。

假设您使用的是与 IBM PC 相同的环境,并且您能够在单独的锁存器中设置目标内存的段地址,您将需要:

  1. 标准化您的目标地址段:偏移量,使偏移量低于 16。标准化以这种方式进行(DIV 是整数除法,MOD 是模数):

    normalized_segment = segment + offset DIV 16

    normalized_offset = offset MOD 16

  2. 将段值加载到属于您要使用的通道(页地址寄存器)的高位锁存器中

  3. 将偏移地址加载到要使用的 DMA 通道的起始地址寄存器中。
  4. 继续 DMA 设置(传输长度、模式、EOC 上的中断等)
于 2013-11-21T15:27:07.597 回答