STM32U5
DMA：リンクリスト
Rev 1.0

こんにちは。このプレゼンテーションでは、LPDMA と GPDMA がサポートするリンクリストの管理について説明します。

1リンクリスト• ダイレクトプログラミングモードの代わりに、リンクリストアイテム（LLI）のリストと呼ばれる転送リストによって、チャネルをプログラム可能• 各リンクリストアイテム（LLI とも呼ばれる）は、そのデータ構造によって定義される• チャネル x の次のリンクリストアイテム（LLIn+1）のデータ構造のメモリのベースアドレスは、以下の合計：• （静的）64 KB の整列リンクベースアドレス（DMA_CxLBAR など）• 前のリンクリストアイテム（LLIn）からのリンクアドレスオフセット（DMA_CxLLR の LA[15:2] フィールド）• LLI がリンクリストレジスタファイルに自動的に転送される• 各 LLI のデータ構造は固有で、2 つの連続するリンク間の差分に最小化される場合がある• リンクリストのデータ構造は、GPDMA_CxLLR の UT1、UT2、UB1、USA、UDA、および ULL ビット（存在する場合はさらに UB2 および UT3）の値に従ってアドレス指定される
2

DMA 転送を設定する最初の手法は、チャネルのメモリマップドレジスタを初期化することです。これをダイレクトプログラミングモードと呼びます。
ただし、同じチャネルは、進行中の転送が完了したときにのみ再設定できます。
ソフトウェアの転送準備を実行から切り離すには、リンクリスト手法がより便利です。
このリンクリストの各アイテムは、リンクリストアイテムまたは LLI と呼ばれます。
LLI はメモリに配置され、DMA チャネルレジスタにロードする設定値を含みます。したがって、DMA チャネルレジスタのプログラミングは間接的な操作になります。
チャネル x の次の LLIn+1 のデータ構造のメモリのベースアドレスは、チャネル x のリンクベースアドレス（スタティック値）と、前の LLn によって提供されるリンクアドレスオフセットの合計です。
各 LLI のデータ構造は固有で、初期化するチャネルレジスタのリストが含まれている場合があります。UT1、UT2、UB1、USA、UDA、および ULL（存在する場合はさらに UB2 および UT3）を使用することで、リンク中に更新するチャネルレジスタを選択できます。したがって、プログラムする必要があるのは、2 つの連続する LLI の差分のみです。

2リンクリストのデータ構造（LP/GP ch0 ~ 11）
メモリ
DMA のレジスタファイル
チャネル x のリンクリストレジスタファ
イル（LLI0 とも呼ばれる）

DMA_CxTR1

LLI1+DMA_CxTR1
DMA_CxTR2
DMA_CxBR1

DMA_CxTR2

DMA_CxSARDMA_CxBR1

DMA_CxDAR

DMA_CxSARDMA_CxLLR

DMA_CxDAR
DMA_CxLLR

LLI2

チャネル x のその他のレジスタ

DMA_CxTR1

DMA_CxLBAR

DMA_CxTR2

DMA_CxFCR

DMA_CxBR1

DMA_CxSR

DMA_CxSARDMA_CxCR

DMA_CxDAR

すべて Uxx = 1

DMA_CxLLR
グローバルレジスタ3

図の左部分は DMA のレジスタファイルを表します。右部分は、メモリに割り当てられた LLI 1 および 2 を表します。
この図では、LPDMA チャネル 0 ~ 3 と GPDMA チャネル 0 ~ 11 を使用したときのリンク操作について説明しています。
LLI1 のアドレスは、CxLBAR レジスタにプログラムされたベースアドレスと、CxLLR レジスタに存在するオフセットの合計です。
LLI n は、LLI n+1 の配置に使用するオフセットを提供します。
リンクが実行されると、LLI1 データ構造の設定値が読み出されてチャネル xのリンクリストレジスタファイルが更新されます。
後で LLI1 に関連する転送が完了すると、LLI2 のデータ構造がチャネル xのリンクリストレジスタファイルにロードされます。
この例では、すべての Uxx 制御ビットが 1 と想定しているので、チャネル xのリンクリストレジスタファイル全体が更新されます。

3条件付き更新とコンパクトメモリ
リンクリストのデータ構造（LP/GP ch0 ~ 11）
メモリレジスタ目的

リンク中にレジスタを更新するかどうかを決定する制御ビットDMA_CxTR1

制御レジスタ 1

DMA_CxLLR[UT1]

DMA_CxTR2

制御レジスタ 2

DMA_CxLLR[UT2]DMA_CxBR1

ブロックレジスタ 1

DMA_CxLLR[UB1]

すべてUxx = 1

