セクション 54. ダイレクト メモリアクセス (DMA)...

32
© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA コントローラ 54 セクション 54. ダイレクト メモリアクセス (DMA) コントローラ ハイライト 本セクションには下記の主要項目を記載しています。 54.1 はじめに ...................................................................................................................... 54-2 54.2 レジスタ ...................................................................................................................... 54-4 54.3 データ転送オプション ................................................................................................ 54-8 54.4 チャンネル調停と優先権決定方式 ............................................................................ 54-22 54.5 DMA 割り込み ........................................................................................................... 54-23 54.6 DMA 動作の例 ........................................................................................................... 54-24 54.7 スリープおよびアイドル中の動作 ............................................................................ 54-26 54.8 リセットの影響 ......................................................................................................... 54-26 54.9 レジスタマップ ......................................................................................................... 54-27 54.10 関連アプリケーション ノート .................................................................................. 54-28 54.11 改訂履歴 .................................................................................................................... 54-29 注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジ ナルの英語版をご参照願います。

Transcript of セクション 54. ダイレクト メモリアクセス (DMA)...

Page 1: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジナルの英語版をご参照願います。

セクション 54. ダイレクト メモリアクセス (DMA) コントローラ

DM

Aコ

ント

ロー

54

ハイライト

本セクションには下記の主要項目を記載しています。

54.1 はじめに ...................................................................................................................... 54-2

54.2 レジスタ ...................................................................................................................... 54-4

54.3 データ転送オプション ................................................................................................ 54-8

54.4 チャンネル調停と優先権決定方式 ............................................................................ 54-22

54.5 DMA 割り込み ........................................................................................................... 54-23

54.6 DMA 動作の例 ........................................................................................................... 54-24

54.7 スリープおよびアイドル中の動作 ............................................................................ 54-26

54.8 リセットの影響 ......................................................................................................... 54-26

54.9 レジスタマップ ......................................................................................................... 54-27

54.10 関連アプリケーション ノート .................................................................................. 54-28

54.11 改訂履歴 .................................................................................................................... 54-29

© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1

Page 2: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

PIC24F ファミリ リファレンス マニュアル

54.1 はじめにダイレクト メモリアクセス (DMA) コントローラは、SFR バス上で動作する高データ スループットの周辺モジュールからデータメモリへのダイレクトアクセスを可能にする事で、CPU の負荷を軽減します。大量のデータ転送を行うこれらの周辺モジュールが専用のデータパスを共有する事で、メインデータバスの負荷が軽減され、消費電力の低減効果も得られます。

DMA コントローラは以下の特長を備えます。

• 独立して動作する複数のチャンネルを個別に設定可能

• CPU との並列動作 (DMA に起因する待機ステートは生じない )

• DMA バス調停

• 5 種類のプログラマブルなアドレスモード

• 4 種類のプログラマブルな転送モード

• 4 種類の柔軟な内部データ転送モード

• バイトまたはワード単位のデータ転送

• チャンネル別の 16 ビット ソースおよびデスティネーション アドレスレジスタ ( 動的な更新とリロードが可能 )

• 16 ビット トランザクション カウントレジスタ ( 動的な更新とリロードが可能 )

• 上限 / 下限アドレスレジスタ

• カウンタ値 50% と 100% 時の割り込み

• ソフトウェアによる転送開始

• NULL 書き込みモードによる対称バッファ動作

54.1.1 構成

概念的には、DMA コントローラは周辺モジュールとしての機能と CPU の直接的な拡張としての機能を併せ持ちます。DMA コントローラは、CPU と DMA 対応周辺モジュールの間のマイクロコントローラ データバス上に位置し、SRAM に直接アクセスします ( 図 54-1 参照 )。このような構成により、SFR バスは 2 つのバスに分離され、DMA コントローラは追加された DMASFR バスを介して DMA 対応周辺モジュールにアクセスします。これにより、バスの負荷を軽減してアクセスあたりの消費電力を削減する効果も得られます。

DMA コントローラは DMA SFR バスのマスタデバイスとして機能し、DMA 対応周辺モジュールからのデータフローを制御します。DMA コントローラは CPU の命令処理状況も直接監視します。CPU から DMA バス上の周辺モジュールにアクセスする必要が生じると、DMA コントローラはそれを認識し、必要に応じて制御を CPU に渡します。CPU が通常のデータバス上にある DMA 非対応周辺モジュールをサービスしている間、DMA コントローラは DMA バス上のDMA 対応周辺モジュールをサービスできます。このようにしてデータの実効処理能力が向上します。また、DMA 動作はプロセッサのストールを生じる事なく実行できます。CPU と DMA がSFR に対して同時にアクセスを試みた場合、CPU が優先され、DMA は CPU がタスクを完了するまで待機した後に SFR にアクセスします。DMA コントローラは CPU の実行を直接監視するため、基本的にユーザに対して透過的です。

DS39742B_JP - p. 54-2 © 2013 Microchip Technology Inc.

Page 3: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

セクション 54. ダイレクト メモリアクセス (DMA) コントローラD

MA

Co

ntro

llerD

MAコ

ント

ロー

54

図 54-1: DMA の機能ブロック図

DMA コントローラは、複数の独立した DMA チャンネル コントローラ ( 単純にチャンネルとも呼ぶ ) によって構成されます ( 図 54-2)。各チャンネルの動作は別々に設定できます ( 例 : データ RAM 内の異なる領域間のデータ転送、1 つまたは複数アドレス間のデータ転送、各種ハードウェア トリガによる転送の開始、プログラミングしたトランザクションの 1 回または複数回の実行 )。複数チャンネルが連動するようプログラミングする事で、より複雑なデータ転送をCPU に負荷をかけずに実行できます。チャンネルの実装数はデバイスファミリによって異なります ( 詳細はデータシート参照 )。

全てのチャンネルを制御する最上位のコントローラは、チャンネルに関係なく全ての DMA 動作に対して上限 / 下限アドレスを設定します。このコントローラは、ユーザが選択した優先権決定方式に基づいてチャンネル間でデータバス アクセスを調停します。また、省電力モード中の DMA 動作も制御します。

図 54-2: DMA の機能ブロック図

16

Data Bus

16

Data Latch

Data RAM

Address Latch

To I/O Ports

DMA

Controller

n-ChannelTo DMA-enabled

Peripherals

16

From AGU

DMA Bus

16

and Peripherals

PIC24F CPU

To I/O Ports To DMA-enabled

Peripheralsand Peripherals

DMACH0

DMAINT0

DMASRC0

DMADST0

DMACNT0

DMACH1

DMAINT1

DMASRC1

DMADST1

DMACNT1

DMACH2

DMAINT2

DMASRC2

DMADST2

DMACNT2

DMACHn

DMAINTn

DMASRCn

DMADSTn

DMACNTn

DMACON

DMAH

DMAL

DMABUF

Channel 0 Channel 1 Channel 2 Channel n

Data RAMAddress Generation

Data RAM

Control

Logic

DataBus

CPU Execution Monitoring

© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-3

Page 4: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

PIC24F ファミリ リファレンス マニュアル

54.2 レジスタDMA コントローラは多数のレジスタを使ってその動作を制御します。レジスタの数はデバイスが実装しているチャンネル数によって異なります。 DMA コントローラは、以下の 4 つのモジュールレベル レジスタ ( 制御用 1 つ、バッファ / アドレス用 3 つ ) を必ず実装しています。

• DMACON: DMA エンジン制御レジスタ

• DMAH と DMAL: 上限 / 下限アドレスレジスタ

• DMABUF: DMA データバッファ

1 つの DMA チャンネルにつき、以下の 5 つのレジスタを実装します ( 制御用 2 つ、バッファ /アドレス用 3 つ )。

• DMACHn: DMA チャンネル n 制御レジスタ

• DMAINTn: DMA チャンネル n 割り込み制御レジスタ

• DMASRCn: DMA チャンネル n データ ソースアドレス ポインタ

• DMADSTn: DMA チャンネル n データ デスティネーション アドレス ポインタ

• DMACNTn: DMA チャンネル n トランザクション カウンタ

16 チャンネルの DMA コントローラは全部で 84 個のレジスタを実装します。1 チャンネルのDMA コントローラでは 9 個です。全てのレジスタはデータメモリ空間内に配置され、直接読み / 書き可能です。

54.2.1 モジュール レジスタ

DMACON レジスタ ( レジスタ 54-1) は、DMA エンジンの全体的な動作を制御します。このレジスタはコントローラを有効 / 無効にします。また、DMA チャンネルをスキャンする際の優先権決定方式も定義します。

DMAH および DMAL レジスタは、全ての DMA 動作 ( 読み / 書き ) に適用する 16 ビットの上限および下限アドレスを格納します。これらの上限 / 下限アドレスを超えると、DMA アドレス制限割り込みが発生します。

DMABUF レジスタは、DMA 動作中にソースおよびデスティネーション アドレス間で転送されるデータを中継する 16 ビットバッファとして機能します。全てのデータ転送は DMABUF を経由します。

54.2.2 チャンネル レジスタ

DMACHn レジスタ ( レジスタ 54-2) と DMAINTn レジスタ ( レジスタ 54-3) は、各 DMA チャンネルの動作を制御します。DMACHn レジスタでは、対応するチャンネルの有効 / 無効とデータ転送モードを設定します。DMAINTn レジスタでは、データのソースまたはデスティネーションとなる周辺モジュールを選択し、そのチャンネルの DMA イベント割り込みを定義します。このレジスタはイベント割り込みフラグも格納します。実装されている各チャンネルには、DMACHn レジスタと DMAINTn レジスタが 1 つずつ割り当てられています。

DMASRCn および DMADSTn レジスタは、それぞれ転送データのソースおよびデスティネーションの 16 ビット アドレスポインタとして機能します。データ転送モードによっては、これらのレジスタは間接アドレス指定のアドレスオフセットまたは指定範囲のアドレスに対するベースアドレスとしても機能します。

DMACNTn レジスタは、DMA トランザクション中に転送されたデータの数 ( モードに応じてワード数またはバイト数 ) または発生した DMA トリガの回数をカウントします。このレジスタはカウントダウン レジスタとして機能し、転送のたびに値がデクリメントします。この値が0000h に達するまで転送が繰り返されます。このレジスタの値は、デバイスリセットまたはチャンネルの再初期化時に 0001h にリセットされます。

各チャンネルには DMASRCn、DMADSTn、DMACNTn レジスタが割り当てられています。

Note: DMA 動作中に、 DMAEN ビットのクリア (DMACON<DMAEN> = 0) によって DMAが無効にされた場合、DMA を再度有効 (DMACON<DMAEN> = 1) にする前に、使われていた全ての DMA チャンネルをクリアする事を推奨します。

