STM32WB – DMA & DMAMUX
ダイレクトメモリアクセス（DMA）コントローラ

DMA リクエストマルチプレクサ（DMAMUX）
1.0 版

STM32WB ダイレクトメモリアクセスコントローラ（DMA）のプレゼンテーションにようこそ。
ここでは、新しい DMA リクエストマルチプレクサ（DMAMUX）モ
ジュールによって強化された、DMA コントローラモジュールの主な機能の説明を行います。

1

概要
ペリフェラルリクエスト(36)DMAMUX
リクエスト 13DMAMUXDMAMUX
リクエスト 7

• プログラム可能なチャネルベース優先度• AHB マスタポート経由のデータ転送• DMA リクエストルータ（DMAMUX）x1

トリガ（20）
S

リクエストジェネレータ
（4）

リクエストマルチプレクサ（14）• プログラム可能なリクエストソース選択•DMA モードでペリフェラルから•

トリガからと内部生成• 同期モード：リクエストカウンタを用いて、同期入力から• リクエスト連鎖：リクエストカウンタを用いて、別のリクエスト／チャネルへの入力トリガあるいは同期であるイベントを生成S

同期（20）SAHB スレーブ

割込み（1）DMAMUX
リクエスト 6DMAMUX
リクエスト 0割込み（7）DMA2チャネル
7チャネル
1

アービタ

• 独立に設定可能でプログラム可能な同時 7 チャネル
ブロック転送AHB スレーブ

AHBマスタアービタ• それぞれ次の処理を実行可能な DMAコントローラ x2：

2AHB
マスタ

DMA1
チャネル
7チャネル
1

DMAMUX イベント（4）AHB スレーブ

割込み（7）

アプリケーション側の利点• メモリマップされた転送元からメモリマップされた転送先へのデータ転送に CPU をオフロード

アプリケーションにとっての DMA の主な利点は、あらゆるメモリマップされた転送元からあらゆるメモリマップされた転送先へのデータ転送に CPU をオフロードすることです。
STM32WB DMA の機能:
• 2 DMA コントローラ。DMA コントローラごとに次の処理が可能：
 プログラム可能な同時 7 チャネルブロック転送（チャネルごとに独立設定可能）
 プログラム可能なチャネルベース優先度 （バスマトリックスに接続された）AHB マスタポート経由のデータ転送• DMA リクエストルータ（DMAMUX）の機能：
 プログラム可能なリクエストソース選択：DMA モード
でペリフェラルから、あるいは、トリガ後に内部生成
 同期モード：DMAMUX リクエストカウンタを用いて同期入力（ハードウェアイベント）から
 リクエスト連鎖：DMAMUX リクエストカウンタを用いて、別のリクエスト／チャネルへの入力トリガあるいは同期であるイベントを生成2

STM32WB DMA & DMAMUX インスタンス
DMAMUX の機能

DMAMUX

ペリフェラルリクエストの数

36

リクエストジェネレータの数

4

トリガの数

20

同期の数

20

出力 DMA リクエストの数

14

DMA の機能
チャネル数

DMA の機能
チャネル数

3

DMA1
7

DMA2
7

ペリフェラルリクエストは 36 本、DMAMUX リクエストジェネレー
タは 4 個あります。
トリガと同期入力は 20 本あります。
DMA チャネル／リクエストは 14 本あります。

3

DMA コントローラ（1/3）

4• 1 個の DMA コントローラに個別に設定可能なチャネル• チャネルは、メモリからペリフェラルまたはペリフェラルからメモリへの転送において、ペリフェラルからの DMA ハードウェアリクエストに割当て可能です。
• あるいは、メモリ間転送におけるソフトウェアリクエストにチャネルを割り当てます。
• チャネルは優先順位レベルを付けてプログラムされます。
• チャネルはブロックレベルでのデータ転送回数に対してプログラムされます。

• ソフトウェアは、ブロック転送完了、ハーフブロック転送完了、転送エラーなどのプログラム可能なイベントに対する個別の割込みやフラグを通じてチャネルを制御• バスアクセスエラーの場合、障害のあるチャネルは自動的に無効となります。

