STM32G0 - DMA
ダイレクト･メモリ･アクセス（DMA）コントローラ
レビジョン 1.0

STM32 ダイレクトメモリアクセスコントローラ（DMA）のプレゼ
ンテーションへようこそ。ここでは、STM32 ペリフェラルデータ転送を処理するために広く使用されているこのモジュールの主な機能について説明します。

1概要

2

STM32G0
シングルサイクル I/O

Cortex®-M0+

GPIOポート･レジスタ
AHB -Lite

AHB -Lite

SRAM
Flash メモリ･コントローラ

バス
マトリック
ス

DMA + DMAMUX
7 チャネル
マスタ
ポート
メモリマッ
プレジスタ

AHB -Lite

スレーブポート

AHB -Lite

CRC

AES

スレーブポートFlashメモリ

EXTI
AHB -Lite
RCC

DMA リクエスト

メモリ
マップ
レジスタ

RNG

AHBからAPB
へのブリッジ

APB•••••••
•••
•
••••

APBペリフェラル：
SYSCFGADC
DACCOMP1-2
TI M1-3 、 6-7 、 1417
LPTIM1-2
UCPD1-2
WDG、WWDG
RTC、PWR
I2C1-2
USART1-4
LPUART
SPI1/I2S、SPI2
HDMI-CEC
DBGMCUSTM32G0 マイクロコントローラに組み込まれたダイレクトメモ
リアクセス（DMA）は、ペリフェラルとメモリ間、およびメモリ間でハイスピードデータ転送を行うために使用します。DMA により、CPU を動作させずに、データを高速で移動することができます。
これによって CPU リソースを他の動作のために確保できます
DMA チャネルは、次のようなメモリにマップされた場所にアクセスできます。
• AHB ペリフェラル（CRC 生成回路など）、• AHB メモリ（SRAM など）、
• APB ペリフェラル（USART ペリフェラルなど）。

2概要
DMA + DMAMUX
7 チャネル• DMAの機能

マスタポートAHB -Lite

スレーブポート

AHB -Lite

DMA_Channel4-5-67_DMAUX_IRQ

DMA_Channel2-3_IRQ

DMA_Channel1_IRQ

メモリマップレジスタ

3• AHBマスタバス• 柔軟性の高い設定• ハードウェアとソフトウェアの優先順位の管理• 設定可能なデータ転送モード• ペリフェラルからペリフェラル、ペリフェラルからメモリ、メモリからペリフェラル、およびメモリからメモリの各モード

DMA リクエスト

アプリケーション側の利点
NVIC
Cortex®-M0+•••

タイマ、ADC、および通信ペリフェラルのDMAサポート
データ転送管理によるCPUの負荷を軽減
シンプルな統合

DMA コントローラは 2 つの AHB-Lite ポートをサポートします。1 つはDMA チャネルが使用するマスタポートで、メモリマップされたアドレス領域、メモリ、またはペリフェラルレジスタに DMA チャネルが自律的にアクセスするために使います。もう 1 つは DMA コントローラ制御およびステータスレジスタへのアクセスを提供するスレーブポートです。
ほとんどの APB ペリフェラルは、DMA リクエストを発行するように設定できます。これは特に、通信ペリフェラルやコンバータ（ADC および DAC）に特に役立ちます。たとえば、ADC コントローラに注目してみましょう。これは、内部 FIFO に一時的に格納されているサンプルを取得します。これらのサンプルを SRAM のバッファに転送するために、STM32G0 は 2 つの方法を提供します。1 つは、ソフトウェアによって割込みリクエストを発行してFIFO からメモリにサンプルを転送する方法、もう 1 つは DMA チャネルを利用して FIFO を空にし内容を SRAM のバッファに転送する方法です。2つ目のソリューションは、CPU の負担を大幅に軽減することができます。
DMA コントローラには、ネスト化されたベクタ割込みコントローラ（NVIC）に接続された 3 つの割込み出力があります。
DMA リクエストバスは、APB ペリフェラルによって発行されたリクエストの集合です。これらのリクエストの DMA チャネルへのマッピングは、DMA リクエストマルチプレクサ（DMAMUX）ユニットによって実行されます。
タイマイベントを使用して、周期的に DMA 転送をトリガすることも可能です。
3機能4• STM32G0 DMAの機能• 7本の同時チャネル（個別に設定可能）によるプログラム可能なブロック転送
ペリフェラルリクエスト• プログラム可能なチャネル･ベース（57）の優先順位
トリガ（23）S• AHBマスタ･ポート（バス･マトリックスに接続）を介したデータ転送• 1x 新規の DMAリクエスト･マルチプ
レクサ（DMAMUX）• DMAリクエストのプログラム可能なマッピング（ペリフェラルなどから）• イベント･トリガ型および同期型のDMAリクエスト生成