DS39742B_JP - p. 54-4 © 2013 Microchip Technology Inc.

Page 5: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

セクション 54. ダイレクト メモリアクセス (DMA) コントローラD

MA

Co

ntro

llerD

MAコ

ント

ロー

54

レジスタ 54-1: DMACON: DMA エンジン制御レジスタ

R/W-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

DMAEN — — — — — — —

bit 15 bit 8

U-0 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0

— — — — — — — PRSSEL

bit 7 bit 0

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

bit 15 DMAEN: DMA モジュール イネーブルビット

1 = モジュールを有効にする0 = モジュールを無効にし、実行中の全ての DMA 動作を終了する

bit 14-1 未実装 :「0」として読み出し

bit 0 PRSSEL: チャンネル優先権決定方式選択ビット

1 = ラウンドロビン方式0 = 固定優先度方式

© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-5

Page 6: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

PIC24F ファミリ リファレンス マニュアル

レジスタ 54-2: DMACHn: DMA チャンネル n 制御レジスタ

U-0 U-0 U-0 r-0 U-0 R/W-0 R/W-0 R/W-0

— — — r — NULLW RELOAD CHREQ(2)

bit 15 bit 8

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

SAMODE1 SAMODE0 DAMODE1 DAMODE0 TRMODE1 TRMODE0 SIZE CHEN

bit 7 bit 0

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

bit 15-13 未実装 :「0」として読み出し

bit 12 予約済み :「0」として保持

bit 11 未実装 :「0」として読み出し

bit 10 NULLW: NULL 書き込みモードビット

1 = DMADST への書き込みが発生するたびに DMASRC へのダミー書き込みを実行する0 = ダミー書き込みは実行しない

bit 9 RELOAD: アドレス / カウント リロードビット

1 = 次の動作の開始時に DMASRC、DMADST、DMACNT レジスタに元の初期値をリロードする0 = 次の動作の開始時に DMASRC、DMADST、DMACNT レジスタに値をリロードしない (1)

bit 8 CHREQ: DMA チャンネル ソフトウェア要求ビット (2)

1 = ソフトウェアによってDMA要求を開始する (このビットはDMA転送完了時に自動的にクリアされます )

0 = 保留中の DMA 要求は存在しない

bit 7-6 SAMODE<1:0>: ソースアドレス モード選択ビット

11 = DMASRC はペリフェラル間接アドレス指定 (PIA) で使われ、値は変化しない10 = 転送完了後に SIZE ビットに基づいて DMASRC をデクリメントする01 = 転送完了後に SIZE ビットに基づいて DMASRC をインクリメントする00 = 転送が完了しても DMASRC の値は変化しない

bit 5-4 DAMODE<1:0>: デスティネーション アドレスモード選択ビット

11 = DMADST はペリフェラル間接アドレス指定 (PIA) で使われ、値は変化しない10 = 転送完了後に SIZE ビットに基づいて DMADST をデクリメントする01 = 転送完了後に SIZE ビットに基づいて DMADST をインクリメントする00 = 転送が完了しても DMADST の値は変化しない

bit 3-2 TRMODE<1:0>: 転送モード選択ビット

11 = 連続リピート10 = 連続01 = ワンショット リピート00 = ワンショット

bit 1 SIZE: データサイズ選択ビット

1 = バイト (8 ビット )0 = ワード (16 ビット )

bit 0 CHEN: DMA チャンネル イネーブルビット

1 = 対応するチャンネルを有効にする0 = 対応するチャンネルを無効にする

Note 1: リピートモード (DMACHn<2> = 1) の転送では、RELOAD ビットの状態に関係なく DMACNT は常にリロードされます。

2: CHREQ がセットされている間に実行する転送の回数は、TRMODE<1:0> の設定によって決まります。

DS39742B_JP - p. 54-6 © 2013 Microchip Technology Inc.

Page 7: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

セクション 54. ダイレクト メモリアクセス (DMA) コントローラD

MA

Co

ntro

llerD

MAコ

ント

ロー

54

レジスタ 54-3: DMAINTn: DMA チャンネル n 割り込み制御レジスタ

R-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

DBUFWF(1) — CHSEL5 CHSEL4 CHSEL3 CHSEL2 CHSEL1 CHSEL0

bit 15 bit 8

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 U-0 R/W-0

HIGHIF(1,2) LOWIF(1,2) DONEIF(1) HALFIF(1) OVRUNIF(1) — — HALFEN

bit 7 bit 0

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

bit 15 DBUFWF: バッファ内データ書き込みフラグビット (1)

1 = DMAバッファ内のデータは、DMADST (NULL書き込みモードの場合はDMASRC)が指定するアドレスに未だ書き込まれていない

0 = DMAバッファ内のデータは、DMADST (NULL書き込みモードの場合はDMASRC)が指定するアドレスに既に書き込まれた

bit 14 未実装 :「0」として読み出し

bit 13-8 CHSEL<5:0>: DMA チャンネルトリガ選択ビット

これらのビットは、64 種類ある DMA トリガの 1 つを選択してチャンネルの入力に接続します。一般的に、これらのトリガはデバイスレベルの割り込みです。トリガのリストの並び順は、自然順序優先度順の割り込みリストとは逆です。周辺モジュールに対するビット値の割り当てについては、各デバイスのデータシートを参照してください。

bit 7 HIGHIF: DMA 上限アドレス違反割り込みフラグビット (1,2)

1 = DMAチャンネルがデータRAM空間に設定されている上限アドレス(DMAH)よりも大きいアドレスへのアクセスを試みた

0 = DMA チャンネルで上限アドレス違反による割り込みは発生していない

bit 6 LOWIF: DMA 下限アドレス違反割り込みフラグビット (1,2)

1 = DMAチャンネルがデータRAM空間の先頭(0800h)から下限アドレス(DMAL)の間のアドレスにアクセスを試みた

0 = DMA チャンネルで下限アドレス違反による割り込みは発生していない

bit 5 DONEIF: DMA 転送完了割り込みフラグビット (1)

CHEN = 1の場合 :

1 = 直前の DMA セッションは正常に完了した0 = 現在の DMA セッションは未だ完了していないCHEN = 0の場合 :

1 = 直前の DMA セッションは正常に完了した0 = 直前の DMA セッションは未完了のまま終了した

bit 4 HALFIF: DMA 50% ウォーターマーク レベル割り込みフラグビット (1)

1 = DMACNT が 0000h までの中間点に達した0 = DMACNT は中間点に達していない

bit 3 OVRUNIF: DMA チャンネル オーバーラン フラグビット (1)

1 = DMA チャンネルが前回のトリガで開始した動作を完了する前に次のトリガを受け取った0 = オーバーラン条件は発生していない

bit 2-1 未実装 :「0」として読み出し

bit 0 HALFEN: 中間点ウォーターマーク ビット

1 = DMACNT が中間点に達した時点と転送完了時に割り込みを生成する0 = 転送完了時にのみ割り込みを生成する

Note 1: ソフトウェアでこれらのフラグをセットしても割り込みは発生しません。

2: 上限 / 下限アドレスに違反するかどうか (DMASRC または DMADST が DMAH よりも大きい、またはDMAL よりも小さいかどうか ) は、実際にアクセスするまで判定されません。

© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-7

Page 8: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

PIC24F ファミリ リファレンス マニュアル

54.3 データ転送オプションDMAコントローラは、ハードウェア トリガを受け取ると、データをソースアドレス(DMASRCn)からデスティネーション アドレス (DMADSTn) に転送します。転送は 2 段階のプロセスとして発生します。すなわち、データをソースアドレスから読み出して DMA バッファ (DMABUF) に転送し、即座にそのデータを DMABUF からデスティネーション アドレスに書き込みます。その後コントローラは、そのチャンネルの動作が完了したかどうかを判定します。アクティブなDMA チャンネルは、転送の終了または実行中の転送のステータス ( またはその両方 ) を示すために割り込みをアサートできます。

DMA コントローラの各チャンネルで別々に転送のソースとデスティネーションを設定できます。これにより、チャンネルごとにデータ RAM と周辺モジュール (SFR 領域 ) 間、異なる周辺モジュール間、異なるデータ RAM 領域間でデータを転送できます。トランザクションのモードは、イベントトリガまたはチャンネルのトランザクション カウンタ ( またはその両方 ) に基づいてワンショット / ワンショット リピート / 連続 / 連続リピートのいずれかに設定できます。ソースアドレス レジスタとデスティネーション アドレスレジスタの挙動 (トランザクション中にインクリメントする / デクリメントする / 固定 ) も別々に設定できます。

54.3.1 データサイズ

DMA コントローラはトランザクションをバイト単位でもワード (16 ビット ) 単位でも処理できます。データサイズは、SIZE ビット (DMACHn<1>) を使って DMA チャンネルごとに設定できます。既定値 (SIZE = 0) では、チャンネルはワードサイズ トランザクション向けに設定されます。

PIC24のデータRAMアドレス空間はワード指向でありながらバイトアドレス指定が可能です。バイト転送はアドレスの bit 0 に基づいて実行されます。すなわち、bit 0 が「0」であればアドレスの下位バイトにアクセスし、bit 0 が「1」であれば上位バイトにアクセスします。

既定値では、DMASRCn と DMADSTn の bit 0 は「0」に固定され、ワード境界アドレスのみを指定します。 アドレスは bit 1 からインクリメントします。データサイズをバイト (SIZE = 1) に設定すると、DMASRCn と DMADSTn は bit 0 も含めてインクリメント / デクリメントします。

DMACNTn は、データサイズに関係なく bit 0 も含めて 1 ずつデクリメントします。DMACNTnは、SIZE ビットの状態に応じてワード数またはバイト数をカウントします。

54.3.2 トリガ源

各 DMA チャンネルでは、64 種類あるハードウェア トリガのいずれかを DMA 転送開始トリガとして選択できます。トリガ源には一般的に周辺モジュールからのデバイスレベル割り込みを使いますが、外部割り込みおよび状態変化時割り込み要因も使えます。CHSEL<5:0> ビット(DMAINn<13:8>)は、対応するDMAチャンネルのトリガ源として使う割り込み (従ってモジュール ) を選択します。 利用可能なトリガについては、各デバイスのデータシートを参照してください。CHSEL ビットによるトリガ源 ( モジュール ) の選択はいつでも変更できます。しかし、対応する DMA チャンネルの動作中に変更する事は推奨しません。

