1、DMAプロフィール
DMA(ダイレクトメモリアクセス:ダイレクト・メモリ・アクセス)が大幅にCPUモードの負荷を軽減することができるデータ転送です。
CPUは、データ、計算、転送制御プログラム、および他の多くの機能を転送しますが、実際にデータを転送する(大量のデータの転送特に)CPUの介入を必要とすることはできませんしました。例えば、Bの周辺限り、ペリフェラルの二種類のデータ経路、プラス制御部材の一部移転などの周辺機器を所望のデータのコピーは、データのコピーが完了します。
DMAは、上記の設計に基づいてなされたものであり、その役割は、CPUリソースの過剰消費の問題を解決するために、大量のデータを転送することです。コンピューティング、制御等 - DMAよりより実用的な動作を中心にCPUを可能にします。
2、DMA作品
メモリ転送へのメモリの領域からのもので、DMAは、送信データの直接の作用であり、リンク除去従来のデータ伝送は、CPUレジスタ、主にデータ送信に4例参加を必要とするが、本質的に同じです別の領域(メモリユニットは、データレジスタメモリ周辺性質です)。データ転送以下のように4例は以下のとおりです。
メモリへのペリフェラル
メモリ - 周辺機器
メモリーへ
ペリフェラル・ツー・周辺機器
ユーザ設定パラメータは、主に、送信元アドレス、宛先アドレス、3つのデータ転送量に関連するとき、DMAコントローラがデータ転送を開始し、残りのデータボリュームのエンドポイントがゼロである(送信周期はそうではありません)。すなわち限り残りのデータ量はゼロではなく、DMAの状態が活性化され、その後、データ転送が発生します。
3、DMAはCPUの動作に影響を与えません
DMA動作(ここではUディスクにディスクからファイルをコピーすると仮定して)X86アーキテクチャシステムにおいて、DMAは、実際には、システム・バス・サイクルの時間の一部を占めます。DMAがオンされていない前に、換言すれば、システムバスは完全にCPUを使用することができる; DMAがオンされると、システム・バス動作を保証するために、同時にいくつかのDMA、DMAのための時間とCPUを割り当てます。だから、明らかに、DMAはCPU速度を低減します。
コントローラSTM32、のCortex-M3チップアーキテクチャでは、バス構造が大幅に最適化、DMAバス占有他されており、CPUのシステムバスと競合しません。これは、CPUの速度には影響しませんDMAを使用して、あります。
二、STM32 DMA構造
図1に示すように、DMAの主な特徴
●12個の独立した設定可能なチャンネル(リクエスト)DMA1は7つのチャンネル、DMA2 5つのチャネルを持っています
●各チャンネルには専用のハードウェアDMA要求に直接接続され、各チャネルは、ソフトウェアトリガをサポートしています。これらの機能により、
設定するためのソフトウェア。
●うち、要求優先度に提供されるソフトウェアによってプログラムすることができる7(4つのレベルの全高、高、中、低)、位相は、IF
アイソクロナス決定した優先度(優先順位0要求に要求1など)のハードウェアによって。
ソースおよび宛先データ領域(バイト、ハーフワード、ワード幅)の●独立した伝送幅、プロセスシミュレーションパッキング及びアンパッキング。送信元と送信先
アドレスは、データ転送幅に合わせなければなりません。
●サポート円形バッファ管理
●各チャネルは、3つのイベントフラグ(半DMA転送は、DMA転送が完了し、DMAがエラーを転送する)、3つのイベントフラグを有しています
単一の論理または割り込み要求に。
メモリとメモリの間●転送
●周辺機器やメモリ、メモリおよび周辺機器の送信
●フラッシュメモリ、SRAM、周辺機器のSRAM、APB1 APB2とAHB周辺機器は、送信元と宛先のアクセスとして使用することができます。
●データ伝送のプログラム可能な数:最大65536
以下は、機能ブロックです。
2、2つのDMAコントローラの構造
①DMA1コントローラ
②DMA2コントローラ
3、DMAレジスタリスト
①割り込みクラス
DMA_ISR:DMA割り込みステータスレジスタ
DMA_IFCR:DMA割り込みフラグがクリアされますレジスタ
説明:レジスタのDMA1、DMA2、それぞれ、セット。
②制御伝送クラス
DMA_CCRx:DMAチャネルコンフィギュレーションレジスタX
DMA_CNDTRx:データレジスタのDMAチャネルx個
DMA_CPARx:DMAチャンネルはペリフェラルアドレスレジスタをxは
DMA_CMARx:DMAチャンネルXメモリアドレスレジスタ
説明:
1>各チャネルはレジスタのセットを有します。
2> DMA_CPARx、DMA_CMARxは何の違いはありません、彼らは、ストレージ周辺機器、メモリアドレスをアドレス指定することができます。DMA_CPARxは、DMA_CMARx名はちょうどだけ差があるまで取得します。
4、STM32 DMAの作業フィーチャ
必要な条件①DMAデータ転送
残りの送信データが0より大きい
DMAチャネル転送が可能
通道上DMA数据传输有事件请求
前两者都好理解,对于第三点确实需要详细的解释,请看下边的三条。
② 外设到XX方向的传输
假设是ADC到存储器的数据传输,显然ADC的DMA传输的源地址是ADC的数据寄存器。并不是说只要DMA通道传输使能后,就立即进行数据传输。只有当一次ADC转化完成,ADC的DMA通道的传输事件有效,DMA才会从ADC的数据寄存器读出数据,写入目的地址。当DMA在读取ADC的数据寄存器时,同时使ADC的DMA通道传输事件无效。显然,要等到下一次ADC转换完成后,才能启动再一次的数据传输。
③存储器对XX的DMA传输
因为数据是准备好的,不像ADC还需要等待数据到位。所以,不需要对应通道的事件。只要使能DMA数据传输就一直传输,直到达到设定的传输量。
example:
1.内存到内存
DMA传输请求一直有效
2.内存到串口
DMA传输请求一直有效
一种解释:
存储器对存储器的置位,就相当于相应通道的事件有效。 对应通道的事件有效和存储器对存储器的置位,就是传输的触发位。每次传输的事件置位一次,完成一次传输。如果是由外设引发的DMA传输,则传输完成后,相应传输事件会置为无效,而存储器对存储器的传输,则一次传输完成后,相应事件一直有效,直至完成设定的传输量。
④外设以DMA方式工作时,能否再以软件方式进行操作?
有一点是肯定的,当外设以DMA方式正在数据传输时,不可能再相应CPU的软件控制命令,否则这不符合逻辑。
但是,倘若外设仅仅配置成DMA工作方式,但是DMA请求并未产生,数据传输并没有进行。此时,软件控制命令仍然能够对外设进行控制。这是笔者在串口以DMA方式发送数据情形下,所得到的测试结论。
三、STM32的DMA软件编程
1、“内存到内存”模式传输
2、利用DMA实现循环传输
方法1:单次传输模式
当传输结束时,触发DMA中断,在中断程序中首先失能DMA通道,然后修改该通道的传输数据量。最后重新使能DMA通道,注意只有失能的DMA通道才能成功修改传输数据量。
方法2:循环传输模式
当传输结束时,硬件自动会将传输数据量寄存器进行重装,进行下一轮的数据传输。
四、再谈STM32的DMA传输是否影响CPU的运行速度
声明:经过笔者测试,当DMA工作在内存到外设的传输和内存到内存的传输时,都不会影响CPU的运行速度。为了给这种现象一个合理的解释,笔者做以下猜测:
1、S3C2440的DMA传输
S3C2440的SDRAM是外置的,并且SDRAM的数据线、地址线、控制线总共只有一组。假设DMA传输的方向是内存到外设,当DMA运作时,需要占用SDRAM的三类线才才能实现传输;而与此同时CPU也需要通过这三类线来访问SDRAM来读取程序、读写数据。
显然,DMA的运行与CPU的运行有交叉点,DMA就会影响到CPU的运行。
2、STM32的DMA传输
STM32与S3C2440的区别是很大的,S3C2440是微处理器,RAM外置且空间很大;STM32是微控制器,RAM片内集成且空间较小。此时,ST公司就有可能提升DMA的运作效率,使DMA的工作不影响到CPU的运行。
外设与外设之间的DMA传输,因为与CPU的运行没有交叉点(CPU的数据流注意是在Flash、内存、寄存器中传输),所以不会影响CPU的运行速度。唯一有可能影响的是外设与内存或者内存与内存之间的DMA传输。
倘若ST公司的SRAM是一个双口RAM,也就是同时可以由两组接口对RAM进行访问,就可以很好的解决速度影响问题。倘若CPU恒定占有一组接口,而另一组接口留给DMA控制器。那么当外设与内存或者内存与内存之间的DMA传输时,由于不与CPU的访问SRAM接口冲突,所以可以解决速度影响问题。
但其实偶尔还是会影响的,当CPU访问SRAM的空间和DMA访问SRAM的空间相同时,SRAM势必会对这种情况进行仲裁,这可能会影响到CPU的访问SRAM的速度。其实,这种情况的概率也是很小的,所以即使影响CPU的运行速度,也不会很大。
(DMA专题讲解)
http://www.makeru.com.cn/live/1392_1048.html?s=45051
http://www.makeru.com.cn/live/1392_1020.html?s=45051
stm32 如何用DMA搬运数据
http://www.makeru.com.cn/live/detail/1484.html?s=45051