AHB スレーブ

割込み（1）

AHB スレーブ

DMAMUX

割込み（3）

DMA
チャネル 7

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

アービタ

• 1x DMAコントローラ

DMA リクエスト（ 7）

リクエストマルチプレク
サ（7）

AHB
マスタ

チャネル 1SDMAMUX
イベント（4）S
同期（23）DMA 転送の処理は、DMA リクエストマルチプレクサ（DMAMUX）と DMA コントローラの 2 つのユニットが担当します。
DMA コントローラは、転送元アドレスから転送先アドレスにデータを転送し、チャネル間の優先順位を管理します。
DMAMUX では、チャネルにリクエストをマッピングすることが可能です。また、トリガと同期も処理します。DMAMUX については、専用のプレゼンテーションで説明します。

4

主な機能

5

• 7本の個別に設定可能なチャネル• 各チャネルは、転送元と転送先の間に単方向転送リンクを備えている• 各ストリームでのハードウェア･リクエストまたはソフトウェア･トリガ• 優先順位はソフトウェアでプログラム可能（レベルが等しい場合はハードウェアによって優先順位が決まる）• 独立した柔軟性の高いストリーム設定• 完全にプログラム可能な転送（データ･フォーマット、インクリメント･タイプ、およびアドレス）。
• 独立したストリーム割込みフラグ（1/2転送、転送完了、および転送エラー）• 循環バッファのサポート• エラーが発生した場合、欠陥のあるストリームは自動的に無効になる

DMA コントローラは、合計 7 本のチャネルを搭載し、それぞれが多数のペリフェラルからのメモリアクセスリクエストを管理する役割を担っています。各チャネルは柔軟性の高いハードウェ
アリクエストを備えており、ソフトウェアトリガもサポートしています。チャネルのソフトウェアの優先順位はプログラム可能であり、レベルが等しい場合はハードウェアの優先順位が使用されます。チャネルは個別に設定可能です。各チャネルは、転送元と転送先の両方について、独自のデータフォーマット、インクリメントタイプ、およびデータアドレスを持っています。
独立したチャネル割込みフラグにより、1/2 転送、転送完了、および転送エラーイベントをトリガできます。転送エラーが発生した場合、障害のあるチャネルは他のアクティブな DMA チャネルに影響を与えることなく自動的に無効になります。

5

個々のDMAストリームの柔軟性

6• プログラム可能な機能• 転送元と転送先で別々のデータサイズ（8/16/32ビット）• 転送元と転送先で別々の開始アドレス• 転送元と転送先で別々のポインタ･アドレス･インクリメント（連続インクリメント／固定アドレス）• プログラム可能な転送データ数：最大65,535リクエスト• 循環モード• 循環バッファや連続したデータ･フローを処理• 転送元および転送先のアドレスを自動的に再ロード• データ転送サイズを自動的に再ロード

チャネルごとに、転送元および転送先のデータサイズフォー
マットを、8、16、または 32 ビットのパケットに対して個別に設定可能です。転送元と転送先のアドレスおよびポインタのインクリメントも、個別に設定可能です。転送データサイズは、最大65535 バイトまで事前にプログラムできます。データの連続フローをサポートするために、循環バッファモードが利用可能です。転送が完了すると、転送元と転送先のアドレスおよび転送されるデータの数が自動的に再ロードされます。

6

ストリーム転送管理
ペリフェラルからペリフェラルへの転送の例

ペリフェラルからメモリへの転送の例

メモリからペリフェラルへの転送の例

SRAM

DAC