DMA チャンネルのソースおよびデスティネーションには、トリガ源の選択に関係なく、メモリに配置されたどの周辺モジュールでも使えます。これは、トリガ源 ( 割り込み要因 ) は DMA のソースおよびデスティネーション アドレスとは無関係だからです。例えば、INT0 割り込みをトリガとして設定した DMA チャンネルを使って、UART FIFO との間でデータを転できます。多くの場合、データ転送のトリガには、ソースまたはデスティネーションとなる周辺モジュール自体の割り込みを使うのが妥当です。しかし、別の周辺モジュール ( 場合によっては別のDMA チャンネル ) をトリガとして使った方が好ましい場合も多くあります。そのような動作の例は 54.6「DMA 動作の例」に記載しています。

さらに、ソフトウェアで CHREQ ビット (DMACHn<8>) をセットする事によって DMA チャンネルをトリガする事もできます。この場合、アプリケーションはハードウェア割り込みを待機する事なく、DMA コントローラを使ってデータを直接転送できます。CHREQ ビットは、ハードウェア トリガの発生時にもセットされます。

DS39742B_JP - p. 54-8 © 2013 Microchip Technology Inc.

Page 9: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

セクション 54. ダイレクト メモリアクセス (DMA) コントローラD

MA

Co

ntro

llerD

MAコ

ント

ロー

54

54.3.3 データ転送のタイプ

全ての DMA 転送はデータ RAM アドレス空間内でのみ発生します。最も制約のないケースでは、DMA コントローラは全てのデータ RAM アドレスを利用できます。これには SFR 空間の全域 ( 従って全ての周辺モジュール ) を含みます。ソースとデスティネーションの組み合わせに応じて、下記の 4 種類の DMA 転送が可能です ( 図 54-3 参照 )。

• 周辺モジュールからメモリへの転送 ( 受信 )

• メモリから周辺モジュールへの転送 ( 送信 )

• メモリからメモリへの転送

• 周辺モジュールから周辺モジュールへの転送

図 54-3: DMA データ転送のタイプ

SFR Area

Data RAM

DMA RAM Area

SFR Area

Data RAM

DMA RAM Area

SFR Area

Data RAM

SFR Area

Data RAM

07FFh0800h

DMASRCn

DMADSTn

DMA RAM AreaDMAL

DMAH

07FFh0800h

DMASRCn

DMADSTn

DMAL

DMAH

07FFh0800h

DMASRCn

DMADSTn

DMAL

DMAH

07FFh0800h

DMASRCn

DMADSTn

DMAL

DMAH

DMA RAM Area

Peripheral to Memory Memory to Peripheral

Peripheral to Peripheral Memory to Memory

Note: メモリの各領域の縮尺比は不定です。

© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-9

Page 10: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

PIC24F ファミリ リファレンス マニュアル

54.3.3.1 周辺モジュールからメモリへの転送 ( 受信 )ソース アドレスレジスタで SFR アドレスを指定し、デスティネーション アドレスレジスタでデータ RAM アドレスを指定した場合、コントローラはソースアドレスの周辺モジュールから読み出したデータをデータ RAM 内のデスティネーション アドレスに書き込みます。この転送タイプは、UART や SPI モジュール等のデータ受信向けに設定された周辺モジュールに最適です。

54.3.3.2 メモリから周辺モジュールへの転送 ( 送信 )ソース アドレスレジスタでデータ RAM アドレスを指定し、デスティネーション アドレスレジスタで周辺モジュール (SFR) アドレスを指定した場合、トリガが発生するとコントローラはRAM から読み出したデータを SFR に書き込みます。この転送タイプは、シリアル通信モジュール等のデータ送信向けに設定された周辺モジュールに最適です。

54.3.3.3 周辺モジュールから周辺モジュールへの転送

ソースおよびデスティネーション アドレスレジスタの両方で周辺モジュールのデータバッファの SFR アドレスを指定すると、2 つの周辺モジュール間でデータを転送できます。この場合、データ RAM メモリへのアクセスは必要ありません。

54.3.3.4 メモリからメモリへの転送

RAM 内でデータを再配置する必要がある場合、チャンネルのソースおよびデスティネーションアドレスレジスタの両方で RAM メモリ内のアドレスを指定します。この転送タイプでは周辺モジュールにアクセスする必要はありませんが、周辺モジュールからのトリガを使って転送を開始する事はできます。

54.3.3.5 DMAH および DMAL レジスタ

16 ビットの DMASRC および DMADST レジスタでは、データ RAM 空間の全域をアドレス指定できます。しかし、DMA 動作を特定のアドレス領域内に制限する事が望ましい場合もあります。アドレス領域を制限する目的はさまざまですが、例えばプログラム変数やソフトウェア スタックの保護もその目的の 1 つです。

DMAH および DMAL レジスタを使うと、SFR 空間より後の ( アドレスが 0800h 以上の ) データ RAM 空間内の DMA 動作に対して上限および下限アドレスを設定できます。全ての DMAチャンネルの動作は、DMAH および DMAL レジスタが指定するアドレス領域内に制限されます。DMAH よりも大きなアドレスへのアクセスを試みる全ての DMA 動作は DMAH 割り込みを引き起こし、実行中の転送は終了します。同様に、SFR 空間以降の DMAL よりも小さなアドレス ( すなわち 08000h と DMAL の間 ) へのアクセスを試みる DMA 動作は DMAL 割り込みを引き起こし、実行中の転送は終了します。

54.3.3.6 バッファデータ書き込みビット

DBUFWF ビット (DMAINTn<15>) は、DMABUF にバッファリングされたデータが指定されたデスティネーション アドレスに転送されたかどうかを示します。これを使って、DMA 動作の突発的な終了によるデータの損失を防ぐ事ができます。例えば、ロードとストアの間でユーザが DMA 動作を停止した場合、DMABUF 内にバッファリングされたデータはデスティネーション アドレスへ転送されません。この場合、DBUFWF ビットを確認する事で、バッファ内のデータをデスティネーション アドレスに保存する必要があるかどうかを判断できます。

表 54-1 に、各動作モードにおける DBUFWF ビットの挙動をまとめて示します。

表 54-1: DBUFWF ビットステータスの意味

DBUFWFビットの状態

動作モード

ワンショット リピート 連続リピート NULL 書き込み

1 DMABUF にデータを読み込んだ

0 DMADST が指定するアドレスにデータを書き込んだ DMASRC が指定するアドレスに NULL データを書き込んだ

DS39742B_JP - p. 54-10 © 2013 Microchip Technology Inc.

Page 11: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

セクション 54. ダイレクト メモリアクセス (DMA) コントローラD

MA

Co

ntro

llerD

MAコ

ント

ロー

54

54.3.4 データ転送モード

データ転送は、トランザクションの構成 ( トリガイベントあたりのデータ転送回数、イベントのカウント方法、イベントをリピートするかどうか ) によっても定義されます。DMA コントローラでは、これらの構成に基づいて、下記の 4 種類の転送モードを定義します。

• ワンショット

• ワンショット リピート

• 連続

• 連続リピート

転送モードは TRMODE ビット (DMACHn<3:2>) で定義します。加えて、RELOAD ビット(DMACHn<15>) を使って一部のモードの挙動を変更できます。

54.3.4.1 共通の転送モード シーケンス

転送モードに関係なく、全ての DMA 転送は下記の基本シーケンスに従います。

1. DMA トリガを検出するか CHREQ ビット (DMACHn<8>) がセットされると、データはDMASRC が指定するアドレスから DMABUF に転送された後、DMADST が指定するアドレスに保存される。

2. トランザクションが終了すると、DMASRC および DMADST はチャンネルの設定に応じて適切にインクリメントまたはデクリメントする (54.3.5「アドレッシング モード」参照 )。同時に DMACNT が 1 つデクリメントする。

3. モジュールは DMA 割り込み条件が発生していないか確認する。割り込み条件が発生した場合、DMAINT レジスタの対応するフラグがセットされる。

a) DMA 割り込みが発生した場合、全てのモードはステップ 4 へ進む。

b) DMA 割り込みが発生していない場合、全てのモードはステップ 1 へ戻る。ワンショット モードの場合、コントローラは次のトリガを待機する。連続モードの場合、コントローラは DMA 割り込みが発生するまで転送サイクルを繰り返す。

4. DMACNT がゼロまでデクリメントすると、下記の動作が発生する。

a) 連続リピートおよびワンショット リピートモードの場合 : DMASRC、DMADST、DMACNTの値をリロードし、ステップ 1 に戻ってシーケンスを繰り返す。

b) ワンショットおよび連続モードの場合 : CHEN ビット (DMACHn<0>) がクリアされ、チャンネルは無効になる。

5. DMACNT が未だゼロに達していない場合、コントローラは DMAL および DMH のメモリアドレス制限が守られているかどうかを確認する。

a) どちらかの制限を超えている場合、CHEN ビットがクリアされてチャンネルは無効になる。

b) どちらの制限も超えていなければ、コントローラはステップ 1 に戻る。ワンショットおよびワンショット リピートモードの場合、コントローラは次のトリガを待機する。連続および連続リピートモードの場合、コントローラは次のデータ転送の実行へ進む。

1 回のトリガで実行可能なデータ転送の回数と DMACNT レジスタの挙動は、4 つのデータ転送モードで異なります。全てのデータ転送モードに共通のロジックフローを図 54-4 のフローチャートに示します。モードによる違いをまとめて表 54-2 に示します。

表 54-2: DMA データ転送モードの比較

転送モードトリガあたりの

転送回数

DMACNT の挙動

デクリメントする要因

DMACNT = 0000hでの挙動

ワンショット 1 回 トリガ チャンネルを無効化

ワンショット リピート 転送 リロードして再開

連続 複数回 トリガ チャンネルを無効化

連続リピート 転送 リロードして再開

© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-11

Page 12: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

PIC24F ファミリ リファレンス マニュアル

図 54-4: 全てのデータ転送モードで共通するロジックフロー

Update DMASRC,DMADST and

DMACNT

START

Trigger?

DMA

DMACNT = 0?

DMA

Repeated

One-Shot

One-Shot

Transfer Datafrom [DMASRC]

Interrupt?

UpdateDMAINTn

Violation?Boundary

CHEN = 0

Modes?

Modes?

Modes?

CHEN = 1

to [DMADST]

Reload DMASRC,DMADST and

DMACNT

A

A

N

N

N

N

N

N N

END

Y

Y

Y

Y

Y

Y

Y

凡例 :

One-Shot Modes: ワンショット モードとワンショット リピート モード

Continuous Modes: 連続モードと連続リピートモード

Repeated Modes: ワンショット リピートモードと連続リピートモード

Continuous Modes

Continuous Modes

DS39742B_JP - p. 54-12 © 2013 Microchip Technology Inc.

Page 13: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

セクション 54. ダイレクト メモリアクセス (DMA) コントローラD

MA

Co

ntro