DMA コントローラに焦点を合わせて説明します。
DMA コントローラのチャネルごとに個別に設定可能：• チャネルは、ペリフェラルからメモリまたはメモリからペリフェラルへのデータ転送において、ペリフェラルからの DMAハードウェアリクエストに割当て可能です。
• あるいは、メモリ間データ転送におけるソフトウェアリクエストにチャネルを割り当てます。
• チャネルは優先順位レベル付きでプログラムされます。
• チャネルはブロックレベルでのデータ転送回数に対してプログラムされます。

ソフトウェアは、ブロック転送完了、ハーフブロック転送完了、転送エラーなどのプログラム可能なイベントに対する個別の割込みやフラグを通じてチャネルを制御可能です。
バスアクセスエラーの場合、障害のあるチャネルは自動的に無効となります。

4

DMA コントローラ（2/3）

5• ブロックレベルでのプログラム可能なデータ転送• 転送元と転送先のデータサイズは独立：8bit、16bit、32bit• 転送元と転送先の開始アドレスは独立• 転送元と転送先のアドレスインクリメントは独立：連続インクリメントまたは固定アドレス• プログラム可能なブロック内転送データ数• 最大 65,535 個の転送元データ• ハードウェアにより自動デクリメント• サーキュラバッファモード（ペリフェラルとの連続データ転送）におけるブロック転送完了時：• 次のプログラムされた情報がハードウェアにより自動で再ロード：• ブロック内で転送されるデータ量• 転送元と転送先の開始アドレス

チャネルはブロックレベルでのデータ転送回数に対してプログラムされます。
• 転送元と転送先のデータサイズは独立• 転送元と転送先の開始アドレスは独立• 転送元と転送先のアドレスインクリメントは独立（連続インクリメントまたは固定アドレス）• プログラム可能なブロック内転送データ数
 最大 65,535 個の転送元データ
 ハードウェアにより自動デクリメント
サーキュラバッファモード（ペリフェラルとの連続データ転送）におけるブロック転送完了時：• プログラムされたブロック内転送データ数は、ハードウェアによって自動的に再ロードされます。
• 転送元と転送先の開始アドレスも同様です。

5

DMA コントローラ（3/3）

6• メモリ間モード• チャネルがこのモードで有効（ハードウェアリクエストなし）になると、直ちにブロック転送が開始されます。

• ペリフェラルからメモリモードおよびメモリからペリフェラルモード：• 1) チャネルが有効になり、かつ2) ペリフェラルが DMA ハードウェアリクエストを送信すると、直ちにブロック転送が開始されます。
• DMA ハードウェアリクエストによって、DMA データ転送が（1 つだけ）特定されます。
• 各データが転送先に正常に転送されると、DMA ハードウェアリクエストごとに DMA による速度調整と許可が行われます。

• 全モード：• データ転送ごとにチャネルアービトレーションが再評価されます。

メモリ間モードでチャネルが有効（ハードウェアリクエストなし）になると、直ちにブロック転送が開始されます。
その一方で、ペリフェラルからメモリモードおよびメモリからペリフェラルモードにおいて：• 1) チャネルが有効になり、かつ2) ペリフェラルが DMA ハードウェアリクエストを送信すると、直ちにブロック転送が開始されます。
• DMA ハードウェアリクエストによって、DMA データ転送が（1つだけ）特定されます。
• 各データが転送先に正常に転送されると、DMA ハードウェアリクエストごとに DMA による速度調整と許可が行われます。
どのモードでも、データ転送ごとにチャネルアービトレーションが再評価されます。

6

DMA 割込み

7• チャネルごとの割込みイベント
割込みイベント

説明

1/2 転送データブロックの半分が転送されたときにセット転送完了

ブロック転送が完了したときにセット転送エラー

データ転送中にエラーが発生したときにセットグローバル割込み

1/2 転送、転送完了、または転送エラーのイベントが発生したときに常にセットDMA チャネルごとに、次の 4 種類の起こり得るイベントによってトリガされた割込みをソフトウェアに通知可能です。
• ハーフブロック転送完了• ブロック転送完了• 転送エラー• 上記 3 イベントのいずれか（グローバル）

7

DMAMUX ブロック図

8DMA リクエストマルチプレクサチャネル 13
チャネル xチャネル 0

ペリフェラルリクエスト(36)

チャネル 3チャネル 2
トリガ入力(20)チャネル 120
チャネル 0

2

