STMCU小助手
发布时间:2022-7-21 19:17
|
引言, c% P/ v6 ?7 K0 S# ^ 为了从 CPU 减荷某些数据传输任务,STM32 微控制器嵌入了直接存储器访问(DMA)控制器。DMA 可以在外设请求或软件触发时执行面向块的数据传输。, y+ A- }$ G8 x 每个 DMA 通道都有一个软件可配置的外设选择,用于请求其服务。在传统 STM32 产品上,通道请求选择在 DMA 控制器内实现,该控制器带有面向给定通道的受限外设请求列表。软件应用程序不能自由地将任何外设请求映射到任何通道。% F# X* a! C6 e; q8 c, [ DMA 请求复用器(DMAMUX 外设)增强了 STM32 DMA 请求路由功能。DMAMUX 增加了更多灵活性,可以提供完全动态的DMA 外设请求映射,而不是伪动态映射。它提供从给定外设到任何 DMA 控制器和/或控制器 DMA 通道的任何 DMA 请求完全可配置路由。 本应用说明解释了下表中所列产品的各种 DMAMUX 特性:如何配置 DMAMUX,以及如何使用新的同步和请求生成功能。/ ~6 H |/ c! P- [* G
外设通过设置其 DMA 请求信号来指示 DMA 传输请求。DMA 控制器会处理 DMA 请求并生成 DMA 确认信号,而且相应的 DMA 请求信号也将变为无效,但在此之前 DMA 请求一直处于挂起状态。3 |) e$ w( F9 F 本文档中并未明确描述 DMA 请求/确认协议所需的控制信号组,而是将其称作外设 DMA 请求线。 DMA 请求路由器可以看作是 DMA 控制器的扩展。它将 DMA 外设请求路由到 DMA 控制器本身。; E/ D' S1 N- h. t0 X DMAMUX 请求复用器可将外设的 DMA 请求线路由到产品 DMA 控制器。该路由功能通过可编程的多通道 DMA 请求线复用器来确保实现。每个通道(下图示例中的 DMAMUX 通道 0)选择一个唯一的 DMA 请求线转发(无条件或同步地)到关联的 DMA 控制器通道(下图示例中的 DMA 通道 0)。这就允许高度灵活地管理 DMA 请求,使并发运行的 DMA 请求数量最大化。9 V# }) I. Y5 L9 X7 ~ ' t" r. j3 @/ H: F% S8 _6 j: J8 f 8 N1 I* C! C% s8 H7 @) d: Q
2 DMAMUX 功能 下图是一个简化的 DMAMUX 框图。根据 DMAMUX 管理的 DMA 通道数量,“请求复用器”结构被重复 N 次
/ b9 T3 p4 j, Y! b3 P( F% ? – dmamux_reqx:来自外设的 DMA 请求(dmamux_req_inx)或来自请求生成器(dmamux_req_genx) 的 DMA 请求 dmamux_req_gen[0..n]分别受 dmamux_req[1..n+1]的影响;而 dmamux_req_inx 受 dmamux_req[n+2]2 E- w& Q% g6 X# W% ` 的影响。 – dmamux_syncx:可选同步事件$ O/ F. x# @2 I0 o • 输出:, p8 g2 w w- L% ~8 w+ p – dmamux_req_outx:DMA 请求 dmamux_reqx 从输入转发到输出9 `. t( v: R; m6 q0 ^* h& a' P – dmamux_evtx:可选的生成事件,可用于触发/同步其他 DMAMUX 通道! o! A# I+ n; x$ F2 k9 x9 o 请求生成器允许根据中断信号或事件生成 DMA 请求,输入/输出如下: • 输入:dmamux_trgx,请求生成器子块的触发事件输入 • 输出:dmamux_req_genx,从请求生成器子块到 DMAMUX 请求复用器通道的 DMA 请求. p) m. ~+ U$ q, l4 I 请求复用器块的数量取决于 DMAMUX 管理的 DMA 通道数量。 例如:3 D/ U1 p) f+ C3 \8 s • 如果是 8 通道 DMA,必须有 8 个请求复用器通道。1 p, ^+ P; g) J' r( o* ~ • 如果某产品有两个 DMA 控制器(每个 DMA 控制器各有 8 个通道),则必须有 16 个请求复用器通道。 一旦请求生成器由 DMAMUX 实例化。它包含 N 个能够生成 DMA 请求的通道(取决于产品)。有关详细信息,请参阅产品参考手册中的“DMAMUX 实现”部分。7 {' E/ w3 m5 r8 D' t9 h0 ~6 V- @ 因为有请求生成器块,用户软件可以基于未实现 DMA 请求的外设发出的信号触发 DMA 传输。 & X( e, b6 p2 n$ `: t" i 现 DMA 请求的外设发出的信号触发 DMA 传输。/ m* r; _: f9 n' J6 A, o : r+ _1 K2 \6 P& g* P# i! c 2.1 请求路由与同步 2.1.1 无条件请求转发$ D- P: C6 j% j 为了执行外设到内存或内存到外设的传输,DMA 控制器通道每次都需要一个外设 DMA 请求线。每次发生请求时,DMA 通道将数据传入/传出外设。DMAMUX 请求复用器通道 X 允许选择/路由外设 DMA 请求线到 DMA 通道 X。 当复用器设置之后(DMAREQ_ID 不等于零),它确保 DMA 请求线的实际路由。通过通道控制寄存器(DMAMUX_CxCR)的 DMAREQ_ID 位中的编码 ID 选择外设 DMA 请求到复用器通道输出的连接。+ L3 R: h% b9 K3 G) ?. G0 t' @ 对于产品中的每个外设 DMA 请求线,都会影响唯一的 ID。值 0(DMAREQ_ID = 0x00)对应于没有选择 DMA 请求线。/ i" d) y) I0 f 在配置 DMAMUX 通道之后,可以依次配置相应的 DMA 控制器通道。不能将两个不同的 DMAMUX 通道配置为选择相同的外设 DMA 请求线作为源。 4 k# M6 d8 U2 ~/ S" H 完整版请查看:附件 l3 P; L6 J8 M4 Z! M) K 6 [% C s7 O/ d3 B1 Z/ Z |
DM00535045_ZHV2.pdf
下载371.91 KB, 下载次数: 13
经验分享 | 通过STM32 TIMER的PWM功能模拟输出正弦波
SPI 32位宽DMA方式收发失败问题
多通道DMA传输为何有一路异常?
经验分享 | STM32N6 ADC DMA 传输失败案例分享
经验分享 | DMA发送函数只能第一次调用有效?
经验分享 | 使用EXIT0同步触发SPI的DMA发送话题
【开发经验】LAT1500 如何通过DMA配合CRC功能
我心中的ST中文论坛
经验分享 | 为什么重启ADC的DMA传输要先停掉ADC?
经验分享 | 使用GPIO+DMA+TIM模拟SPI通信演示
微信公众号
手机版