llerD

MAコ

ント

ロー

54

54.3.4.2 ワンショット モード

ワンショット モード (TRMODE<1:0> = 00) では、1 回のトリガイベントで DMASRCn からDMADSTn へ 1 回の転送を実行します。既定値では、DMACNTn のリセット値は 0001h です。ワンショット転送が 1 回発生すると、DMACNTn は 0000h にデクリメントし、チャンネルは無効になります。次の転送を実行するには、チャンネルを再度有効にする必要があります。DMACNTn に 0001h よりも大きな値を書き込んでおけば、ワンショット転送を所定の回数実行できます。

例 54-1 に、ワンショット転送向けの標準的なコードシーケンスを示します。

例 54-1: ワンショット転送向けのサンプルコード ( メモリからメモリへの転送 )

unsigned short int Array1[100];unsigned short int Array2[100];int i;int main(){for (i=0;i<100;i++){

Array1[i]=i+1; //fill with i+1Array2[i]=0; //fill with 0

}

DMACONbits.DMAEN=1;DMACONbits.PRSSEL=1;DMAH=0x5000; //set lower and upper address limitDMAL=0x850;DMASRC0=(unsigned short int)& Array1; //load the source addressDMADST0=(unsigned short int)& Array2; //load destination addressDMACNT0=4; //Four Transfer to be doneDMACH0=0;DMACH0bits.SAMODE=1; //Source address increment modeDMACH0bits.DAMODE=1; //Destination address increment modeDMACH0bits.TRMODE=0; //One-Shot Transfer mode DMACH0bits.CHEN=1; //Enable channel

IFS0bits.DMA0IF=0;DMACH0bits.CHREQ=1; //First triggerwhile(DMACH0bits.CHREQ);

DMACH0bits.CHREQ=1; //Second triggerwhile(DMACH0bits.CHREQ);

DMACH0bits.CHREQ=1; //Third trigger while(DMACH0bits.CHREQ); //HALFIF=1 since DMACNT is

//at halfway point

DMACH0bits.CHREQ=1; //Fourth trigger DMACNT=0 //and transfer complete

while(DMACH0bits.CHREQ);

while(!IFS0bits.DMA0IF); //Transfer Complete //DMA0IF=1 ,DONEIF=1, CHEN=0;

IFS0bits.DMA0IF=0;while(1);

}

© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-13

Page 14: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

PIC24F ファミリ リファレンス マニュアル

54.3.4.3 ワンショット リピートモード

ワンショット リピートモード (TRMODE<1:0> = 01) では、トリガが繰り返し発生するかCHREQ が繰り返しセットされる限り、1 回の転送を繰り返し実行します。トリガが発生するか CHREQ がセットされるたびに、DMACNTn はデクリメントします。しかし、このモードでは、DMACNTn が 0000h に達してもチャンネルは無効になりません。そのかわりに、DMACNTnには元の初期値がリロードされます。RELOAD = 1であれば、DMASRCn と DMADSTn にも元の初期値がリロードされます。次のトリガが発生すると、サイクルが最初から再開します。シーケンスを終了するには、ソフトウェアで CHEN ビットをクリアして、チャンネルを無効にする必要があります。

例 54-2 に、ワンショット リピート転送向けの標準的なコードシーケンスを示します。

例 54-2: ワンショット リピート転送向けのサンプルコード( メモリからメモリへの転送、RELOAD= 1)

unsigned short int Array1[50];unsigned short int Array2[50];int i;void test(void);

int main(){for (i=0;i<50;i++){

Array1[i]=i+1; //fill with i+1Array2[i]=0; //fill with 0

}

DMACONbits.DMAEN=1;DMACONbits.PRSSEL=1;DMAH=0x5000; //set lower and upper address limitDMAL=0x850;DMASRC0=(unsigned short int)& Array1; //load the source addressDMADST0=(unsigned short int)& Array2; //load destination addressDMACNT0=4;DMACH0=0;DMACH0bits.SAMODE=1; //Source address increment modeDMACH0bits.DAMODE=1; //Destination address increment modeDMACH0bits.TRMODE=1; //Transfer mode Repeat One-ShotDMACH0bits.RELOAD=1; //Reload Source/Destination address DMACH0bits.CHEN=1; //Channel enable

IFS0bits.DMA0IF=0;while(1){

DMACH0bits.CHREQ=1; //First triggerwhile(DMACH0bits.CHREQ);

DMACH0bits.CHREQ=1; //Second triggerwhile(DMACH0bits.CHREQ)

DMACH0bits.CHREQ=1; //Third trigger while(DMACH0bits.CHREQ);//HALFIF=1 since DMACNT is in

//half way pointDMACH0bits.CHREQ=1; //Fourth trigger DMACNT=0

//and transfer completewhile(DMACH0bits.CHREQ);//DMACNT reloaded to 4, DMA0IF=1,

//Since RELOAD=1, DMASRC0/DMADST0 //are reloaded

while(!IFS0bits.DMA0IF);DMAINT0bits.DONEIF=0; //Clear DONEIF and HALIF flagDMAINT0bits.HALFIF=0;IFS0bits.DMA0IF=0;

}}

DS39742B_JP - p. 54-14 © 2013 Microchip Technology Inc.

Page 15: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

セクション 54. ダイレクト メモリアクセス (DMA) コントローラD

MA

Co

ntro

llerD

MAコ

ント

ロー

54

54.3.4.4 連続モード

連続モード (TRMODE<1:0> = 10) では、1 回のトリガで連続的な転送のシーケンスが始まります。DMACNTn は転送のたびにデクリメントし、0000h に達するまで転送を実行し続けます。ワンショット モードと同様に、DMACNTn がデクリメントして 0000h に達するとチャンネルは無効になります。

ワンショット モードと連続モードは、一度に特定回数の転送を実行するという点では似ています。しかし、ワンショット モードでは 1 回の転送ごとにトリガが必要であるのに対し、連続モードでは 1 回のトリガで複数回の転送が可能であるという点で異なります。また、連続モードでは、DMACNTn はトリガごとにデクリメントするのではなく、転送ごとにデクリメントします。

例 54-3 に、連続転送向けの標準的なコードシーケンスを示します。

例 54-3: 連続転送向けのサンプルコード unsigned short int Array1[100];unsigned short int Array2[100];int i;void test(void);

int main(){for (i=0;i<100;i++){

Array1[i]=i+1; //fill with i+1Array2[i]=0; //fill with 0

}

DMACONbits.DMAEN=1;DMACONbits.PRSSEL=1;DMAH=0x5000; //set lower and upper address limitDMAL=0x850;DMASRC0=(unsigned short int)& Array1; // load the source addressDMADST0=(unsigned short int)& Array2; // load destination addressDMACNT0=100;DMACH0=0;DMACH0bits.SAMODE=1; //Source address increment modeDMACH0bits.DAMODE=1; //Destination address increment modeDMACH0bits.TRMODE=2; //Transfer mode ContinousDMACH0bits.CHEN=1; //Channel enable

IFS0bits.DMA0IF=0;DMACH0bits.CHREQ=1; //Enable the transfter by software trigger

while(!DMAINT0bits.HALFIF);//HALFIF=1 is set when //DMACNT0 reaches halfway

while(!IFS0bits.DMA0IF); //DONEIF=1;CHEN=0,DMA0IF=1 //and 100 (DMACNTx=100)transfer complete //with one trigger

Nop();Nop();Nop();IFS0bits.DMA0IF=0;while(1);

}

© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-15

Page 16: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

PIC24F ファミリ リファレンス マニュアル

54.3.4.5 連続リピートモード

連続リピートモード (TRMODE<1:0> = 11) は、連続モードとワンショット リピートモードを組み合わせたモードと考える事ができます。このモードでは、1 回のトリガで複数回の転送が可能であり、トリガが繰り返し発生する限り、データ転送を繰り返し実行し続けます。連続モードと同様に、DMACNTn は転送ごとにデクリメントします。これが 0000h に達すると、アドレスレジスタ (RELOAD = 1 の時 ) とカウントレジスタはリロードされ、同じプロセスを繰り返します。

シーケンスを終了するには、連続モードと同様にソフトウェアで CHEN ビットをクリアしてチャンネルを無効にするか、あるいはトリガ源を無効にする必要があります。

例 54-4 に、連続リピート転送向けの標準的なコードシーケンスを示します。

例 54-4: 連続リピート転送向けのサンプルコード ( メモリからメモリへの転送、RELOAD= 1)unsigned short int Array1[100];unsigned short int Array2[100];int i;

int main(){ANSA=0;TRISA=0;LATA=0x70;

for (i=0;i<100;i++){

Array1[i]=i+1; //fill with i+1Array2[i]=0; //fill with 0

}

DMACONbits.DMAEN=1;DMACONbits.PRSSEL=1;DMAH=0x5000; //set lower and upper address limitDMAL=0x850;DMASRC0=(unsigned short int)& Array1; // load the source addressDMADST0=(unsigned short int)& Array2; // load destination addressDMACNT0=100; // 100 Transaction per triggerDMACH0=0;DMACH0bits.SAMODE=1; //Source address increment modeDMACH0bits.DAMODE=1; //Destination address increment modeDMACH0bits.TRMODE=3; //Transfer mode Repeat continousDMACH0bits.RELOAD=1; //Reload Source and Destination AddressDMACH0bits.CHEN=1; //Channel enable

IFS0bits.DMA0IF=0;while(1){

DMACH0bits.CHREQ=1;//TIGGER while(!IFS0bits.DMA0IF);for (i=0;i<100;i++) //Clear the Destination Memory{

Array2[i]=0; //fill with 0}IFS0bits.DMA0IF=0;PORTAbits.RA0=0;DMAINT0bits.DONEIF=0;DMAINT0bits.HALFIF=0;

}}

DS39742B_JP - p. 54-16 © 2013 Microchip Technology Inc.

Page 17: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

セクション 54. ダイレクト メモリアクセス (DMA) コントローラD

MA

Co

ntro

llerD

MAコ

ント

ロー

54

54.3.4.6 アドレスとカウントのリロード

リピートモード以外の転送モードでも、ソースおよびデスティネーションのアドレスとトランザクション カウントの初期値を自動的にリロードできます。RELOAD ビット (DMACHn<9>)をセットすると DMASRCn、DMADSTn、DMACNTn の値を次の DMA 動作に向けてリロードできます。ワンショット モードまたは連続モードでこのビットをセットした場合、転送動作が完了した後にチャンネルを再度有効にすると、これらのレジスタがリロードされます。ワンショット リピートモードまたは連続リピートモードの場合、アドレスとトランザクション カウント値は自動的にリロードされます。

