メディア
連載
» 2016年08月22日 11時30分 公開

Q&Aで学ぶマイコン講座(29):DMAのメリットって何? (2/3)

[菅井賢(STマイクロエレクトロニクス),EDN Japan]

DMAの基本的な動作

 図2に、詳しいデータ転送の経路を記載しました。

図2 DMAの詳細動作例 図2:DMAの詳細動作例 (クリックで拡大)
[a](左図)はCPUを使ったデータ転送 / [b](右図)はDMAを使ったデータ転送

 これはRAMからデータを取り出して通信機能へ送る場合です。通常、CPUがデータ転送を行う場合(図2[a])、まずRAMからデータを読み出します。読み出されたデータは、一度CPU内のALUを通ります。そして、ALUではデータに何の処理も行わずに、そのまま出力し、通信機能にデータは送られます。一方、DMAはCPUを介さずにRAMからデータを読み出し、通信機能へ転送します。その際、CPUは使われないので、ALUを使って別の演算ができます。マイコンとしては2つの仕事を並列処理できることになり、非常に効率的です。

 最初CPUが、DMAにデータ数、転送元/先アドレス、転送モードなどを設定します。その後、DMA転送スタートのトリガーが来るとDMAは転送を開始します。DMA転送スタートのトリガーはソフトウェアでもハードウェアでもかけることができます。DMAの転送が終了すると、DMAはCPUに割り込みをかけて、転送終了を知らせます。

アービトレーションの種類(CPUとのバス権の共用)

 DMAは便利ですが万能ではありません。バスは1本しかありませんので、DMAがバスを使っている時には、CPUはバスが使えなくなります。もし、DMAが大量のデータ転送を行うために、長時間バスを使い続けるとCPUはその間、ずっとバスが使用できなくなり、演算した結果をメモリに格納できなくなるような不具合が発生します。そこで、CPUとDMAの間で効率良くバスを使う調整が必要になります。これをバスアービトレーションと呼びます。そして、バスを使用する権利をバス権といいます。バスアービトレーションは、誰がバス権を持つかを調整(調停)することです。

 バスアービトレーションの方式には、いくつか種類があります。代表的なものは、ラウンドロビン、サイクルスチール、バーストです(図3参照)。

図3 バスアービトレーション方針 図3:バスアービトレーション方式 (クリックで拡大)

 ラウンドロビンは順番にバス権を譲っていく方式です。例えば、バスマスターが2つの場合、CPUがバスを使ったら、次のバスサイクルはDMAが使い、その次はCPUが使うという風に交代でバスを使います。

 サイクルスチールと呼ばれる方式では、CPUがメモリにアクセスしていないバスサイクルの間をぬって、DMAがバスを使う方式です。

 バースト方式は、一定の時間、1つのバスマスターがバス権を占有する方式です。優先度の高いデータを急いで転送したい時に使います。例えば、DMAが優先度の高いデータを10個送る場合に、この10個のデータ全部を転送し終わるまで、DMAがバスを占有します。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSフィード

公式SNS

EDN 海外ネットワーク

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.