カウント カウント カウント カウント

DMA リクエストジェネレータDMA リクエスト
(14)

40

36
4

Sync&カウント

リクエストイベント
DMAMUX イベント
(2)

2
220

2

同期入力
(20)

DMAMUX には、リクエストマルチプレクサとリクエストジェネレー
タの 2 つの主なサブブロックがあります。
DMAMUX リクエストマルチプレクサにより、ペリフェラルからDMA コントローラへの DMA リクエストをルーティングすることができます。
ルーティング機能は、プログラム可能なマルチチャネル DMA リクエストマルチプレクサにより保証されます。
各チャネルは、DMAMUX 同期入力のイベントで無条件に、または同期的に一意の DMA リクエストを選択します。
DMAMUX は、入力トリガ信号のプログラム可能なイベントからの DMA リクエストジェネレータとしても使用できます。
DMA リクエストマルチプレクサチャネルは、DMA コントローラに対するリクエストと、同期入力としてもトリガ入力としても使用可
能なイベントの両方を生成します。
DMA リクエストジェネレータチャネル（0～3）のことを、DMA リクエストマルチプレクサチャネル（0～13）と混同しないようにしてください。

8DMAMUX リクエストマルチプレクサ（1/6）

9• 各マルチプレクサチャネルに対して• 設定レジスタ：DMAMUX_CxCR• プログラム可能な入力リクエスト選択（DMAREQ_ID フィールド経由）• DMA モードで動作しているペリフェラルからのリクエストごとに、DMAREQ_ID が割り当てられます。
• DMAREQ_ID = 0 は、DMA リクエストが選択されていない状態に相当します。

• このチャネルと、それがルーティングされる DMA コントローラが設定された後に、DMA チャネルが有効になることができます。
• 同じ DMA リクエスト入力を 2 つの異なるチャネルに設定することはできません。

マルチプレクサチャネルごとに設定レジスタがあります。
DMAMUX_CxCR• プログラム可能な入力リクエスト選択（DMAREQ_ID フィールド経由）
 DMA モードで動作しているペリフェラルからのリクエストごとに、DMARAQ_ID が割り当てられます。
 DMAREQ_ID = 0x00 は、DMA リクエストが選択されていない状態に相当します。
• このチャネルと、それがルーティングされる DMA コントローラが設定された後に、DMA チャネルの有効化が可能となります。同じ DMA リクエスト入力を 2 つの異なるチャネルに設定することはできません。

9

DMAMUX リクエストマルチプレクサ（2/6）

10• 各マルチプレクサチャネルに対して• 内蔵 DMA リクエストカウンタ• プログラム可能（NBREQ フィールド経由）• 処理された DMA リクエストによって、プログラムされた DMA リクエストカウンタがデクリメントされます。アンダーラン時には：• NBREQ フィールドにプログラムされた値にDMA リクエストカウンタが自動的に再ロードされます。

• アンダーラン時には、DMAMUX イベントの生成が可能です。
• 有効化されている場合（EGE フィールド経由）• （チャネル 0 と 1 からの）2 つの DMAMUX イベントがループバックされ、トリガ入力および同期入力として DMAMUX に接続されます。
• これによって、同期やトリガを通じて、リクエストが別の異なる DMA チャネルに連鎖できます。

各マルチプレクサチャネルに対して：• 内蔵 DMA リクエストカウンタが（NBREQ フィールド経由で）プログラム可能です。
• 処理された DMA リクエストによって、プログラムされた DMAリクエストカウンタがデクリメントされます。アンダーラン時には、NBREQ フィールドにプログラムされた値に DMA リクエストカウンタが自動的に再ロードされます。
• アンダーラン時には、有効化されている場合（EGE フィールド経由）、DMAMUX イベントの生成が可能です。
• （チャネル 0 と 1 からの）2 つの DMAMUX イベントがループバックされ、トリガ入力および同期入力として DMAMUX に接続されます。これによって、同期やトリガを通じて、リクエストが別の異なる DMA チャネルに連鎖できます。

10

DMAMUX リクエストマルチプレクサ（3/6）

11• 各マルチプレクサチャネルに対して• （SE フィールド経由でプログラムされた）2 種類の動作モード• 無条件モード：入力リクエストがそのまま出力• 同期モード：いくつかのリクエストがグループ化されて遅延／同期されます。

