gpt4 book ai didi

x86 - 如何通过 DMA Controller 访问 RAM 存储器?

转载 作者:行者123 更新时间:2023-12-03 14:27:58 27 4
gpt4 key购买 nike

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

我是在 x86 arch 上做的,它是一个 8237 DMA。

最佳答案

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

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

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

  • 标准化您的目标地址段:偏移量,使偏移量低于 16。
    归一化是这样进行的(DIV是整数除法,MOD是模数):
    normalized_segment = segment + offset DIV 16normalized_offset = offset MOD 16
  • 将段值加载到属于您要使用的 channel 的高位锁存器(页地址寄存器)
  • 将偏移地址加载到要使用的 DMA channel 的起始地址寄存器中。
  • 继续 DMA 设置(传输长度、模式、EOC 中断等)
  • 关于x86 - 如何通过 DMA Controller 访问 RAM 存储器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9157900/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com