STM32(5)-DMA コンセプトの詳細な分析

DMA は、大量のデータを送信する場合に、送信効率を向上させ、CPU の負荷を軽減できる非常に重要なテクノロジです。


1.DMAとは何ですか?

DMA、正式名: Direct Memory Access、つまりダイレクト メモリ アクセス。DMA 転送は、あるアドレス空間から別のアドレス空間にデータをコピーします。CPU が転送を開始すると、転送自体は DMA コントローラによって実行され、完了します。典型的な例は、外部メモリのブロックをチップ内のより高速なメモリ領域に移動することです。プロセッサーの作業を停止させる代わりに、このような操作を再スケジュールして、他の作業を処理することができます。DMA 転送は、高性能の組み込みシステム アルゴリズムとネットワークにとって重要です。DMA転送方式は、CPUが直接転送を制御する必要がなく、割り込み処理方式のようにシーンを保持・復元する処理がなく、ハードウェアを介してRAMやI/Oデバイスに直接データ転送路を開き、これにより、CPU の効率が大幅に向上します。
STM32 には最大 2 つの DMA コントローラがあり (DMA2 は高容量製品のみに存在します)、DMA1 には 7 チャネルがあります。DMA2 には 5 つのチャネルがあります。各チャネルは、1 つ以上の周辺機器からのメモリ アクセス要求の管理専用です。各 DMA リクエストの優先順位を調整するための調停もあります。
STM32 の DMA には次の特徴があります。
● 各チャネルは専用のハードウェア DMA リクエストに直接接続されており、各チャネルはソフトウェア トリガもサポートしています。これらの機能は
ソフトウェアによって設定されます。● 7 つのリクエスト間の優先度は、ハードウェアによって同じ優先度が決定されている場合(リクエスト 0 がリクエスト 1 より優先されるなど
)、ソフトウェア プログラミングによって設定できます(非常に高い、高い、中程度、低いの 4 つのレベルがあります)。

●独立したソースとターゲットのデータ領域の転送幅(バイト、ハーフワード、フルワード)をシミュレートし、パッキングとアンパッキングのプロセスをシミュレートします。送信元アドレスと
宛先アドレスは、データ転送幅に合わせて調整する必要があります。
●循環バッファ管理をサポート
●各チャネルには 3 つのイベント フラグ (DMA ハーフ転送、DMA 転送完了、DMA 転送エラー) があり、これら 3 つは
イベント フラグは論理 OR されて 1 つの割り込み要求になります。
●メモリとメモリ間の転送
●周辺ハードウェアとメモリ、メモリと周辺ハードウェアの転送
●フラッシュメモリ、SRAM、周辺ハードウェアのSRAM、APB1 APB2、AHB周辺ハードウェアをアクセス元とアクセス先として使用できます。
●プログラマブルデータ送信数:最大65536

第二に、DMA の役割

まずこの文を見てください: DMA は、CPU 介入なしで周辺機器とメモリ、またはメモリとメモリの間で高速データ転送を提供できます。

1. 記憶イメージ

マイクロコントローラーのメモリには ROM と RAM が含まれることがわかっています。
ROM (Read Only Memory) は読み取り専用メモリであり、一度保存されたデータは変更できません。マイクロコントローラーでは、プログラム コードと定数データを保存するために ROM がよく使用されます。
RAM (Random Access Memory) は、データの読み書きが可能なランダム アクセス メモリです。マイクロコントローラーでは、通常、プログラムの実行に必要なキャッシュされたデータと変数を保存するために RAM が使用されます。
STM32F103C8T6 を例に挙げます。
ここに画像の説明を挿入
ここでは主にフラッシュ、SRAM、周辺レジスタについて説明します。

(1) フラッシュメモリ

プログラム可能な不揮発性メモリであり、大容量の記憶容量が特徴で、電源がなくてもデータを長期間保存できます。マイクロコントローラーでは、通常、プログラム コードと定数データを保存するためにフラッシュ メモリが使用されます。プログラムコードと定数データは一度フラッシュに保存すると長期間保存でき、再度ロードする必要はありません。

(2)SRAM(スタティック ランダム アクセス メモリ)

これはスタティック ランダム アクセス メモリの一種で、通常はデータの一時的な保存に使用されます。読み取りおよび書き込み速度が速いという特徴がありますが、ストレージ容量は比較的小さく、データストレージを維持するには継続的な電源供給が必要です。シングルチップマイクロコンピュータでは、通常、プログラムの実行に必要なキャッシュデータや変数を保存するためにSRAMが使用されます。たとえば、定義された変数、配列、構造体などです。