各マルチプレクサチャネルに対して、（SE フィールド経由でプログラムされた）2 種類の動作モードがあります。
• 無条件モード：入力リクエストがそのまま出力されます。
• 同期モード：いくつかのリクエストがグループ化されて遅延／同期されます。

11

DMAMUX リクエストマルチプレクサ（4/6）
無条件モード

12• DMAMUX_CxCR の設定例：SE=0、NBREQ=4、EGE=1要求されたデータ転送が DMA コントローラによって処理選択された DMA
リクエスト

出力 DMAリクエスト

DMA リクエストカウンタ

43

2

104
カウンタアンダーラン： イベント生成

DMA イベント
出力

リクエストマルチプレクサチャネルが無条件（SE=0）に設定されている場合、DMA リクエストはそのまま、DMA コントローラによって速度調整された通りに送信されます。
DMA コントローラがデータ転送を完了すると、DMA リクエストがデアサートされて、内蔵 DMA リクエストカウンタがデクリメントされます。
カウンタのアンダーラン時には、EGE フィールド経由で有効化されている場合、イベントの生成が可能です。

12

DMAMUX リクエストマルチプレクサ（5/6）
同期モード

13

• 同期モードでは、追加で• リクエストが次のもので条件付けされます。
• プログラム可能な同期入力選択（SYNC_ID フィールド経由）• プログラム可能な同期イベント：なし／立ち上がりエッジ／立ち下がりエッジ／両エッジ（SPOL フィールド経由）• イベント生成にも使用可能な単一の内蔵リクエストカウンタ（NBREQ フィールド経由）• 同期イベント後• 出力 DMA リクエストは保留中の入力リクエストに接続• カウンタアンダーラン時• DMA 出力リクエストはマルチプレクサチャネル入力から切断• 同期オーバーランフラグ（DMAMUX_CSR の SOFx）が報告されます。
• カウンタアンダーランの前に新しい同期イベントが発生した場合• （SOIE フィールド経由で）有効になっている場合に割込みを生成

同期モードでは、追加で：• リクエストが条件付けされる： プログラム可能な同期入力選択（SYNC_ID フィールド経由）
 プログラム可能な同期イベント：なし／立ち上がりエッジ／立ち下がりエッジ／両エッジ（SPOL フィールド経由）
 イベント生成にも使用可能な単一の内蔵リクエストカウン
タ（NBREQ フィールド経由）• 同期イベント後：
 出力 DMA リクエストは保留中の入力リクエストに接続• カウンタアンダーラン時： DMA 出力リクエストはマルチプレクサチャネル入力から切断• 最後に、同期オーバーランフラグ（DMAMUX_CSR の SOFx）が報告される：
 カウンタアンダーランの前に新しい同期イベントが発生した場合
 （SOIE フィールド経由で）有効になっている場合に割込みを生成

13

DMAMUX リクエストマルチプレクサ（6/6）
同期モード
•

14

DMAMUX_CxCR の設定例：SE=1、NBREQ=4、EGE=1要求されたデータ転送が DMA コントローラによって処理選択された DMAリクエスト
同期入力
同期イベント：出力リクエストが入力に接続される
出力 DMA リクエスト

DMA リクエスト
カウンタ

カウンタアンダーラン：
出力リクエストが入力から切断される

43

2

10

4

同期オーバーフローウィンドウDMA イベント
出力

カウンタアンダーラン： イベント生成

DMAMUX チャネルが同期モードに設定されている場合、その動作は以下のようになります。
リクエストマルチプレクサ入力（ペリフェラルからの DMA リクエスト）は保留とすることが可能であり、同期イベントを受け取るまでは DMAMUX リク
エストマルチプレクサ出力に転送されません。
その後、リクエストマルチプレクサはその入力と出力を接続し、すべてのペリフェラルリクエストが転送されます。
転送と許可が行われた DMA リクエストごとに、（規定されたプログラム値に設定されている）リクエストマルチプレクサカウンタをデクリメントします。
カウンタがゼロに達すると、DMA コントローラとペリフェラルの間の接続は切断され、新しい同期イベントを待ちます。
カウンタがアンダーランするたびに、リクエストマルチプレクサがオプションのイベントを生成して、2 番目の DMAMUX リクエストマルチプレクサチャネルの同期やトリガを行うことができます。
同じイベントが、CPU の介入なくシステムを STOP モードに戻す一部の低電力シナリオで使用することができます。
同期モードは、たとえば、データ転送をタイマに自動同期させたり、同期入力としてマッピングされているあらゆるペリフェラルイベントからの転送を条件づけたりするために使用することができます。
加えて、同期オーバーフローによって、プログラムされている数の DMA リクエストが 2 つの同期イベントの間に完了していない場合に、ソフトウェアへの通知を行えます。
14

