開発にあたってのノウハウ
5.DMCを使いこなす
DMACとは、ある繰り返されるトリガにより、指定データ量をCPUの負荷なく転送することができる機能です。
下記の様な機能がある場合には、DMACのご使用をお勧めします。
- UARTやSIOなどの連続送受信を行う場合
- A/D変換を連続して行い、そのデータを自動的にRAMに格納する場合
- パルス出力の周期、Dutyを周期的に変更する場合
- 外部割込みをトリガとして、データを別の領域に自動転送させている場合
- タイマの周期でデータを別の領域に自動転送させている場合
なお、DMACのご使用を検討される場合、初めに、ご使用される製品のDMACが、ご使用になるペリフェラル(UART、A/D、PPGなど)を転送要求要因であるかどうかを確認する必要があります。
ここでは、DMACの下記項目について紹介致します。
5.1 DMACの動作モード
DMACには、下記モード/タイプがあります。
転送タイプと転送モードの組み合わせ

シングル/ブロック転送モード(ブロック/ステップ転送)
1回の転送要求にて1回のDMA転送を行うモードです。
1回の転送単位は、ブロックサイズにて決定され、ブロックサイズを大きくすれば、転送レートは向上しますが、CPUの実行スループットは低下します。
連続転送モード(デマンド転送)
転送要求(DREQ)がアクティブレベルを保持している間、DMA転送を行うモードです。
CPUへのバス権の譲渡は、転送回数レジスタが0になるか、DREQ入力がインアクティブレベルになる事により行なわれます。
バースト転送モード
1回の転送要求により、指定した転送回数分DMAの転送を行うモードです。
CPUへのバス権の譲渡は、転送回数レジスタが0になる事により行なわれます。
Two-cycleタイプ
リード動作とライト動作を交互に行うモードです。
(内部バスコントローラがデータを一旦ラッチして転送するタイプです。)
アクセスタイプとしては、
- 内部領域(RAM)<-->内部領域(I/O)、
- 内部領域(I/O)<-->外部領域(RAM)
の2つのタイプになります。
Fly-byタイプ
リード動作とライト動作を同時に行うモードです。
(外部メモリ<-->外部I/Oの転送を同時に行うタイプです。)
アクセスタイプとしては、
- 外部領域(RAM)<-->外部領域(I/O)
になります。
5.2 DMACの転送サイズ
DMACの転送サイズは、下記の3種類があります。
- byte(8bit)
- halfword(16bit)
- word(32bit)
5.3 DMACの転送トリガ
DMACの転送トリガは、UART/SIO、A/D、PPGなどがありますが、品種により異なります。各製品のマニュアルのDMA転送要求一覧を参照願います。
5.4 DMACの転送回数
転送回数指定レジスタ(DMACT)の設定により、1~65536回までの設定が可能です。
DMACTは、1回の転送を行う度に、1づつカウントダウンして行きます。
5.5 DMACの転送方向
転送元アドレス->転送先アドレスの方向で指定した転送サイズ分転送が行われます。
また、これらのアドレスは、それぞれ減少、固定、増加の設定が可能です。
5.6 DMACの転送終了動作
各DMAにより、DMA転送終了により割り込みを有効にするか無効にするかの設定が可能です。
DMA転送終了は、基本的に指定した転送回数分転送が終了した場合に発生します。
転送要求発生元のエラー(UARTのオーバーランエラーなど)でも本割り込み要因がセットされますので、割り込み発生時には、エラーの発生の有無を確認する必要があります。