USART
DMA コントローラ

DMA コントローラ

ADC

DMA コント
ローラ

ADC

7

メモリからメモリへの転送の例
 ハードウェアリクエストなし
SRAM
DMA コント
ローラ

SRAM

Flash• ペリフェラルDMAリクエスト信号は、DMAリクエスト･ルータ（DMAMUX）を介してDMAコントローラ･ストリーム･リクエスト･ラインにルーティングされるメモリからメモリモードでは、ハードウェアリクエストなしに、あるアドレスの場所から別のアドレスの場所への転送が可能です。
ストリームを設定して有効にすると、すぐに転送が開始されます。ペリフェラルとの間でデータが転送される場合、選択されたペリフェラルからのハードウェアリクエストは、DMA ペリフェラ
ルポートでのデータ転送をトリガするために使用されます。転送が完了すると、リクエストが確認応答されます。

7

プログラム可能なデータ幅、データの整列、

8• PSIZEとMSIZEが等しくない場合、DMAはデータの整列を行う
転送元ポートの幅 = 32ビット
転送先ポートの幅 = 16ビット
データ転送回数 = 4

転送元ポートの幅 = 8ビット
転送先ポートの幅 = 32ビット
データ転送回数 = 4

転送元

アドレス

Bi

DMA

Bi

転送先

データ
[7:0]

アドレス

0xXXXX_XXX0

B0

0xXXXX_XXX0000000B0

0xXXXX_XXX1

B1

0xXXXX_XXX4000000B1

0xXXXX_XXX2

B2

0xXXXX_XXX8000000B2

0xXXXX_XXX3

B3

0xXXXX_XXXC

000000B3

データ[31:0]

転送元Bi

アドレス

データ[31:0]

0xXXXX_XXX0

B3B2B1B0

0xXXXX_XXX1

B7B6B5B4

0xXXXX_XXX2

BBBAB9B8

0xXXXX_XXX3

BFBEBDBC

DMABi

転送先

アドレス

データ[15:0]

0xXXXX_XXX0

B1B0

0xXXXX_XXX2

B5B4

0xXXXX_XXX4

B9B8

0xXXXX_XXX6

BDBC

DMA コントローラは、データをパックまたはアンパックしません。
転送元ポートが転送先ポートよりも狭い場合、データは転送先ポートの幅に基づいて転送先メモリで整列されます。左の例では、アライメントは 32 ビットです。そのため、転送元デバイスから受信した各バイトは、32 ビットワードアドレスに整列されます。
転送元ポートが転送先ポートよりも広い場合、データは転送先ポートの幅に合うように切り詰められます。右の例では、転送元デバイスから受信した 32 ビットワードが切り詰められ、16ビットの下位部分のみが転送先アドレスに書き込まれます。
転送元と転送先でポインタがインクリメントされる場合、インクリメントはポート幅に等しくなります。

8循環およびダブルバッファ･モード

9• 循環モード：• このモードでは、すべてのFIFO機能とDMAイベント（TC、HT、TE）が使用可能• データ項目の数が自動的に再ロードされ、転送が再開される• このモードはメモリからメモリへの転送では使用できない

転送完了
転送元

DMA

DMA_CCRx= 設定
DMA_CNDTRx レジスタ = 転送するデータの数
DMA_CPARx= ペリフェラルアドレス
DMA_CMARx= メモリアドレス

転送先

DMA_CCRx[CIRC]=0
循環モードは無効

DMA_CCRx[CIRC]=1
循環モードは有効

DMA_CCRx= 変更なしDMA_CNDTRx レジスタ = クリア済み
DMA_CPARx= 変更なしDMA_CMARx= 変更なし 新たな転送すべきデータ項目数を DMA_CNDTRx レジスタに再ロードするには、DMA チャネルを無効にする必要がある
DMA_CCRx= 変更なしDMA_CNDTRx レジスタ = 自動的に再ロード
DMA_CPARx= 自動的に再ロード
DMA_CMARx= 自動的に再ロード
 DMA リクエストが発行されると、自動的に転送が再開される