DMAMUX リクエストジェネレータ（1/2）

15• 各チャネルに対して• DMA リクエストがトリガイベントの後に生成可能です。DMAMUX リクエストマルチプレクサチャネルの入力として選択されます（DMAMUX_CxCR の DMAREQ_ID フィールド経由）。
• （GE フィールドによって）有効化されている場合、設定レジスタ DMAMUX_RGxCR 経由で次のものによってリクエストが生成されます。
• プログラム可能なトリガ入力選択（SIG_ID フィールド経由）• プログラム可能なトリガイベント：なし／立ち上がりエッジ／立ち下がりエッジ／両エッジ（GPOL フィールド経由）• 内蔵リクエストカウンタが（GNBREQ フィールド経由）• 処理された DMA リクエストによって、プログラムされたリクエストカウンタがデクリメントされます。
• アンダーラン時には：• GNBREQ フィールドにプログラムされた値にリクエストカウンタが自動的に再ロードされます。
• リクエストジェネレータは、リクエストの生成を停止します。

• トリガオーバーランフラグ（DMAMUX_RGSR の OFx）が報告されます。
• カウンタアンダーランの前に新しいトリガイベントが発生した場合• （OIE フィールド経由で）有効になっている場合に割込みを生成

各リクエストジェネレータチャネルに対して：
DMA リクエストがトリガイベントの後に生成可能であり、DMAMUX リクエ
ストマルチプレクサチャネルの入力として選択されます（DMAMUX_CxCRの DMAREQ_ID フィールド経由）。
• （GE フィールドによって）有効化されている場合、設定レジスタ
DMAMUX_RGxCR 経由で次のものによってリクエストが生成されます。
 プログラム可能なトリガ入力選択（SIG_ID フィールド経由）
 プログラム可能なトリガイベント：なし／立ち上がりエッジ／立ち下がりエッジ／両エッジ（GPOL フィールド経由）
 内蔵リクエストカウンタが（GNBREQ フィールド経由）• 処理された DMA リクエストによって、プログラムされたリクエストカウンタがデクリメントされます。
• アンダーラン時には：
 GNBREQ フィールドにプログラムされた値にリクエストカウンタが自動的に再ロードされます。
 リクエストジェネレータは、リクエストの生成を停止します。
• トリガオーバーランフラグ（DMAMUX_RGSR の OFx）が報告されます。
 カウンタアンダーランの前に新しいトリガイベントが発生した
場合
 （OIE フィールド経由で）有効になっている場合に割込みを生成
15

DMAMUX リクエストジェネレータ（2/2）•16

DMAMUX_RGxCR の設定例：GE=0、GPOL=1、GNBREQ=3要求されたデータ転送が DMA コントローラによって処理

トリガ入力
トリガイベント：リクエスト生成開始

トリガイベント：リクエスト生成開始

生成されたDMA リクエスト
カウンタアンダーラン：
リクエスト生成停止

カウンタアンダーラン：
リクエスト生成停止

DMA リクエスト
カウンタ

3

2

10

トリガオーバーフローウィンドウ3
トリガオーバーフローウィンドウ

トリガイベント発生時に、プログラムされた数の DMA リクエスト（GNBREQ+1）が生成されます。
GNBREQ+1 回のリクエストの前にトリガイベントが 2 回発生し、データ転送が完了した場合、トリガオーバーフローが発生することがあります。

16DMAMUX リクエストマルチプレクサ入力
DMAREQ_ID

リソース

DMAREQ_ID

1dmamux_req_gen0

22

TIM1_CH2

2

dmamux_req_gen1

23

TIM1_CH3

3

dmamux_req_gen2

24

TIM1_CH4

4

dmamux_req_gen3

25