(3) マイコン周辺レジスタ

これらはペリフェラルの制御と構成に使用されるレジスタで、通常はマイクロコントローラ内にあり、特定のアドレスと動作モードを通じてアクセスできます。
周辺レジスタの数と種類は、マイクロコントローラのモデルとメーカーによって異なります。共通のペリフェラル レジスタには次のものがあります
。 GPIO レジスタ: 汎用入力ポートと出力ポートのステータスと構成を制御するために使用されます。
タイマー レジスタ: タイマーの動作モード、カウンター値、および割り込みを制御および構成するために使用されます。
UART レジスタ: ボー レート、データ ビット、ストップ ビットなどのシリアル通信パラメータの制御と構成に使用されます。
SPI レジスタ: クロック レート、データ ビット数などの SPI 通信パラメータの制御および設定に使用されます。
ADC レジスタ: サンプリング レート、基準電圧などのアナログ - デジタル コンバータのパラメータを制御および設定するために使用されます。
PWM レジスタ: PWM 出力信号の周波数、デューティ サイクル、その他のパラメータを制御および構成するために使用されます。
外部割り込みレジスタ: 外部割り込みのトリガー モードと優先順位を設定および制御するために使用されます。

2. DMA ブロック図

ここに画像の説明を挿入
① ICode と DCode:
ICode は、CPU 命令を格納するために使用される命令メモリ (命令メモリ) を指します。通常、プログラムの命令コードを保存する読み取り専用メモリ (ROM) またはフラッシュ メモリ (フラッシュ) です。CPU は命令を実行する必要がある場合、ICode から命令を読み取って実行します。
DCODE はデータ メモリ (データ メモリ) を指し、データ メモリまたはデータ記憶領域とも呼ばれ、プログラムで使用される変数やデータを格納するために使用されるメモリです。通常、これは読み書き可能な一種のランダム アクセス メモリ (RAM) です。プログラムの実行中、CPU は変数とデータを DCODE に保存し、変数とデータの読み取りまたは変更が必要な場合、CPU は DCODE から読み取りと書き込みを行います。
ここに画像の説明を挿入
②バス: この図ではバスが多く使用されています。ここで紹介します。バス マトリックスは、CPU コア、メモリ、周辺機器を接続することにより、内部バスの接続と交換を実現します。
STM32 のバス マトリックスには通常、次の部分が含まれます。
AHB バス マトリックス: CPU コア、システム バス マトリックス、メモリなどの高速メモリを接続し、高帯域幅で低遅延のデータ伝送を実現するために使用されます。CPU、DMA、SRAM などの重要なシステム リソースに接続されています。
APB バス マトリックス: 周辺機器の接続に使用され、低帯域幅と高遅延のデータ送信を実現します。このうち、APB1 バスは GPIO、UART、SPIなどに接続されます。その主な周波数は通常、AHB バスの半分であり、低速データ送信と低パフォーマンスの動作に使用されます。APB2 バスは、USB OTG、SDIO、CANなど
の一部の特殊な周辺機器の高速バスを目的としています。その主な周波数は通常、高速データ伝送と高性能動作のために AHB バスの半分または 4 分の 1 です。
DMA バス マトリクス: DMA コントローラと内部バスを接続し、高速なデータ転送と複製を実現するために使用されます。
③DMAコントローラ
(1) DMA1 コントローラー
スレーブ ペリフェラル (TIMx[x=1, 2, 3, 4]、ADC1、SPI1、SPI/I2S2、I2Cx[x=1, 2]、および USARTx[x=1, 2, 3])論理和で生成された 7 つのリクエストが DMA1 コントローラに入力されます。つまり、同時に有効になるリクエストは 1 つだけです。次の図の DMA1 リクエスト マップを参照してください。
ペリフェラルからの DMA 要求は、対応するペリフェラル レジスタの制御ビットを設定することによって、独立してオンまたはオフにすることができます。
ここに画像の説明を挿入
(2) DMA2 コントローラは
ペリフェラル (TIMx[5、6、7、8]、ADC3、SPI/I2S3、UART4、DAC チャネル 1、2、および SDIO) から 5 つのリクエストを生成します。これらは論理的に、または DMA2 制御サーバーに入力されます。つまり、一度にアクティブにできるリクエストは 1 つだけです。以下の DMA2 リクエスト マップを参照してください。
ペリフェラルからの DMA 要求は、対応するペリフェラル レジスタの DMA 制御ビットを設定することによって、独立してオンまたはオフにすることができます。
ここに画像の説明を挿入

