1.Descriptor DMAとは?
通常、DMAは「転送元・転送先・サイズ・設定」を一度決めて動作させます。
しかし、複数の転送を順番に、あるいは条件付きで行いたい場合、その都度レジスタを再設定するのは面倒です。そんなときに便利なのが「Descriptor DMA」。
<Descriptor DMAのイメージ>
DMAの設定内容(転送元・転送先・サイズ・次の指定)を「ディスクリプタ(構造体)」にまとめ、DMAハードがその転送内容にしたがい、自動で転送を実行する仕組みです。

つまり「次に何を転送するか」をDMAが自分で判断できます。
●複数の転送シーケンスを自動実行
●マイコン割り込みなしで連続転送が可能
●一時的なバッファ切替・タスク連携が容易
例えば、以下の使い方が可能です。
●UART受信 → RAMへ保存 → メモリ間コピー
●ADCのサンプルA → B → C 順に3チャネル移動
●画像フレーム単位の自動パケット処理
設定の都度CPUが割り込む必要がなくなり、CPUは“本当に重要な処理だけ”に集中できます。
2.Linked List DMAとは?
Descriptor DMAが「1→2→3…と順次転送」する仕組みなら、
Linked List DMAは「条件に応じて次の転送を選択したり、ループしたりできる」柔軟型。
<Linked List DMAのイメージ>
ディスクリプタ構造を「リンク」でつなぎ、任意の順序で繰り返し動作させます。
≪条件分岐≫

≪ループ≫

👆このように「3が終わったらまた1に戻る」といった“環状DMA”も可能です。
特に、リングバッファDMAをハードで完全自動化したい場合や、
ストリーミングデータを途切れず流したい場合に効果を発揮します。
3.RL78シリーズでの活用
RL78/G13シリーズは、シンプルなDMA機構を持っています。
一方、類似の機能として DTC(Data Transfer Controller)、ELC(Event Link Controller)が搭載されているものもあります。
RL78/G13 のDMAは条件リンクを直接持ちませんが、マイコン割り込みで「次に使うDMA設定を書き換える」ことで同じ振る舞いを再現できます。
≪条件分岐≫

≪ループ≫
1.転送完了割り込みで「次の設定」をレジスタへ書き込む
2.DMA設定構造体をRAM上に置き、完了ごとに内容を切り替える
3.タイマーやイベントを使って「次のDMA切替」を自動化

4.デバッグの極意:DMAは「見えない処理」を見える化せよ!
DMAがうまく動かないとき、よくある落とし穴は
「実際に転送が終わっているのか、途中なのか分からない」ことです。
実務で役立つデバッグのコツは、以下です。
👉 コツ①: GPIOトグルで可視化
割り込み発生時にLEDやGPIOをON/OFFさせ、DMA完了タイミングを観察します。
→ オシロやロジアナで見ると、DMA動作とマイコン処理の関係が一目瞭然!

👉 コツ②: メモリ内容をウォッチ
転送先バッファをデバッグウィンドウで観察し、メモリが意図した周期で変化しているか確認します。
DMAエラー発生や停止条件の誤設定も、ブレークポイントの設定やポイント・トレース・イベントの設定を使えば原因を特定しやすいです。
👉 コツ③: トレースログを残す
シリアル出力やRAM上のログ領域を使い「DMA開始→完了→再設定」などのタイミングを記録するとLinked List DMAのような複数転送でも、動作シーケンスを確認できます。