TIM1_UP5

ADC126

TIM1_TRIG

6

SPI1_RX27

TIM1_COM

7

SPI1_TX

28

TIM2_CH18

SPI2_RX29

TIM2_CH29

SPI2_TX30

TIM2_CH3

10

I2C1_RX31

TIM2_CH4

17リソース

11

I2C1_TX

32

TIM2_UP

12

I2C3_RX33

TIM16_CH1

13

I2C3_TX

34

TIM16_UP

14

USART1_RX

35

TIM17_CH1

15

USART1_TX

36

TIM17_UP

16

LPUART1_RX

37

AES1_IN

17

LPUART1_TX

38

AES1_OUT

18

SAI1_A39

AES2_IN

19

SAI1_B

40

AES2_OUT20

QUADSPI21

TIM1_CH1

この表には、STM32WBのあらゆるチャネルに対するDMAMUX リクエストマルチプレクサ入力のマッピングが示されています。
リクエスト入力の割当ては、あらゆる DMAMUX リクエストマル
チプレクサチャネルに対する DMAREQ_ID (DMAMUX_CｘCRレジスタ)によりプログラムされます。
同じリクエスト入力は、異なる 2 つのチャネルに配置することはできません。

17

DMAMUX トリガ & 複数同期
SIG_IDSYNC_ID

リソース

SIG_IDSYNC_ID

リソース0

EXTI ライン 012

EXTI ライン 121EXTI ライン 113

EXTI ライン 132

EXTI ライン 214

EXTI ライン 143

EXTI ライン 315

EXTI ライン 154

EXTI ライン 416dmamux_evt05

EXTI ライン 517dmamux_evt16

EXTI ライン 618

LPTIM1_OUT

7EXTI ライン 719

LPTIM2_OUT

8EXTI ライン 89

EXTI ライン 910

EXTI ライン 1011

EXTI ライン 1118

この表には、あらゆるチャネルに対するトリガ入力と同期入力のSTM32WB のマッピングが示されています。
トリガ入力の割当ては、あらゆる DMAMUX リクエストジェネレー
タ x （DMAMUX_RGxCR レジスタ）の SIG_ID フィールドによりプログラムされます。
同期入力の割当ては、あらゆる DMAMUX リクエストマルチプレ
クサチャネル x （DMAMUX_CxCR レジスタ）の SYNC_IDフィールドによりプログラムされます。

18

DMAMUX 割込み

19• 各リクエストジェネレータチャネルに対する割込みイベント
割込みイベント
リクエストジェネレータトリガオーバーラン

説明
トリガ入力オーバーランが検出されたときにセット（その前に、DMAMUX リクエストジェネレータにより生成されたプログラムされた数の DMA リクエストが完了）• 各リクエストマルチプレクサチャネルに対する割込みイベント
割込みイベント
リクエストマルチプレクサ同期オーバーラン

説明
同期入力オーバーランが検出されたときにセット（その前に、プログラムされた数の送信された DMA リクエストまたは生成された DMAMUX イベントが完了）

DMAMUX リクエストジェネレータチャネルごとに、トリガオーバーランをソフトウェアに通知可能です。
DMAMUX リクエストマルチプレクサチャネルごとに、同期オーバーランをソフトウェアに通知可能です。

19

低電力モードでの DMA/DMAMUX
モード

20

説明

RUN

有効。

低電力 RUN

有効。

SLEEP

有効DMA/DMAMUX 割込みが CPU をウェイクアップ可能です。

低電力 SLEEP

有効。DMA/DMAMUX 割込みが CPU をウェイクアップ可能です。

STOP0/STOP1/STOP2

クロックトオフ & 停止。 DMA/DMAMUX レジスタは保持

STANDBY

パワーダウン状態です。DMA/DMAMUX は、STANBY モード終了後に再初期化する必要があります。

SHUTDOWN

パワーダウン状態です。DMA/DMAMUX は SHUTDOWN モード終了後に再初期化する必要があります。

この表には、電源モードに対応する DMA コントローラ とDMAMUX の状態が示されています。
SLEEP モードと低電力 SLEEP モードでは、DMA コントローラと DMAMUX は有効のままであり、たとえば、UART や I2C で受信した文字をメモリに転送した後に CPU をウェイクアップするためなどに使用できます。

20