3. DMA データ転送のアイデア

例えば、温湿度センサーを使って温度や湿度の値を計測する場合、その値は実際にはCPUで処理された後、SRAMのアドレス空間に格納されます。従来のシリアル ポート構成です。このデータはシリアル ポートによって PC に出力できます。このプロセスは実際には、CPU が指定され保存されたアドレス空間を再度見つけ、その値を読み取り、データをシリアル ポート バッファに送信します。シリアル ポート ハードウェア モジュール バッファからデータを自動的に読み取って送信します。次に、温度と湿度を読み取り、シリアル ポートを介してデータを送信するプロセスでは、2 つの CPU プロセスが使用され、CPU が SRAM とシリアル ポート データ レジスタの間の仲介者として機能しました。
しかし、これではCPUの負担が大きくなるのは間違いなく、同時にデータ転送速度も速くないので、SRAMとレジスタ間のデータ交換にCPUを介さずに済むようにDMAを使うのが簡単です。

2. DMAの基本構造と関連パラメータ

江科大学の写真を拝借:
ここに画像の説明を挿入
DMA 構造では、コア部分はペリフェラル レジスタとメモリ間のデータ交換であり、これには方向、開始アドレス、データ幅、アドレスが自己であるかどうかなどのパラメータが含まれることがわかります。 -インクリメント、カウンター、リロード、M2M など、DMA はハードウェアまたはソフトウェアによってトリガーできます。M2M=1 の場合はソフトウェアによってトリガーされ、それ以外の場合はハードウェアによってトリガーされます。次に、DMA の構造を使用して以下を分析します。

typedef struct 
{
    
     
	u32 DMA_PeripheralBaseAddr; 
	u32 DMA_MemoryBaseAddr; 
	u32 DMA_DIR; 
	u32 DMA_BufferSize; 
	u32 DMA_PeripheralInc; 
	u32 DMA_MemoryInc; 
	u32 DMA_PeripheralDataSize; 
	u32 DMA_MemoryDataSize; 
	u32 DMA_Mode; 
	u32 DMA_Priority; 
	u32 DMA_M2M; 
} DMA_InitTypeDef;

DMA_PeripheralBaseAddr: このパラメータは、DMA ペリフェラルのベース アドレスを定義するために使用
されます。 DMA_MemoryBaseAddr: このパラメータは、DMA メモリのベース アドレスを定義するために使用され
ます。 DMA_DIR: ペリフェラルがデータ送信の宛先として使用されるかソースとして使用されるか (データ送信方向)、値を指定します。このパラメータの範囲は以下のとおりです。
ここに画像の説明を挿入
DMA_BufferSize: 指定された DMA チャネルの DMA バッファのサイズを定義するために使用されます。単位はデータ単位です。転送方向に応じて、データ単位は構造体のパラメータ DMA_PeripheralDataSize またはパラメータ DMA_MemoryDataSize の値と等しくなります。
DMA_PeripheralInc: ペリフェラルアドレスレジスタをインクリメントするかどうかを設定します。
DMA_MemoryInc: メモリアドレスレジスタをインクリメントするかどうかを設定します。
DMA_PeripheralDataSize: ペリフェラルデータ幅を設定します。このパラメータの値の範囲は以下のとおりです。
ここに画像の説明を挿入
DMA_MemoryDataSize: ペリフェラルデータ幅を設定します。このパラメータの値の範囲は以下のとおりです。
DMA_Mode: DMA の動作モードを設定します。このパラメータの値の範囲は以下のとおりです。
ここに画像の説明を挿入
注: 指定された DMA チャネル データ転送がメモリ間として設定されている場合、循環バッファ モードは使用できません。
DMA_Priority: DMA チャネル x のソフトウェア優先度を設定します。このパラメータの値の範囲は以下のとおりです。
ここに画像の説明を挿入
DMA_M2M: DMA チャネルのメモリ間転送を有効にします。このパラメータの値の範囲は以下のとおりです。
ここに画像の説明を挿入
DMAの構造体変数の設定情報です。

要約する

DMA は単なるテクノロジーであり、その最大の役割を果たすには特定の周辺機器と組み合わせる必要があります。次の記事では、DMA とシリアル ポートを使用してデータを送受信します。

おすすめ

転載: blog.csdn.net/qq_53092944/article/details/130666790