リピートモードでは、DMACNTn が 0000h までデクリメントするとリロードされます。このリロード動作は RELOAD 値に依存しません。唯一の例外は、動作中にチャンネルが一度停止した後に再開した場合です。

表 54-3 に、各データ転送モードにおける RELOAD ビットの設定と DMASRCn、DMADSTn、DMACNTn のリロードの関係を示します。

表 54-3: 各転送モードにおける RELOAD ビットの影響

54.3.5 アドレッシング モード

データを転送するたびに、そのチャンネルに対応する DMASRCn および DMADSTn レジスタを自動的に更新 ( インクリメントまたはデクリメント ) できます。これにより、ユーザの介入を必要とせずに複数アドレス間でデータを転送できます。アドレスの自動更新は、SAMODE および DAMODE ビット (DMACNn<7,6>、<5,4>) で制御します。

ソースとデスティネーションのアドレス更新オプション ( 固定、インクリメント、デクリメント、外部インデックス ) の組み合わせによって、下記の 5 種類のアドレッシング モードが可能です。

• ソース : 固定、デスティネーション : 固定

• ソース : 固定、 デスティネーション : ブロック

• ソース : ブロック、デスティネーション : 固定

• ソース : ブロック、デスティネーション : ブロック

• ペリフェラル間接アドレス指定 ( 一部のデバイスのみ )

表 54-4 に、各アドレッシング モードに対応する SAMODE ビットと DAMODE ビットの組み合わせを示します。

表 54-4: DMA アドレッシング モードの設定

RELOAD ビット DMACHn<2> DMASRCn DMADSTn DMACNTn

1 x リロードされる リロードされる リロードされる

0 1 リロードされない リロードされない リロードされる (1)

0 0 リロードされない リロードされない リロードされない

Note 1: DMACNTn がゼロまでデクリメントした時にのみリロードが発生します。チャンネルを一度停止した後に再開してもリロードは発生しません。

モード SAMODE<1:0> DAMODE<1:0>

固定 → 固定 00 00

固定 → ブロック ( インクリメント ) 00 01

固定 → ブロック ( デクリメント ) 00 10

ブロック ( インクリメント ) → 固定 01 00

ブロック ( デクリメント ) → 固定 10 00

ブロック → ブロック ( インクリメント ) 01 01

ブロック → ブロック ( デクリメント ) 10 10

ペリフェラル間接アドレス指定 11 11

Note 1: アドレスのインクリメント / デクリメント挙動は SIZE 値によって異なります。

© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-17

Page 18: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

PIC24F ファミリ リファレンス マニュアル

54.3.5.1 ソース : 固定 → デスティネーション : 固定

固定→固定モードでは、SAMODE<1:0> および DAMODE<1:0> ビットをどちらも「00」に設定します。このモードでは、トランザクション後にソースおよびデスティネーション アドレスは更新されません。このモードは、2 つの固定されたアドレス間の 1 バイトまたは 1 ワードのワンショット転送に適します。

54.3.5.2 ソース : 固定 → デスティネーション : ブロック

固定→ブロックモードでは、転送中にソースアドレスは変化せず、デスティネーション アドレスは DAMODE の設定に応じてインクリメントまたはデクリメントします。このモードは、シリアル通信周辺モジュールの 1 ワードバッファからデータを受信し、そのデータをバッファとして構成された複数アドレスのブロックに書き込む場合に適しています。

例 54-5 (p. 54-19) に、固定→ブロック アドレッシングのサンプルコードを示します。UARTバッファに 4 バイトが書き込まれてフルになると、ソースアドレス (UART 受信 ) 割り込みが発生し、これによって転送がトリガされます。

54.3.5.3 ソース : ブロック → デスティネーション : 固定

ブロック→固定モードでは、転送中にソースアドレスは SMODE の設定に応じてインクリメントまたはデクリメントし、デスティネーション アドレスは変化しません。このモードは、送信データのパケットをシリアル通信周辺モジュールの 1 ワード送信バッファに転送する場合に適しています。

54.3.5.4 ソース : ブロック → デスティネーション : ブロック

ブロック→ブロックモードでは、転送中にソースアドレスもデスティネーション アドレスもインクリメントまたはデクリメントします ( それぞれ SAMODE および DAMODE の設定に従う )。このモードは、データ RAM 内のデータブロックを同じデータ RAM 内の別の位置にコピーする場合に便利です。

DS39742B_JP - p. 54-18 © 2013 Microchip Technology Inc.

Page 19: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

セクション 54. ダイレクト メモリアクセス (DMA) コントローラD

MA

Co

ntro

llerD

MAコ

ント

ロー

54

例 54-5: 固定→ブロック連続転送のサンプルコード ( 周辺モジュールからメモリへの転送 )void UartInit(void);unsigned char Array2[100];int i;void test(void);

