質問: DMAコントローラによるRAMメモリへのアクセス方法は? 私はフラッシュメモリからRAMにデータをコピーしたい。 では、どのようにDMAコントローラのRAMのデスティネーションメモリアドレスを設定して、そのチャネルを使ってソースアドレス(フラッシュメモリ内)からRAMメモリにデータをコピーすることができますか? 私はx86アーチでそれをやっていて、それは8237 DMAです。
回答: 8237 DMAコントローラは、RAMからRAMへ、I/OからRAMへ、RAMからI/Oデバイスへの転送を行うことができます。 最大64KBのデータのみをコピーできることを考慮する必要があります。 64KB以上をコピーする場合は、複数の転送操作が必要です。 IBM PCと同じ環境を使用していて、宛先メモリーのセグメント・アドレスを別個のラッチに設定できると仮定すると、次のことが必要になります。 1. Normalize your destination address segment:offset so that offset is lower than 16. Normalization is carried this way (DIV is integer division, MOD is modulus): `normalized_segment = segment + offset DIV 16` `normalized_offset = offset MOD 16` 2. Load the segment value into the high order bits latch belonging to the channel you want to use (the page address register) 3. Load the offset address into the Start Address Register of the DMA channel you want to use. 4. Continue with DMA setup (transfer length, mode, interrupt on EOC, etc)