DMA コントローラは循環モードをサポートしており、一度に転送するデータ項目の数を設定し、転送完了イベント後に転送を自動的に再開できます。
これは、ADC スキャンモードなどの連続転送をサポートするのに便利です。
循環モードがアクティブな場合、ソフトウェアから認識できない現在の転送元および転送先のアドレスを含む内部レジスタは、
DMA_CPARx および DMA_CMARx レジスタから転送完了時に自動的に再ロードされます。

9

プログラム可能な優先度 = 低で設定されたチャネルの調停ロジック

DMAコントローラ

10

Channel1_req
Channel2_req
Channel7_req
プログラム可能な優先度 = 中で設定されたチャネルの調停ロジック

Channel1_req
Channel2_req
Channel7_req

プログラム可能な 2 ビット優先度に基づく調停ロジック
最高 > 高 > 中 > 低Winner_Prio_Low
Winner_Prio_Medium

プログラム可能な優先度 = 高で設定されたチャネルの調停ロジック

Channel1_req
Channel2_req

Winner_Prio_High

AHB-Lite マスタ
ポート

Winner_Prio_VeryHigh

Channel7_req
プログラム可能な優先度 = 最高で設定されたチャネルの調停ロジック

Channel1_req
Channel2_req
Channel7_req

DMA ストリームリクエスト間の優先順位は、ソフトウェアによってプログラム可能です（最高、高、中、および低の 4 レベル）。
レベルが等しい場合はハードウェアによって決まります（リクエスト 0 はリクエスト 1 よりも優先、など）です。
したがって、調停は 2 段階で実行されます。
第 1 段階では、同じ優先順位でプログラムされたすべてのチャネルの中から勝者が選ばれます。この調停は、プログラム可能な優先順位レベルごとに 1 回ずつ、合計 4 回インスタンス化されます。番号が最も小さいチャネルが、番号が最も大きいチャネルよりも優先されます。
第 2 段階では、異なる優先順位でプログラムされたすべてのチャネルの中から勝者が選ばれます。
チャネル調停は、すべてのデータ転送間で再検討されます。

10

割込み

11

• 各チャネルの割込みイベント
割込みイベント

説明

1/2 転送データ転送サイズの半分が完了したときにセットされる

転送完了

データ転送サイズのすべてが完了したときにセットされる

転送エラー

データ転送中にバスエラーが発生するとセットされる

各 DMA ストリームは、このような割込みイベントのグループを使用して設計されています。データの半分が転送されると、1/2転送割込みフラグがセットされます。転送が完了すると、転送完了フラグがセットされます。データ転送中にエラーが発生すると転送エラーフラグがセットされます。

11

低消費電力モードでのDMAモード

12

説明

RUN

アクティブ

低消費電力RUN

アクティブ

SLEEP

アクティブ。DMA割込みによりCPUをウェイクアップさせることができる

低消費電力SLEEP

アクティブ。DMA割込みによりCPUをウェイクアップさせることができる

STOP 0/STOP 1

クロックオフおよび停止。DMAレジスタ保持

STANDBY

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

SHUTDOWN

パワーダウン。DMAは、SHUTDOWNモード終了後に再初期化する必要がある

この表は、現在の電力モードに応じた DMA コントローラの状態を示しています。
SLEEP モードと低消費電力 SLEEP モードでは、DMA コント
ローラはアクティブなままであり、マイクロコントローラをウェイクアップするときに UART や I2C で受信したキャラクタをメモリに転送するために使用できます。

12

STM32F0との主な違い

13• DMAコントローラは STM32F0マイクロコントローラに実装されているものと似ているが、DMAリクエスト･マルチプレクサ（DMAMUX）が追加されている

DMA
DMA の機能DMAMUXSTM32F0

STM32G0

2 つのDMA

1 つのDMA
同じなし

はいSTM32G0 には、ペリフェラルによって発行された転送リクエス
トを DMA チャネルにマップする DMA リクエストマルチプレク
サ（DMAMUX）が含まれています。

13

関連ペリフェラル

14• 次のペリフェラルにリンクされているこれらのトレーニングを参照：• DMAリクエスト･マルチプレクサ（DMAMUX）

詳細については、DMA リクエストマルチプレクサ（DMAMUX）に関連するトレーニングスライドを参照してください。

14