Renesas Synergy™

FAQ 1008811 : DMA(Direct Memory Access)

マイコンの応用システムで、I/Oデバイスやメモリの間でデータを転送する場合、通常のアクセスでは、CPUが転送元と転送先のアドレスをそのつど(1バイトごとに)指定して、いったん取り込んだデータを出力します。このため、アドレスの更新管理が必要ですし、プログラム処理なので、転送に時間がかかり、大量データの処理では大きな時間差になります。特にリアルタイムの動画データや音声データ、ディスク装置とのデータ転送など、CPU処理では間に合わなくなります。
CPUを介さずに、このデータ転送を高速化するのがDMAです。DMAコントローラがDMAを実行しますが、データは取り込まず、バスの駆動だけします(ただしメモリ-メモリ間の転送では、両アドレスの切り替えが必要なので、いったんデータを取り込みます)。I/Oデバイスに対してDMAコントローラは、DMA許可信号をセレクト信号としてアクセスするので、I/Oのアドレスは出力しません。
DMA転送に先立って、CPUはDMAコントローラに動作モードを設定するだけです。データ転送時には、外部からDMA要求信号がDMAコントローラに入力され、CPUとのハンドシェークでCPUをホールド(停止)状態にして、データ転送を行います。



ここで、DMAコントローラによっては、リードとライトの2サイクルで転送するモードと、リードとライトを同時にして1サイクルで転送するモード(V850E/Mxシリーズに内蔵のフライバイなど)を持っている場合があります。



データ転送後に引き続きDMA要求信号がアクティブなら、DMAコントローラは、事前に設定された転送バイト数(ターミナル・カウント:TC)に達するか、停止信号(TC/END)が入力されるまで、データ転送を継続します。実際には、データ転送ごとにTCをデクリメント(-1)して、0になると次の転送を停止させます。ただしオートロード・モードのように、TC=0になっても停止しない機能を持つDMAコントローラがあります。このモードでは、転送メモリ・アドレスとTCの初期設定値を自動的に再設定して、同じメモリ領域のデータを繰り返し転送することができ、画像データの表示などに利用されます。
DMA転送はモードによって、1転送ごとにCPUへバスを開放する(ホールド要求を解除する)かどうかなど、動作が異なります。次に、転送モードごとのバス・サイクル例を紹介します。DMAコントローラによって、モードの名称や動作、サポートするモードが異なる場合があります。

他にご質問がございましたら、リクエストを送信してください