4

フラッシュメモリからRAMにデータをコピーしたい。それで、DMAコントローラーでRAMの宛先メモリアドレスを設定して、そのチャネルを使用してソースアドレス(フラッシュメモリ内)からRAMメモリにデータをコピーできるようにするにはどうすればよいですか。

私は x86 arch でそれをやっていて、それは 8237 DMA です。

4

1 に答える 1

1

8237 DMA コントローラは、RAM から RAM、I/O から RAM、RAM から I/O デバイスへの転送を行うことができます。

最大 64KB のデータしかコピーできないことを考慮する必要があります。64KB を超えてコピーする場合は、複数回の転送操作が必要になります。

IBM PC と同じ環境を使用していて、宛先メモリのセグメント アドレスを別のラッチに設定できると仮定すると、次のことを行う必要があります。

  1. オフセットが 16 未満になるように、宛先アドレスのセグメント:オフセットを正規化します。

    normalized_segment = segment + offset DIV 16

    normalized_offset = offset MOD 16

  2. セグメント値を、使用するチャネルに属する上位ビット ラッチ (ページ アドレス レジスタ) にロードします。

  3. 使用する DMA チャネルの開始アドレス レジスタにオフセット アドレスをロードします。
  4. DMA セットアップを続行します (転送長、モード、EOC での割り込みなど)。
于 2013-11-21T15:27:07.597 に答える