1|2|3使用上の注意事項DMAを使用した際に発生する問題の例を2つ挙げます。1つは、オーバーランで、もう1つはキャッシュと併用した際に発生するメインメモリのデータの消失です。オーバーランは「Q&Aで学ぶマイコン講座第16回:オーバーランエラーの原因」で詳しく述べましたが、通信機能などで、受信バッファに取り込まれたデータをCPUまたはDMAが読み出さないうちに、次のデータを取り込んでしまい、1つ前の受信データが失われることです。バスアービトレーションがラウンドロビン方式だと、オーバーランは発生しにくいですが、サイクルスチールやバースト方式だとCPUまたはDMAがバスを使うことができずに、バス権を待つ時間が長くなります。その間に通信機能が、次のデータを受け取ってしまうと、オーバーランが発生します。その他の場合でもオーバーランは発生します。キャッシュを使ったシステム上で、キャッシュが持っているデータと同じアドレスのメインメモリを、DMAが書き換えてしまうと、キャッシュとメインメモリのデータの一貫性が失われてしまいます(図4参照)。(クリックで拡大)例えば、CPUがメモリにデータを書いたときに、ライトスルー方式だと、キャッシュにデータを書き込まれると同時にメインメモリにも同じデータが書き込まれます。その後、間違ってDMAがメインメモリ上のデータを書き換えてしまうと、キャッシュのデータとメインメモリのデータが異なってしまいます。その後、CPUがそのデータを読み出すと、キャッシュのデータが読まれてしまい、メインメモリの値と異なる値を読み出すことになります。キャッシュとDMAの間で一貫性を保つ仕組みが入っていれば良いのですが、仕組みがない場合は、ユーザーがデータの一貫性を管理しなくてはなりません。便利なDMA(ディスクリプター方式)少し便利なDMAの設定方式を紹介します。STマイクロエレクトロニクスのSTM32に搭載されているUSBモジュール専用DMAは、内蔵RAM上にディスクリプター(Descriptor)と呼ばれるテーブルを作り、そのディスクリプターに従ってDMAが転送を行ってくれる方式です。FIFO情報が書かれており、DMAはこのディスクリプターの内容に従って転送を行います。異なる転送内容のディスクリプターを複数作って、リンクさせることができますので、ユーザーはその都度、転送内容を変更することなく、自動的に複数の転送を行えます。⇒連載バックナンバーはこちら関連記事オーバーランエラーの原因マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、中級者の方からよく質問される「オーバーランエラーの原因」についてです。マイコンでサイン波、コサイン波を作れますか?マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。8回目は、上級者の方からよく質問される「マイコンでサイン波、コサイン波を作れますか?」です。割り込みハンドラとは?マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、初心者の方からよく質問される「割り込みハンドラ/ハンドラモードとは?」です。マイコンの周辺部品は、最低何が必要?マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、超初心者の方からよく質問される「マイコンの周辺部品は、最低何が必要?」です。マイコンの勉強法マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、超初級者の方からよく質問される「マイコンの勉強法/学習方法」です。マイコンの選び方マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、初級者の方からよく質問される「マイコンの選び方」についてです。LLC.ITmediaはアイティメディア株式会社の登録商標です。