フラッシュメモリからRAMにデータをコピーしたい。それで、DMAコントローラーでRAMの宛先メモリアドレスを設定して、そのチャネルを使用してソースアドレス(フラッシュメモリ内)からRAMメモリにデータをコピーできるようにするにはどうすればよいですか。
私は x86 arch でそれをやっていて、それは 8237 DMA です。
8237 DMA コントローラは、RAM から RAM、I/O から RAM、RAM から I/O デバイスへの転送を行うことができます。
最大 64KB のデータしかコピーできないことを考慮する必要があります。64KB を超えてコピーする場合は、複数回の転送操作が必要になります。
IBM PC と同じ環境を使用していて、宛先メモリのセグメント アドレスを別のラッチに設定できると仮定すると、次のことを行う必要があります。
オフセットが 16 未満になるように、宛先アドレスのセグメント:オフセットを正規化します。
normalized_segment = segment + offset DIV 16
normalized_offset = offset MOD 16
セグメント値を、使用するチャネルに属する上位ビット ラッチ (ページ アドレス レジスタ) にロードします。