int main(){UartInit();for (i=0;i<100;i++){

Array2[i]=0; //fill with 0}DMACONbits.DMAEN=1;DMACONbits.PRSSEL=1;DMAH=0x5000; //set lower and upper address limitDMAL=0x850;DMASRC0=(unsigned int)&U2RXREG;DMADST0=(unsigned short int)& Array2; // load destination addressDMACNT0=4; //When the Uart buffer is full 4 ,

//do a interrupt and transfer 4 bytesDMACH0=0;DMACH0bits.BYTE=1;DMACH0bits.SAMODE=0; //Source address increment mode,

//do not incrementDMACH0bits.DAMODE=1; //Destination address increment mode,

//increment 1DMACH0bits.TRMODE=2; //Transfer mode Continous DMAINT0bits.CHSEL=33; //Trigger on UART2 ReceiveDMACH0bits.CHEN=1; //Channel enableIFS0bits.DMA0IF=0;while(!IFS0bits.DMA0IF); //DONEIF=1;CHEN=0,DMA0IF=1 and

//transfer complete with one triggerIFS0bits.DMA0IF=0;while(1);

}void UartInit(void){TRISFbits.TRISF5=0;TRISFbits.TRISF4=1;__builtin_write_OSCCONL(OSCCON & 0xBF);RPINR19bits.U2RXR = 10; //RF4 U2RXRPOR8bits.RP17R = 5; //RF4 T2TX__builtin_write_OSCCONL(OSCCON | 0x40);U2BRG = 100;//BAUDRATEREG2;U2MODE = 0;U2MODEbits.BRGH = 1;U2STA = 0;U2STAbits.URXISEL=3; //Interrupt after 4 transfersU2MODEbits.UARTEN = 1;U2MODEbits.PDSEL1= 0; U2MODEbits.PDSEL0= 0; U2STAbits.UTXEN = 1;IFS1bits.U2RXIF = 0;

}

© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-19

Page 20: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

PIC24F ファミリ リファレンス マニュアル

54.3.5.5 ペリフェラル間接アドレス指定

ペリフェラル間接アドレス指定 (PIA) は、周辺モジュールの多層バッファ同士間でデータを転送する場合に使う特殊な自動インクリメント モードです。このモードの使用を前提に設計された一部の周辺モジュールだけがこのモードをサポートします。デバイスが PIA 対応周辺モジュールを内蔵しているかどうかは、データシートを参照してください。

PIA モードは、SAMODE または DAMODE ビットを「11」に設定すると有効になります。PIAモードを選択すると、PIA 対応周辺モジュールは短い間接アドレス (IA) ( 長さは周辺モジュールで定義 ) を DMA チャンネルに向けて生成します。DMA アドレス空間内の周辺モジュールのアドレスは、DMASRCn および / または DMADSTn の値と IA の間の論理和によって定義されます。SAMODE<1:0> = 11 の場合、DMASRCn を転送における実際のソースアドレスに対するベースアドレスとして使います。同様に、DAMODE<1:0> = 11の場合は、DMADSTn をベース デスティネーション アドレスとして使います。

IA をインクリメントするかデクリメントするかは周辺モジュールが管理します。これにより、DMA アドレス空間内に、一定サイズのバッファ( 一般的にはリングバッファ) が形成されます。例えば、周辺モジュールは 4 ビットの IA を使って 16 バイトのバッファ ( 開始アドレスはDMASRCn または DMADSTn で定義 ) にアクセスできます。従って、バッファは DMASRC または DMADST レジスタの値と最大 PA 値によって決まる境界を超える事はできず、アドレスは境界内で循環します。

読み /書きされる実際のソースおよびデスティネーション アドレスは、DMASRCnとDMADSTnを含むどのレジスタにも書き込まれていないという事に注意してください。アドレスの全域を使えるようにするため、PIA に対応するソースまたはデスティネーション アドレスレジスタの下位ビット (LSb) は常に「0」にしておく必要があります。

図 54-5 に、PIA モードで DMASRC および DMADST レジスタを使って実際のソースおよびデスティネーション アドレスを生成する方法を示します。この例では、DMASRC はベース ソースアドレスとして 0500h を格納し、DMADST はベース デスティネーション アドレスとして1500h を格納しています。これらのアドレスは一例です。実際のアプリケーションでは、PIAモードを使って周辺モジュールとメモリ間でどのタイプのデータ転送でも実行できます。

図 54-5: ペリフェラル間接アドレス指定におけるソースおよびデスティネーション アドレスの計算

SFR Area

Data RAM

07FFh0800h

Source Range

Destination

DMA RAM AreaDMAL

DMAH

DMABUF

PIA-EnabledPeripheral

IA

DMA Channel

DMASRC

xxxx

0000 0101 0000 0000

0000 0101 0000 xxxx

PIA-Enabled

Peripheral

IA

DMA Channel

DMADST

xxxx

0001 0101 0000 0000

Range

0001 0101 0000 xxxx

When DAMODE = 11

When SAMODE = 11

DS39742B_JP - p. 54-20 © 2013 Microchip Technology Inc.

Page 21: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

セクション 54. ダイレクト メモリアクセス (DMA) コントローラD

MA

Co

ntro

llerD

MAコ

ント

ロー

54

54.3.6 NULL 書き込みモード

既定値の DMA 転送動作では、ソースアドレスからデスティネーション アドレスへ向かって単方向の転送だけが可能です。しかし、一部の通信プロトコルは釣り合ったバッファアクセスを要求します。この場合、バッファからの読み出しを実行するたびに書き込みも実行する必要があります。このような要求は、例えばマスタモードで動作する SPI モジュールで生じます。

NULL 書き込みモードを使うと、この要求に対応できます。このモードも、他の DMA 動作と同様に、DMASRC が指定するアドレスから DMADST が指定するアドレスへデータを転送します。しかし、転送後 DMABUF に残されていた転送データは DMASRC レジスタが指定するアドレスへ書き戻されます。書き戻しは、DMA 動作が次の転送へ進む前に発生します。この動作の典型的な例を図 54-6 に示します。

NULL 書き込みモードは、NULLW ビット (DMACHn<15>) をセットすると有効になります。

図 54-6: NULL 書き込みモードの転送 ( 周辺モジュールからメモリへの転送例 )

SFR Area

Data RAM

07FFh0800h

DMASRCn

DMADSTn

DMA RAM AreaDMAL

DMAH

DMABUF(1)

(2)

(3)1. DMASRCn が指定するアドレスのデータを

DMABUF に転送する。

2. DMABUF 内のデータを DMADSTn が指定するアドレスにコピーする。

3. DMABUF内の同じデータをDMASRCnが指定するアドレスにも書き戻す。

© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-21

Page 22: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

PIC24F ファミリ リファレンス マニュアル

54.4 チャンネル調停と優先権決定方式各 DMA チャンネルは独立して動作し、チャンネルごとに異なる周辺モジュールを同時にサービスできますが、1 本の DMA データバスおよび RAM へのデータチャンネルを共有する事による制約を受けます。同時に 2 つ以上のチャンネルが DMA コントローラに対してデータ転送の処理を要求した場合、コントローラはこれらの要求を調停し、優先権をいずれか 1 つのチャンネルに与えます。コントローラは定義済みの 2 種類の調停方式 ( 固定優先度方式とラウンドロビン方式 ) を備えています。どちらの方式を使うかは、PRSSEL ビット (DMACON<0>) で指定します。

ラウンドロビン方式 (DMACON<0> = 1) の場合、データ転送の競合が発生すると、コントローラは最初にチャンネル 0 に優先権を与えます。その後、競合が発生するたびに、コントローラは次に大きな番号のチャンネルに優先権を与え、最大番号のチャンネルに優先権を与えた後は、再びチャンネル 0 に優先権を与えます。このようにして、優先権は全てのチャンネルを通して循環します。今回優先権が与えられる順番のチャンネルが転送を要求していない場合、次のチャンネルに優先権が移動します。

例えばチャンネル 0、1、2 が同時にデータ転送を要求した場合、最初はチャンネル 0 からの要求が処理されます。次の転送要求では、チャンネル 1 に優先権が与えられ、その次の転送要求ではチャンネル 2 に優先権が与えられます。全てのチャンネルに優先権が一巡するまで、チャンネル 0 からの転送要求は無視されます。ラウンドロビン方式による調停の代表例を表 54-5 に示します。

表 54-5: ラウンドロビン方式によるチャンネル調停の例

もう 1 つの調停方式である固定優先度方式 (DMACON<0> = 0) は、転送を同時に要求しているチャンネルの中で最も番号の小さなチャンネルに常に優先権を与えます。この方式では、チャンネル 0 が複数回連続して転送を要求すると、その間は常にチャンネル 0 が他のチャンネルよりも優先されます。既定値では固定優先度方式が選択されます。代表例を表 54-6 に示します。

表 54-6: 固定優先度方式によるチャンネル調停の例

DMA 転送を要求中のチャンネル優先されるチャンネル

0 1 2 3

なし

X CH1

X X X CH2

X X CH0

X X CH1

X X X CH3

X X CH0

DMA 転送を要求中のチャンネル優先されるチャンネル

0 1 2 3

なし

X CH1

X X X CH0

X X CH0

X CH1

X X CH1

X CH3

DS39742B_JP - p. 54-22 © 2013 Microchip Technology Inc.

Page 23: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

セクション 54. ダイレクト メモリアクセス (DMA) コントローラD

MA

Co

ntro

llerD

MAコ

ント

ロー

54

54.5 DMA 割り込みDMA チャンネルごとに 5 つの割り込みフラグが割り当てられています。これらのフラグは、データ転送の実行中と完了後の状態を示します。割り込みイベントによってこれらのフラグがセットされると、デバイスレベルの DMA チャンネル割り込みフラグ (DMAnIF) がセットされます。1 つの例外を除き、これらのフラグは常に有効であり、設定変更はできません。デバイスレベルの割り込みを実際に生成するかどうかは、IECx 割り込みレジスタの DMAnIE ビットで指定します。

DMA チャンネルの全てのイベントフラグは、個々にそのチャンネルに対するデバイスレベルの割り込みをトリガできます。このためユーザは、割り込みをトリガしたフラグを特定するための手段を ISR に組み込む必要があります。

54.5.1 DMA 完了割り込み

DONEIF ビット (DMAINTn<5>) は、直前の DMA 動作の完了ステータスを示します。このビットは、ワンショットまたは連続 DMA トランザクションの実行中に DMACNTn レジスタの値が0000h までデクリメントした時点で自動的にセットされます。

また、対応する CHEN ビット (DMACHn<x>) も併せて確認する事で、前回および現在のトランザクションのステータスをより詳しく知る事ができます ( 表 54-7 参照 )。

ワンショット リピートおよび連続リピート転送モードの場合、DONEIF は常にクリア状態 (= 0)です。これは、DMACNTn が 0000h までデクリメントすると、アドレスレジスタとトランザクション カウンタが自動的にリロードされて、トランザクションが自動的に繰り返されるためです。これらのリピート式転送モードを終了するには、ソフトウェアで CHREQ ビットをクリアする必要があります。

表 54-7: DMA トランザクションのステータス

54.5.2 DMA 中間点割り込み

HALFIF 割り込みフラグ (DMAINn<4>) は、DMACNTn レジスタの値が初期設定値と 0000h の中間点に達した事を示すオプションの割り込みフラグです。この割り込みを DONEIF 割り込みと一緒に使う事で、DMA 転送の進捗を監視できます。

この割り込みを有効にした場合、HALFIF ビットは DMACNTn が中間点に達した時にのみセットされ、クリアすると以降はセットされません。つまり、これは非永続的割り込みとして機能します。リピート式の転送モードの場合、DMA コントローラは、このビットがクリアされているかどうかに関係なく、DMACNTn が中間点に達するたびに HALFIF ビットをセットします。このビットがセットされた後にクリアするのは、ユーザの責任となります。

他の DMA 割り込みとは異なり、HALFIF 割り込みは、HALFEN ビット (DMAINTn<0>) をセットして明示的に有効にする必要があります。

54.5.3 オーバーラン割り込み

CHREQビットがソフトウェアまたは別のハードウェア トリガによって既にセットされている状態の DMA チャンネルが次のトリガを受け取ると、オーバーラン条件が発生します。オーバーランとは、トランザクションを現在実行中 ( 未完了 ) のチャンネルに対して次の転送が要求された状態を指します。これは、アクティブなチャンネルの処理速度が周辺モジュールからの要求に追いつかず、その結果データが失われてしまう可能性がある事を意味します。オーバーランが発生すると、OVRUNIF フラグ (DMAINn<3>) がセットされます。

OVRUNIF フラグがセットされても、実行中の DMA 動作は終了しないという事に注意してください。

優先権決定方式を適切に設定する事で、オーバーラン エラーの発生を軽減できます。例えば、1 つのチャンネルが他のチャンネルよりも頻繁に転送を行う場合、固定優先度方式を使ってそのチャンネルを優先する事で、オーバーラン割り込みの発生を軽減できます。

ビットの状態DMA トランザクションのステータス

DONEIF CHEN

0 0 直前のトランザクションは完了せずに中止された

0 1 現在トランザクションを実行中

1 0 直前のトランザクションは完了せずに中止された

1 1 直前のトランザクションは正常に完了した

© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-23

Page 24: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

PIC24F ファミリ リファレンス マニュアル

54.5.4 DMA アドレス制限割り込み

HIGHIF および LOWIF フラグ (DMAINTn<7,6>) は、DMA 動作が DMAH および DMAL レジスタで設定されているデータ RAM アドレス境界を越えた事を示します。これらのフラグは、設定されているDMA境界の外側のアドレスに対してデータの読み /書きが試みられるとセットされます。また、アドレス制限割り込みが発生すると、実行中の全ての DMA トランザクションは即座に終了します。

54.6 DMA 動作の例

54.6.1 基本セットアップ

どのようなデータ転送を行う場合でも、以下の手順で DMA チャンネルを設定します。

1. DMA コントローラを有効 (DMAEN = 1) にし、PRSSEL ビットをセットまたはクリアしてチャンネル優先権決定方式を選択する。

2. データ RAM との間で転送を行う場合、DMAH と DMAL に上限 / 下限アドレスを書き込む。

3. 使う DMA チャンネルを選択し、その動作を無効 (CHEN = 0) にする。

4. このチャンネルの DMASRCn および DMADSTn レジスタに、トランザクションのソースおよびデスティネーション アドレスを書き込む。PIA モードのアドレス指定の場合、ベースアドレス値を書き込む。

5. DMACNTn に必要な転送回数を書き込む。

6. SIZE ビットをセットまたはクリアしてデータサイズを選択する。

7. TRMODE ビットでデータ転送モードを選択する。

8. SAMODE ビットと DAMODE ビットでアドレッシング モードを選択する。

9. CHEN ビットをセットして DMA チャンネルを有効にする。

10. トリガ源の割り込みを有効にする。

54.6.2 標準動作 ( データ転送 )

DMA コントローラの基本的な使用方法として、例えば UART 等のシリアル通信チャンネルからの連続したデータストリームをデータ RAM 内の所定位置に転送し、CPU がそれらのデータを処理できるまでバッファリングします。以下では、例として DMA0 を使って UART をサービスします。この場合、下記のように設定します。

• UART の受信割り込みを DMA0 のトリガとして設定する。

• DMA0 のソース アドレッシング モードを「固定」、デスティネーション アドレッシング モードを「ブロック ( インクリメント )」、データ転送モードを「ワンショット リピート」に設定する。

• DMASRC0 に UART 受信バッファのアドレスを書き込み、DMADST0 にデータ RAM のアドレスを書き込む。

• DMACNT0 に 0015h を書き込む。

この設定によるイベントのシーケンスは下記の通りです。

1. UART が受信割り込みをトリガすると、DMA0 はバッファからデータ RAM へデータを転送する。

2. 転送後、デスティネーション アドレスはインクリメントする。

3. 16 回の割り込み後に、DMACNT0 は 0000h までデクリメントする。これはリピート式の転送モードであるため、この時点で DMADST0 と DMACNT0 に元の初期値がリロードされ、シーケンスが繰り返される。

以上のプロセスにより、CPU は受信シリアルデータのバッファリング中に他のタスクを実行し、時間が空いた時に受信データを処理できます。DMA はメモリ内の固定された 16 アドレスを上書きするため、CPU はそれらが上書きされる前に読み出す事ができるものと想定します。

DS39742B_JP - p. 54-24 © 2013 Microchip Technology Inc.

Page 25: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

セクション 54. ダイレクト メモリアクセス (DMA) コントローラD

MA

Co

ntro

llerD

MAコ

ント

ロー

54

54.6.3 ネスト動作 ( 待機ステートの生成 )

DMA チャンネルのデータ転送を別の DMA チャンネルを使ってトリガする事で、DMA チャンネルをネストさせる事ができます。マイクロコントローラの汎用タイマを使うと、サービス要求とデータ転送の間に一定の遅延を挿入できます。

ここでは、DMA0 と DMA1 を使って、強制待機ステート後に UART をサービスします。DMAチャンネル 0 と 1 は下記のように設定します。

• UART の受信割り込みを DMA チャンネル 0 のトリガとして設定する。

• DMASRC0 にデータ RAM 内のアドレスを書き込み、DMADST0 に T0CON レジスタのアドレスを書き込む。

• Timer0 割り込みを DMA チャンネル 1 のトリガとして設定する。

• DMASRC1 に UART 受信バッファのアドレスを書き込み、DMADST にデータ RAM 内のデスティネーション アドレスを書き込む。

この場合のイベントのシーケンスは以下の通りです。

1. UART が割り込みを生成すると、DMA0 はデータを Timer0 の制御レジスタへ転送する。

2. これにより Timer0 は一定の期間 ( 待機ステート ) カウントダウンした後に、割り込みを生成する。

3. Timer0 がタイマ割り込みを生成すると、DMA1 がトリガされて UART からデータ RAM へデータを転送する。

この例では、どちらの DMA チャンネルもトリガ源のモジュールをサービスしていません。

54.6.4 カスケード動作 (SPI 全二重サービス )

2 つの DMA チャンネルをカスケードする事も可能です。この場合、片方のチャンネルが機能の一部を実行した後に、他方のチャンネルをトリガして動作を引き継ぎます。スレーブモードでの SPI モジュールの動作がその代表例です。カスケードした 2 つの DMA チャンネルを使って交互にデータを受信 / 送信する事で、CPU に負荷をかけずに自動的な全二重動作が可能となります。

DMA0 ( 読み出しチャンネル ) と DMA1 ( 書き込みチャンネル ) を下記のように設定します。

• DMA0 を次のように設定する : SPI 転送割り込みをトリガとして使用、ワンショット リピート転送、ソースアドレスとデスティネーション アドレスは共に固定。

• DMASCR0 に SPIBUF のアドレスを書き込み、DMADST0 にデータ RAM 内のデスティネーション アドレスを書き込む。

• DMACNT0 を 0001h ( 既定値 ) に設定する。

• DMA1 を次のように設定する : DMA0 割り込みをトリガとして使用、ワンショット リピート転送、ソースアドレスとデスティネーション アドレスは共に固定。

• DMASCR1 にデータ RAM 内のソースアドレスを書き込み、DMADST1 に SPIBUF のアドレスを書き込む。

• DMACNT1 を 0001h に設定する。

この場合のイベントのシーケンスは以下の通りです。

1. SPI がデータを受信すると、SPI 転送割り込みが発生する。

2. これは DMA0 をトリガし、SPI バッファから RAM へのデータ転送が始まる。転送が終了すると DMA0 割り込みが発生する。

3. DMA0 割り込みは DMA1 をトリガし、データ RAM から SPIBUF へデータが転送される。プロセスはこの時点で終了する。

この例では、説明を単純化するために、1 ワードのデータを SPI 送受信しています。DMA0 のSAMODE と DMA1 の DAMODE を変更し、DMACNT に 0001h よりも大きな値を設定する事で、より多量のデータを扱う全二重トランザクション向けにマルチワード バッファを形成できます。

© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-25

Page 26: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

PIC24F ファミリ リファレンス マニュアル

54.7 スリープおよびアイドル中の動作 DMA コントローラは CPU の拡張機能と見なす事ができますが、省電力動作中は周辺モジュールとして扱われます。他の周辺モジュールと同様に DMA コントローラも、周辺モジュール ディセーブル ビットを使って省電力モード中の動作を指定できます。

54.7.1 アイドルモード

DMA コントローラはアイドル中に動作できません。アイドルへの移行時に実行中であったトランザクションは中止されます。

DMA コントローラを常時使用する必要がある場合、別の方法で消費電力を低減できます。例えば、DMA コントローラがデータを転送している間に CPU で NOP命令を実行すると、プログラムメモリ アレイの動作が効果的に抑制されるため、消費電力を大幅に削減できます。他にも省電力化の方法はあります。

54.7.2 スリープモード

デバイスがスリープに移行すると、モジュールへの全てのクロック源は停止して論理状態「0」を維持します。実行中であった転送は中止されます。コントローラは、中止された転送をスリープからの復帰時に再開しません。

デバイスがスリープに移行またはスリープから復帰する際、レジスタの内容は影響を受けません。実行中の DMA 転送が終了してからスリープに移行する事を推奨します。

54.7.3 ディープスリープ モード

デバイスがディープスリープに移行すると、DMA コントローラへの全てのクロック源は停止します。実行中であった転送はディープスリープへの移行時に中止されます。コントローラは、中止された転送をディープスリープからの復帰時に再開しません。

ディープスリープへの移行時もディープスリープからの復帰時も、レジスタの内容は影響を受けません。ディープスリープからの復帰後は、DMA コントローラを再度有効にする必要があります。

実行中の DMA 転送が終了してからディープスリープに移行する事を推奨します。

54.7.4 VBAT モード

DMA コントローラは、VDD が停電すると動作を停止します。VBAT モード中も動作しません。VDD の停電発生時に実行中であった転送は中止されます。

また、VDD の停電はレジスタの内容に影響します。停電からの復帰後に DMA コントローラを再度有効にする必要があります。

54.7.5 周辺モジュール ディセーブル (PMD) レジスタ

周辺モジュール ディセーブル (PMD) レジスタを使うと、DMA チャンネルへのクロック源を全て停止する事によってそのチャンネルを無効にできます。DMA PMD ビットは、4 つのチャンネルをまとめて制御します。例えば DMA0MD ビットはチャンネル 0 ~ 3 を無効にし、DMA1MDビットはチャンネル 4 ~ 7 を無効にします。DMA PMD ビットをセットすると、対応する 4 つのチャンネルの全てが無効になります。

PMD 制御ビットを使って全てのチャンネルを無効にすると、DMA コントローラは最小消費電力状態になります。この状態でも、モジュールレベルのレジスタ (DMACON、DMABUF、DMAH、DMAL) はアクティブなままです。しかし、DMA PMD ビットで無効にされたチャンネルに対応する制御およびステータス レジスタは無効になるため、それらのレジスタへの書き込みは効果を持たず、読み出し値は無効です。

54.8 リセットの影響デバイスリセットが発生すると、全てのレジスタはリセット状態に戻されます。これによりDMA コントローラと全てのチャンネルは停止し、実行中であった転送は全て中止されます。全てのバッファとアドレスレジスタは 0000h に初期化されます。

DS39742B_JP - p. 54-26 © 2013 Microchip Technology Inc.

Page 27: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

© 2013

Microchip T

echnology Inc.D

S39742B

_JP - p. 5

4-27

セク

ショ

ン54. ダ

イレ

クト

メモ

リア

クセ

ス(D

MA

)コ

ント

ロー

54

レ Bit 3 Bit 2 Bit 1 Bit 0 全リセット

DM — — PRSSEL 0000

DM 0000

DM 0000

DM 0000

DM MODE1 TRMODE0 BYTE CHEN 0000

DM VRUNIF — — HALFEN 0000

DM 0000

DM 0000

DM 0001

DM MODE1 TRMODE0 BYTE CHEN 0000

DM VRUNIF — — HALFEN 0000

DM 0000

DM 0000

DM 0001

•••

•••

DM MODE1 TRMODE0 BYTE CHEN 0000

DM VRUNIF — — HALFEN 0000

DM 0000

DM 0000

DM 0001

No

DMAコントローラ 54

.9 レジスタマップ表 54-8 に PIC24F の DMA コントローラに関連するレジスタをまとめて示します。

54-8: DMA 関連のレジスタマップ

ジスタ名 Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4

ACON DMAEN — — — — — — — — — — — —

ABUF DMA データバッファ

AL DMA 上限アドレス

AH DMA 下限アドレス

ACH0 — — — — — NULLW RELOAD CHREQ SAMODE1 SAMODE0 DAMODE1 DAMODE0 TR

AINT0 DBUFWF — — CHSEL4 CHSEL3 CHSEL2 CHSEL1 CHSEL0 HIGHIF LOWIF DONEIF HALFIF O

ASRC0 チャンネル 0 ソースアドレス

ADST0 チャンネル 0 デスティネーション アドレス

ACNT0 チャンネル 0 トランザクション カウンタ

ACH1 — — — — — NULLW RELOAD CHREQ SAMODE1 SAMODE0 DAMODE1 DAMODE0 TR

AINT1 DBUFWF — — CHSEL4 CHSEL3 CHSEL2 CHSEL1 CHSEL0 HIGHIF LOWIF DONEIF HALFIF O

ASRC1 チャンネル 1 ソースアドレス

ADST1 チャンネル 1 デスティネーション アドレス

ACNT1 チャンネル 1 トランザクション カウンタ

•••

ACHn(1) — — — — — NULLW RELOAD CHREQ SAMODE1 SAMODE0 DAMODE1 DAMODE0 TR

AINTn(1) DBUFWF — — CHSEL4 CHSEL3 CHSEL2 CHSEL1 CHSEL0 HIGHIF LOWIF DONEIF HALFIF O

ASRCn(1)チャンネル n ソースアドレス

ADSTn(1)チャンネル n デスティネーション アドレス

ACNTn(1)チャンネル n トランザクション カウンタ

例 : x = リセット時に未知の値、 — = 未実装、「0」として読み出し、リセット値は 16 進数で表記。

te 1: DMA チャンネルの数はデバイスによって異なります。DMA チャンネルの実装数については、各デバイスのデータシートを参照してください。

Page 28: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

PIC24F ファミリ リファレンス マニュアル

54.10 関連アプリケーション ノート本セクションに関連するアプリケーション ノートの一覧を下に記載します。一部のアプリケーション ノートは PIC24 製品ファミリ向けではありません。ただし概念は共通しており、変更が必要であったり制限事項が存在するものの利用が可能です。ダイレクト メモリアクセス(DMA) コントローラに関連する最新のアプリケーション ノートは以下の通りです。

タイトル アプリケーション ノート番号

Note: PIC24 ファミリ関連のアプリケーション ノートとサンプルコードは Microchip 社のウェブサイト (www.microchip.com) でご覧になれます。

DS39742B_JP - p. 54-28 © 2013 Microchip Technology Inc.

Page 29: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

セクション 54. ダイレクト メモリアクセス (DMA) コントローラD

MA

Co

ntro

llerD

MAコ

ント

ロー

54

54.11 改訂履歴

リビジョン A (2011 年 2 月 )

本書の初版です。

リビジョン B (2012 年 10 月 )

各転送モード向けのサンプルコード ( 例 54-1 ~例 54-4) を追加しました。

固定→ブロック アドレッシング向けのサンプルコード ( 例 54-5) を追加しました。

その他、細部の誤植等を修正しました。

© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-29

Page 30: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

PIC24F ファミリ リファレンス マニュアル

NOTE:

DS39742B_JP - p. 54-30 © 2013 Microchip Technology Inc.

Page 31: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

2013 Microchip Technology Inc. DS39742B_JP - p. 54-31

本書に記載されているデバイス アプリケーション等に関する

情報は、ユーザの便宜のためにのみ提供されているものであ

り、更新によって無効とされる事があります。お客様のアプ

リケーションが仕様を満たす事を保証する責任は、お客様に

あります。Microchip 社は、明示的、暗黙的、書面、口頭、法

定のいずれであるかを問わず、本書に記載されている情報に

関して、状態、品質、性能、商品性、特定目的への適合性を

はじめとする、いかなる類の表明も保証も行いません。

Microchip 社は、本書の情報およびその使用に起因する一切の

責任を否認します。Microchip 社の明示的な書面による承認な

しに、生命維持装置あるいは生命安全用途に Microchip 社の製

品を使用する事は全て購入者のリスクとし、また購入者はこ

れによって発生したあらゆる損害、クレーム、訴訟、費用に

関して、Microchip 社は擁護され、免責され、損害をうけない

事に同意するものとします。暗黙的あるいは明示的を問わず、

Microchip社が知的財産権を保有しているライセンスは一切譲

渡されません。

商標

Microchip 社の名称と Microchip ロゴ、dsPIC、FlashFlex、KEELOQ、KEELOQ ロゴ、MPLAB、PIC、PICmicro、PICSTART、PIC32 ロゴ、rfPIC、SST、SST ロゴ、SuperFlash、UNI/O は、

米国およびその他の国における Microchip TechnologyIncorporated の登録商標です。

FilterLab、Hampshire、HI-TECH C、Linear Active Thermistor、MTP、SEEVAL、Embedded Control Solutions Company は、

米国における Microchip Technology Incorporated の登録商標

です。

Silicon Storage Technologyは、その他の国におけるMicrochipTechnology Incorporated の登録商標です。

Analog-for-the-Digital Age、Application Maestro、BodyCom、

chipKIT、chipKIT ロゴ、CodeGuard、dsPICDEM、dsPICDEM.net、dsPICworks、dsSPEAK、ECAN、ECONOMONITOR、FanSense、HI-TIDE、In-Circuit Serial Programming、ICSP、Mindi、MiWi、MPASM、MPF、MPLAB 認証ロゴ、MPLIB、MPLINK、mTouch、Omniscient Code Generation、PICC、PICC-18、PICDEM、

PICDEM.net、PICkit、PICtail、REAL ICE、rfLAB、Select Mode、SQI、Serial Quad I/O、Total Endurance、TSHARC、UniWinDriver、WiperLock、ZENA、Z-Scale は、米国およびその他の国におけ

る Microchip Technology Incorporatedの登録商標です。

SQTP は、米国における Microchip Technology Incorporatedのサービスマークです。

GestICとULPPは、その他の国におけるMicrochip TechnologyGermany II GmbH & Co. & KG (Microchip TechnologyIncorporated の子会社 ) の登録商標です。

その他、本書に記載されている商標は各社に帰属します。

©2013, Microchip Technology Incorporated, Printed in theU.S.A., All Rights Reserved.

ISBN: 978-1-62077-110-5

Microchip 社製デバイスのコード保護機能に関して次の点にご注意ください。

• Microchip 社製品は、該当する Microchip 社データシートに記載の仕様を満たしています。

• Microchip 社では、通常の条件ならびに仕様に従って使用した場合、Microchip 社製品のセキュリティ レベルは、現在市場に流

通している同種製品の中でも最も高度であると考えています。

• しかし、コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です。弊社の理解ではこうした手法は、

Microchip 社データシートにある動作仕様書以外の方法で Microchip 社製品を使用する事になります。このような行為は知的所

有権の侵害に該当する可能性が非常に高いと言えます。

• Microchip 社は、コードの保全性に懸念を抱くお客様と連携し、対応策に取り組んでいきます。

• Microchip 社を含む全ての半導体メーカーで、自社のコードのセキュリティを完全に保証できる企業はありません。コード保護

機能とは、Microchip 社が製品を「解読不能」として保証するものではありません。

コード保護機能は常に進歩しています。Microchip 社では、常に製品のコード保護機能の改善に取り組んでいます。Microchip 社

のコード保護機能の侵害は、デジタル ミレニアム著作権法に違反します。そのような行為によってソフトウェアまたはその他の著

Microchip 社では、Chandler および Tempe ( アリゾナ州 )、Gresham( オレゴン州 ) の本部、設計部およびウェハー製造工場そしてカリフォルニア州とインドのデザインセンターが ISO/TS-16949:2009 認証を取得しています。Microchip 社の品質システム プロセスおよび手順は、PIC® MCU および dsPIC® DSC、KEELOQ® コード ホッピング デバイス、シリアル EEPROM、マイクロペリフェラル、不揮発性メモリ、アナログ製品に採用されています。さらに、開発システムの設計と製造に関する Microchip 社の品質システムは ISO 9001:2000 認証を取得しています。

QUALITY MANAGEMENT SYSTEM CERTIFIED BY DNV

== ISO/TS 16949 ==

Page 32: セクション 54. ダイレクト メモリアクセス (DMA) …ww1.microchip.com/downloads/jp/DeviceDoc/39742B_JP.pdf© 2013 Microchip Technology Inc. DS39742B_JP - p. 54-1 DMA

DS39742B_JP - p. 54-32 2013 Microchip Technology Inc.

北米本社2355 West Chandler Blvd.Chandler, AZ 85224-6199Tel:480-792-7200 Fax:480-792-7277技術サポート : http://www.microchip.com/supportURL: www.microchip.com

アトランタDuluth, GA Tel:678-957-9614 Fax:678-957-1455

ボストンWestborough, MA Tel:774-760-0087 Fax:774-760-0088

シカゴItasca, IL Tel:630-285-0071 Fax:630-285-0075

クリーブランドIndependence, OH Tel:216-447-0464

Fax:216-447-0643

ダラスAddison, TX Tel:972-818-7423 Fax:972-818-2924

デトロイトFarmington Hills, MI Tel:248-538-2250Fax:248-538-2260

インディアナポリスNoblesville, IN Tel:317-773-8323Fax:317-773-5453

ロサンゼルスMission Viejo, CA Tel:949-462-9523 Fax:949-462-9608

サンタクララSanta Clara, CA Tel:408-961-6444Fax:408-961-6445

トロントMississauga, Ontario, CanadaTel:905-673-0699 Fax:905-673-6509

アジア / 太平洋

アジア太平洋支社Suites 3707-14, 37th FloorTower 6, The GatewayHarbour City, KowloonHong KongTel:852-2401-1200Fax:852-2401-3431オーストラリア - シドニーTel:61-2-9868-6733Fax:61-2-9868-6755

中国 - 北京Tel:86-10-8569-7000 Fax:86-10-8528-2104

中国 - 成都Tel:86-28-8665-5511Fax:86-28-8665-7889

中国 - 重慶Tel:86-23-8980-9588Fax:86-23-8980-9500

中国 - 杭州Tel:86-571-2819-3187 Fax:86-571-2819-3189

中国 - 香港 SARTel:852-2943-5100 Fax:852-2401-3431

中国 - 南京Tel:86-25-8473-2460Fax:86-25-8473-2470

中国 - 青島Tel:86-532-8502-7355Fax:86-532-8502-7205

中国 - 上海Tel:86-21-5407-5533 Fax:86-21-5407-5066

中国 - 瀋陽Tel:86-24-2334-2829Fax:86-24-2334-2393

中国 - 深圳Tel:86-755-8864-2200 Fax:86-755-8203-1760

中国 - 武漢Tel:86-27-5980-5300Fax:86-27-5980-5118

中国 - 西安Tel:86-29-8833-7252Fax:86-29-8833-7256

中国 - 厦門Tel:86-592-2388138 Fax:86-592-2388130

中国 - 珠海Tel:86-756-3210040 Fax:86-756-3210049

アジア / 太平洋

インド - バンガロールTel:91-80-3090-4444 Fax:91-80-3090-4123

インド - ニューデリーTel:91-11-4160-8631Fax:91-11-4160-8632

インド - プネTel:91-20-3019-1500

日本 - 大阪Tel:81-6-6152-7160 Fax:81-6-6152-9310

日本 - 東京Tel:81-3-6880- 3770 Fax:81-3-6880-3771

韓国 - 大邱Tel:82-53-744-4301Fax:82-53-744-4302

韓国 - ソウルTel:82-2-554-7200Fax:82-2-558-5932 または 82-2-558-5934

マレーシア - クアラルンプールTel:60-3-6201-9857Fax:60-3-6201-9859

マレーシア - ペナンTel:60-4-227-8870Fax:60-4-227-4068

フィリピン - マニラTel:63-2-634-9065Fax:63-2-634-9069

シンガポールTel:65-6334-8870Fax:65-6334-8850

台湾 - 新竹Tel:886-3-5778-366Fax:886-3-5770-955

台湾 - 高雄Tel:886-7-213-7828Fax:886-7-330-9305

台湾 - 台北Tel:886-2-2508-8600 Fax:886-2-2508-0102

タイ - バンコクTel:66-2-694-1351Fax:66-2-694-1350

ヨーロッパ

オーストリア - ヴェルスTel:43-7242-2244-39

Fax:43-7242-2244-393

デンマーク - コペンハーゲンTel:45-4450-2828 Fax:45-4485-2829

フランス - パリTel:33-1-69-53-63-20 Fax:33-1-69-30-90-79

ドイツ - ミュンヘンTel:49-89-627-144-0 Fax:49-89-627-144-44

イタリア - ミラノ Tel:39-0331-742611 Fax:39-0331-466781

オランダ - ドリューネンTel:31-416-690399 Fax:31-416-690340

スペイン - マドリッドTel:34-91-708-08-90Fax:34-91-708-08-91

イギリス - ウォーキンガムTel:44-118-921-5869Fax:44-118-921-5820

各国の営業所とサービス

08/20/13