LLIn
DMA_CxTR1
DMA_CxTR2

DMA_CxSAR

転送元アドレスレジスタ

DMA_CxLLR[USA]DMA_CxDAR

転送先アドレスレジスタ

DMA_CxLLR[UDA]

DMA_CxLLR

リンクリストのアドレスレジスタ

DMA_CxLLR[ULL]DMA_CxBR1
DMA_CxSARDMA_CxDAR
DMA_CxLLR

UT1=UB1=USA=0UT2=UDA=ULL=1LLIn+1
DMA_CxTR2
DMA_CxDAR
DMA_CxLLR

4CxLLR レジスタは、チャネル x のリンクリストレジスタファイルのどのレジスタをリンク中に更新するかをユーザが選択できる制御ビットを備えています。
右の例では、LLIn から LLIn+1 へのリンク時に CxTR2、CxDAR、および CxLLR レジスタのみが更新されると想定しています。
更新しないレジスタに関連する制御ビット（UT1、UB1、およびUSA）は 0 にクリアします。
更新するレジスタに関連する制御ビット（UT2、UDA、および ULL）は 1 にセットします。
更新するレジスタを選択するこの機能は、連続する LLI が共通の設定を共有している場合に、メモリ･フットプリントを最小化し、リンクを高速化する際に非常に役立ちます。
たとえば、同じソースペリフェラルから 2 つの連続した転送が実行される場合、ソースアドレスを再プログラムする必要はありません。

4

リンクリストのデータ構造（GP ch12 ~ 15）
メモリDMA のレジスタファイル
チャネル x のリンクリストレジスタファ
イル（LLI0 とも呼ばれる）

DMA_CxTR1
DMA_CxTR2
DMA_CxBR1
DMA_CxSARDMA_CxDAR
DMA_CxTR3
DMA_CxBR2DMA_CxLLR
チャネル x のその他のレジスタ
DMA_CxLBAR
DMA_CxFCR
DMA_CxSR
DMA_CxCR
グローバルレジスタ

LLI1+DMA_CxTR1
DMA_CxTR2
DMA_CxBR1DMA_CxSARDMA_CxDAR
DMA_CxTR3
DMA_CxBR2
DMA_CxLLR

すべて Uxx = 1

LLI2
DMA_CxTR1
DMA_CxTR2
DMA_CxBR1
DMA_CxSARDMA_CxDAR
DMA_CxTR3
DMA_CxBR2
DMA_CxLLR

5

この図では、GPDMA チャネル 12 ~ 15 を使用したときのリンク操作について説明しています。
これらのチャネルは、ブロックの繰り返し、バースト間オフセット、ブロック間オフセットなどの追加機能をサポートしており、CxTR3 および CxBR2 と呼ばれる 2 つのレジスタに依存します。
したがって、LLI のサイズは 8 フィールドに拡張されます。
リンク中に、すべての Uxx ビットが 1 にセットされると、チャネル xのリンクリストレジスタファイルの 8 つのレジスタは、メモリ内にあるLLI で更新されます。

5条件付きの更新とメモリの節約
リンクリストのデータ構造（GP ch12 ~ 15）
メモリ
LLI1

レジスタ

目的

リンク中にレジスタを更新するかどうかを決定する制御ビット

DMA_CxTR1

制御レジスタ 1

DMA_CxLLR[UT1]

DMA_CxTR2

制御レジスタ 2

DMA_CxLLR[UT2]DMA_CxBR1

ブロックレジスタ 1

DMA_CxLLR[UB1]

DMA_CxSAR

転送元アドレスレジ
スタ

DMA_CxLLR[USA]DMA_CxDAR

転送先アドレスレジ
スタ

DMA_CxLLR[UDA]

DMA_CxTR3

制御レジスタ 3

DMA_CxLLR[UT3]LLI2

DMA_CxBR2ブロックレジスタ 2

DMA_CxLLR[UB2]DMA_CxLLR

リンクリストのアドレ
スレジスタ

DMA_CxLLR[ULL]DMA_CxTR2
DMA_CxDAR
DMA_CxLLR

すべて Uxx = 1

DMA_CxTR1
DMA_CxTR2
DMA_CxBR1DMA_CxSARDMA_CxDAR
DMA_CxTR3
DMA_CxBR2
DMA_CxLLR

UT1=UB1=USA=UT3=UB2=0
UT2=UDA=ULL=16

