你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【中文文档】AN4104_STM32F0xx的DMA控制器的使用

[复制链接]
STMCU-管管 发布时间:2019-3-25 10:17
STM32F0xx的DMA控制器的使用- u: A) l8 m6 p  w
* @0 @# ?. A9 V% }1 e0 \4 f
前言 % M/ E& e$ D2 [. R# y& c

2 v7 V4 @7 A5 q. p/ U本应用笔记介绍了如何使用 STM32F0xx 直接存储器访问 (DMA) 控制器。STM32F0xx 的DMA 控制器、Cortex™-M0 内核、高级微控制器总线架构 (AMBA) 的总线和存储器系统为用户开发高数据带宽低延迟响应的软件提供了便利条件。 ' v' q- s  J" x, a' ?& T' L  T6 B- m

; ?5 e+ _( `8 |本应用笔记还介绍了如何充分利用这些特性以及确保不同的外设和子系统具有正确的响应时间。 $ ~! p) M/ r& ]5 i# H% J

  Z  A; ~$ Z* q: g" M7 i+ _注: 为确保用户快速入门,本文档介绍的应用示例均用 C 语言编程,这些示例位于STM32F0xx_StdPeriph_Lib 软件包内的 Project\STM32F0xx_StdPeriph_Examples 下$ {- c- r" B! r' u* ^0 A& H" @3 j
0 T& H! V$ X: u1 p' L
1 DMA 控制器说明 . Z2 v/ Q+ J% K0 p  v

2 p. E0 e5 \# s4 w/ b直接存储器访问 (DMA) 用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输。可以在无需任何 CPU 操作的情况下通过 DMA 快速传输传输。这样节省的 CPU 资源可供其它操作使用。
# M: @; A+ p3 ?2 |* I

) g! ^4 c4 M# E4 k( u  QDMA 允许在后台执行数据传输,无需 Cortex-M0 处理器干预。在此操作过程中,主处理器可以执行其它任务,仅当整个数据块需要处理时,才会中断主处理器。这样即使传输大量数据也不会对系统性能造成太大影响。   x: |! U  b" k' Y% j3 P
3 O2 a( R3 d+ ?+ |/ m3 [
DMA 主要用于为不同的外设模块实现集中数据缓冲存储(通常在系统 SRAM 中)。与分布式解决方案(其中每个外设都需要实现自己的本地数据存储)相比,DMA 解决方案在硅片成本和功耗方面的成本较低。 $ h8 D0 S$ V* E5 y' n! s

$ E5 k. x1 G  O( t: G9 {根据使用的产品型号的不同,有一个或两个 DMA 模块。 % z4 g3 Q: D: @# L9 ?% ^" L) w
. i7 U- \5 u9 @4 C
STM32F0xx DMA 控制器总共有 5 个通道用于 DMA1,每个通道都专门管理来自一个或多个外设的存储器访问请求。它具有一个仲裁器,用于处理不同的 DMA 请求的优先级。4 Y) I" u: z6 \
& Z# s4 G  T. z& O- I' h. J
1.1 DMA 概述 # _+ L; [5 \* g) G) P% X7 T

( m; V; ~0 r. f" d+ `/ S% u$ N" I  `DMA 主要特性:
' b* ], S; ~# b! r● 可单独配置的通道(请求) 4 ?# L/ h' l9 j: r* f. y; I
● 每个通道都与专用的硬件 DMA 请求相连,同样每个通道上都支持软件触发
& v. [! J% w* q& M" p8 P8 @) {● 来自一个 DMA 的通道的请求间的优先级可用软件编程(4 个级别:很高、高、中等、低),在软件优先级相同的情况下可以通过硬件决定优先级(例如,请求 1 的优先级高于请求 2)
: o+ \! h. U8 R, t: d1 M● 独立的源和目标传输大小(字节、半字、字),模拟打包和解包。源和目标必须具有相同的数据大小(以通过数据大小对齐)
& e0 Y6 ^/ O% {● 支持循环缓冲区管理 ) {& M1 P1 L! x8 {
● 3 个事件标志(DMA 半传输、DMA 传输完成和 DMA 传输错误),这 3 个事件标志逻辑或成为一个单独的中断请求 1 A1 Q3 m! h. L8 q9 b4 `
● 存储器到存储器的传输 5 R2 J3 Z- E, S# }7 A1 e
● 外设到存储器和存储器到外设以及外设到外设的传输 % b. V4 _5 k& y) n( Y1 z5 y, \
● FLASH、SRAM、APB 和 AHB 外设均可作为访问的源和目标
+ O! J8 U2 u3 Y5 g* s  f: ?● 可编程的数据传输数目:最大 65536
9 Q0 ]8 n( D0 mDMA 旨在为所有外设提供相对较大的数据缓冲区。此缓冲区通常位于系统 SRAM 中。 8 q, D5 o% Z8 a+ V4 w3 D, a# f
( m9 G5 j- ]  l9 i! m7 f
每个通道都会在给定时间分配到一个唯一外设(数据通道)。连接到同一 DMA 通道(对于STM32F0xx 器件,为表 1 中的 CH1 到 CH5)的外设不能与使能的 DMA(DMA 功能在外设寄存器中处于使能状态)同时使用。
8 e  w6 P6 e! d! N  V0 D

- e0 K# _: w3 h1 T表 1 中显示了 STM32F0xx 器件中支持 DMA 传输的各种不同外设。
1 Q! u- |/ z; [* |! T& x
- B7 z  y2 q) n2 X
1.png
# x0 d* E( g1 N# ?  _, A, ~3 Q  A
注: 有关详细信息,请参见 STM32F0xx 器件参考手册 RM0091 DMA 一节。
& X. d& W0 Z" f0 |6 X
1.2 DMA 数据管理
% L) m8 Z4 z9 ?* \; f  X" a
DMA 控制器通过与 Cortex-M0 内核共用系统总线来执行直接存储器访问。当 CPU 与 DMA 具有相同的目标(存储器或外设)时,DMA 请求会暂停 CPU 访问系统总线达若干个周期,总线仲裁器执行循环调度,以确保 CPU 至少可以获得一半的系统总线带宽(存储器和外设)。
# ?3 R' t& Q7 @
1.2.1 循环优先级方案

$ I  }) x$ g- m& R
NVIC 和 Cortex-M0 处理器实施了延迟非常低的高性能中断方案。所有 Cortex-M0 指令均可在一个周期内执行,也可以按周期进行中断。为了在系统级保持这一优势,DMA 和总线矩阵可确保 DMA 不会长时间阻塞总线。循环优先级方案确保 CPU 可以根据需要每隔一个周期访问任意从总线一次。

9 {, J5 y' m; K4 j# Y
1.2.2 外设到存储器、存储器到外设以及外设到外设的 DMA 传输
4 N" G! K# o1 q4 O5 L
在发生一个事件后,外设向 DMA 控制器发送一个请求信号。DMA 控制器根据通道的优先权处理请求。当 DMA 控制器开始访问发出请求的外设时,DMA 控制器立即发送给它一个应答信号。当从 DMA 控制器得到应答信号时,外设立即释放它的请求。一旦外设释放了这个请求,DMA 控制器同时撤销应答信号。如果有更多的请求时,外设可以启动下一个周期。

7 Z7 V& V- r1 d# [1 l* M2 {9 K  _
每次 DMA 传输包含三个操作:
+ }8 s* S* T) r1 u7 c' Y
● 从外设数据寄存器或者从当前外设/存储器地址寄存器指示的存储器地址取数据,第一次传输时的开始地址是 DMA_CPARx 或 DMA_CMARx 寄存器指定的外设基地址或存储器单元。

# B+ s& a9 W% W/ M" C( X
● 向外设数据寄存器或者从当前外设/存储器地址寄存器指示的存储器地址存数据,第一次传输时的开始地址是 DMA_CPARx 或 DMA_CMARx 寄存器指定的外设基地址或存储器单元。
$ G* f( S) Y& \) n0 f! G5 v
● 对 DMA_CNDTRx 寄存器执行一次递减操作,DMA_CNDTRx 寄存器存放着未完成的DMA 操作的计数。
; o6 J$ k* n( ]$ o2 ?$ Q  ]9 j3 a
1.2.3 存储器到存储器的
4 r, p$ s( z& Z5 x
DMA 传输DMA 通道的操作可以在没有外设请求的情况下进行。此模式称为“存储器到存储器”模式。如果 MEM2MEM 位置 1,则只要软件通过将使能位置 1 来使能通道,通道就会启动传输。DMA 计数器达到零后,传输结束。存储器到存储器模式不能与循环模式同时使用。

4 Z" g6 S7 `3 a
1.2.4 选择通道优先级

2 c$ H4 R4 [! P1 ?. `
为了实现与外设之间的连续数据传输,相应的 DMA 通道必须能够维持足够的外设数据速率,并确保传输延迟的时间小于两个连续数据的间隔时间。

- p2 V8 o" w, n+ J" v; V
高速/高带宽外设必须具有最高的 DMA 优先级。符合外设最大数据延迟并且避免发生过载/欠载情况。
. D' P+ j0 l' E" ~$ c
在带宽要求相同的情况下,建议为工作在从模式的外设(对数据传输速度没有控制权)分配的优先级高于工作在主模式的外设(可以控制数据流)。

8 o7 Y% }/ T+ Y1 _/ f& r2 ]
默认情况下,对通道分配和硬件优先级(对于 STM32F0xx 器件,为 1 到 5)进行设置,以将最快的外设分配给优先级最高的通道。然而,对于某些应用来说,并不一定适合。在这种情况下,用户可以为每个通道配置一个软件优先级(4 个级别 —— 从“最高”到“低”),它将优先于硬件优先级。

7 k3 M# B& g, ]) ?
..............

; s8 ~/ a6 G  \7 b7 ]8 |. }" N5 k
想了解更多,请下载原文阅读

1 B% X  e1 n- X. H2 {
( l" |6 G9 M  x
收藏 评论1 发布时间:2019-3-25 10:17

举报

1个回答
Kevin_G 回答时间:2019-3-25 12:11:35
点赞
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版