[H8-ML(3996)] Re: DMAについて
From: Shigeru Makino <mac@xxxxxxxxxxxxxx>
Date: 2003年10月07日(火)07時29分37秒
macです。

いきなり説教するのもなんですが...

To:を書くのを省略するため、
無関係な記事にReplyするのは、
スレッドを混乱させる大変悪い習慣です。

メールアドレスだけ、copy & pasteして新規メールを書き、
不要な、References:を付けないようご注意ください。
さらに、無関係な記事まで全分引用するのは、
まったく論外です。

関係のある記事にReplyする場合でも、
論旨が変わらない程度に必要部分を引用するように、
心がけてください。

shimizu" さん<t970239@xxxxxxxxxxx> wrote:

> DMAとは何なのかがよくわからず、メールを書かせていただきました。

Direct Memory Accessとは、
CPUのRead/Write機能を利用せず、
主として、I/Oデータをmemoryに、
読み込み/書き込みする技術です。
 
> A/D変換で8bitデータがH8に帰ってくるのですが、
> そのデータ量が多いため、そのデータを外部のメモリに蓄えております。
> 1MHzの速度で次々にA/DからH8にデータが来るのですが、
> DMA転送とやらをしないといけないのかなぁーと思っています。
> メモリには次のデータが来るまでに、アドレス指定をイチイチしなければならず、

上記の通り、CPUでI/O portから、データを読み、
Memoryに転送していたのでは、
間に合わない/他の処理に支障をきたす場合、
DMAを使うのが、もっとも一般的な応用です。

ですので、DMAを使おうとしていること自体は、
「正解」です。

でも、今申し上げた通り、
「もっとも一般的な応用」ですので、
マニュアル/そのた各種解説書に、
そのまま使える例が、多数書いてあります。

それを読んで、分からない個所を、
具体的に質問してください。

今回のように「読み取り」を行うには、
読み込むI/O portのアドレス、
転送先のMemoryの開始アドレス、
転送するデータの個数をセットし、
読み込むタイミングがDMA controllerに伝わるよう、
ハードウエアの準備をしてDMAを開始すると、

転送するデータの個数に達するまで、
CPUは、関与せずデータをmemory(配列)に、
取り込んでくれます。

ただ、DMAで転送するmemory addressは、
CPUのdata address空間と、
共有しており、CPUがatomicな処理をしている期間は、
DMAが、待たされることになります。

そのため、DMA転送中、CPUは何もしないで待機するか、
DMAと競合しないようにするか、
さまざまな制約を潜り抜けてプログラムする必要があり、
DMAを上手に使用するには、それなりの技量が必要で、
場合により、DMAでは確実にデータ収集できない場合も、
結構あります。

1 MHz程度のデータ転送なら、DSPを使えば、
楽にPIOで処理できる範囲ですし、
一度に転送するデータ量が少量なら、
FIFOで間接的に採れば、かえって、
楽に確実に処理できるので、

1. コスト上仕方がない。
2. DMAを勉強したい。
3. DSPなど触ったこともないし、
いまさらシステム設計をやり直すには遅すぎる。

などなど、DMAが本当に第一選択肢なのか、
十分検討することをお勧めします。

いずれにしても、
> DMAとは何なのかがよくわからず
選択すべき技術ではありません。

-- mac

スレッド概略
[3987(R)](起点)
 └[3995(U)]
   └[表示中]
     └[3997(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]