チャネル 12 ~ 15 の CxLLR レジスタは、UT3 と UB2 の 2 つの追加ビットをサポートします。これらは、リンク中に CxTR3 レジスタとCxBR2 レジスタを更新するかどうかを決定するために使用されます。
右の例では、LLIn から LLIn+1 へのリンク時に CxTR2、CxDAR、および CxLLR レジスタのみを更新すると想定しています。
更新しないレジスタに関連する制御ビット（UT1、UB1、USA、UT3、および Ub2）は 0 にクリアします。
更新するレジスタに関連する制御ビット（UT2、UDA、および ULL）は 1 にセットします。

6

チャネル（リンクリスト）による通常/完了までの実行モード（LSM=0）のプログラミング
チャネルの状態 = IDLE
DMA チャネルの初期化

DMA チャネルの再設定

DMA チャネルの有効化

チャネルの状態= ACTIVE

ユーザ設定は正しい？

N

Y

BNDT != 0 ?

USEF = 1 を設定
DMA チャネルの無効化

NY

レジスタファイルからのデータ転送を1 回実行転送エラーなし？

N

Y
N

DTEF = 1 を設定
DMA チャネルの無効化

LLR != 0 ?
Y

次の LLI のロード
（レジスタファイルへ）転送エラーなし？

NY

ユーザ設定は正しい？
Y

N

ULEF = 1 を設定
DMA チャネルの無効化

USEF = 1 を設定
DMA チャネルの無効化

TCF = 1 を設定
DMA チャネルの無効化

終了

7

この図は、完了までの実行モードでの DMA チャネルの実行とそのレジスタのプログラミングを示します。
このモードでは、LLI の全シーケンスが、ソフトウェアの介入なしで DMA によって処理されます。
最初の LLI は、BNDT = 0 によって示されるように、リンクのみを実行する場合があります。
BNDT は Block Number of Data bytes to Transfer（転送するデータバイトのブロック数）の略です。
データ転送が完了すると、LLR レジスタが NULL 以外の場合、リンクが発生します。その後、次の LLI がロードされ、繰り返しが発生します。「ユーザ設定は正しい？」と「レジスタファイルからのデータ転送を 1 回実行」の間にある「はい」の矢印を参照してください。
LLR を値 0 で初期化すると、チャネル転送は現在アクティブな LLI の最後に完了します。
DMA コントローラは、ソフトウェアによって実行された初期化を解析し、設定エラーが発生した場合に USEF と呼ばれるフラグを立てます。
DMA コントローラは、データ転送中にエラーが発生した場合に DTEF と呼ばれるフラグを立て、リンク中にエラーが発生した場合に ULEF と呼ばれるフラグを立てます。
チャネル転送が正常に完了すると、TCF フラグが 1 にセットされます。

7

LSM を加味したチャネル（リンクリスト）プログラ
ミング
チャネルの状態 = IDLE

DMA チャネルの初期化

DMA チャネルの再設定

DMA チャネルの有効化

チャネルの状態 =ACTIVE

ユーザ設定は正しい？

N

Y

BNDT != 0 ?

USEF = 1 を設定
DMA チャネルの無効化

NY

レジスタファイルからのデータ転送を1 回実行
転送エラーなし？

NY
N

DTEF = 1 を設定
DMA チャネルの無効化

LLR != 0 ?
Y

次の LLI のロード（レジスタファイルへ）転送エラーなし？

NY

ユーザ設定は正しい？
Y
N

LSM=1?

N

ULEF = 1 を設定
DMA チャネルの無効化

USEF = 1 を設定
DMA チャネルの無効化

Y

TCF = 1 を設定
DMA チャネルの無効化

8終了

この図は、実行モード（完了まで実行またはリンクステップ）にかかわらず、全体的かつ統合された GPDMA のリンクリストのプログラミングを示します。
チャネルが無効になっているときに、ソフトウェアでチャネルを再設定したり、実行モードを更新して完了まで実行モードとリンクステップモードを切り替え可能です。
LSM が 1 の場合、自動繰り返しはありません。現在の LLI のデー
タ転送とリンクが実行されたときに、チャネル転送が完了します。
次の LLI を処理するためには、ソフトウェアで可能な再設定を行った後、チャネルを再び有効化します。

8© STMicroelectronics - All rights reserved.
ST logo is a trademark or a registered trademark of STMicroelectronics International NV or its affiliates in the EU and/or other countries.
For additional information about ST trademarks, please refer to www.st.com/trademarks.
All other product or service names are the property of their respective owners.

このプレゼンテーション以外に、GPDMA および LPDMA に関する他のプレゼンテーションを参照できます。
- DMA の概要
- DMA 転送のハードウェアビューとソフトウェアビュー
- 自律 DMA と低消費電力モード- DMA のサーキュラバッファリングとダブルバッファリング- DMA の 2 次元アドレス- DMA のレジスタファイル- DMA のエラーレポート- DMA の入出力 LLI 制御

9