我想将数据从闪存复制到 RAM。那么如何在 DMA 控制器中设置 RAM 的目标内存地址,以便它可以使用其通道将数据从源地址(在闪存中)复制到 RAM 内存。
我在 x86 架构上做它,它是一个 8237 DMA。
8237 DMA 控制器能够进行从 RAM 到 RAM、从 I/O 到 RAM 以及从 RAM 到 I/O 设备的传输。
您必须考虑到您最多只能复制 64KB 的数据。如果要复制超过 64KB,则需要多次传输操作。
假设您使用的是与 IBM PC 相同的环境,并且您能够在单独的锁存器中设置目标内存的段地址,您将需要:
标准化您的目标地址段:偏移量,使偏移量低于 16。标准化以这种方式进行(DIV 是整数除法,MOD 是模数):
normalized_segment = segment + offset DIV 16
normalized_offset = offset MOD 16
将段值加载到属于您要使用的通道(页地址寄存器)的高位锁存器中