没有合适的资源?快使用搜索试试~ 我知道了~
DMASTM32STM32
资源推荐
资源详情
资源评论
stm32 DMA 数据搬运 [操作寄存器+库函数]
作者:
发表时间: 分类:电子相关
前一篇:
读写 库函数
后一篇:
通信 操作寄存器 库函数
(!!" )常译为“存储器直接存取”。早在 # 的 $$ 平台上就有了 应用了。
一个完整的微控制器通常由 %&、存储器和外设等组件构成。这些组件一般在结构和功能上都是独立的,而各个组件的协调和交互就由 %& 完成。如此一来,%& 作为整个芯片的
核心,其处理的工作量是很大的。如果 %& 先从 外设拿到一个数据送给 ' 外设使用,同时 外设又需要 外设提供一个数据。。。这样的数据搬运工作将使 %& 的负荷显得相当繁重。
严格的说,搬运数据只是 %& 的比较不重要的一种工作。%& 最重要的工作室进行数据运算,从加减乘除到一些高级的运算,包括浮点、积分、微分、 ( 等。%& 还需要负责复杂
的中断申请和响应,以保证芯片的实时性能。
理论上常见的控制外设,比如 &!、#、)%# 甚至是 &)' 等通信接口,单纯的利用 %& 进行协议模拟也是可以实现的,比如 单片机经常使用 #*+ 口模拟 # 协议通信。但这样既浪
费了 %& 的资源,同时实现后的性能表现往往和使用专门的硬件模块实现的效果相差甚远。从这个角度来看,各个外设控制器的存在,无疑降低了 %& 的负担,解放了 %& 的资源。
数据搬运这一工作占用了大部分的 %& 资源,成为了降低 %& 的工作效率的主要原因之一。于是需要一种硬件结构分担 %& 这一职能 —— 。
从数据搬运的角度看,如果要把存储地址 的数值赋给另外一个地址上 ' 的变量,%& 实现过程为首先读出 地址上的数据存储在一个中间变量,然后再转送到 ' 地址的变量上。使
用 则不需要中间变量,直接将 地址的数值传送到 ' 地址的变量里。无疑减轻了 %& 的负担,也提高了数据搬运的效率。
中 有 个通道, 有 个通道。 挂载的时钟为 ,' 总线-其时钟为 .,所以可以实现高速数据搬运。
的 通道一览表
本例实现使用 %& 和 搬运同一组数据,通过计时,比较两者的搬运效率。
直接操作寄存器
DMA 的中断状态寄存器(DMA_ISR):
(/#0:通道 0 的传输错误标志1023410!5!!!!64硬件设置这些位。在 7#8 寄存器的相应位写入’9可以清除这里对应的标志位。
:在通道 0 没有传输错误1(/4; :在通道 0 发生了传输错误1(/4。
,(#0:通道 0 的半传输标志10234105!5!64硬件设置这些位。在 7#8 寄存器的相应位写入’9可以清除这里对应的标志位。
:在通道 0 没有半传输事件1,(4; :在通道 0 产生了半传输事件1,(4。
(#0:通道 0 的传输完成标志1023410!5!:64硬件设置这些位。在 7#8 寄存器的相应位写入’9可以清除这里对应的标志位。
:在通道 0 没有传输完成事件1(4; :在通道 0 产生了传输完成事件1(4。
DMA_IFCR 中断标志清除寄存器:
结构类似 7#)8。
(/#0:清除通道 0 的传输错误标志1023410!5!!!!!4这些位由软件设置和清除。 :不起作用 :清除 7#)8 寄存器中的对应 (/# 标志。
,(#0:清除通道 0 的半传输标志10234105!5!!4这些位由软件设置和清除。 :不起作用 :清除 7#)8 寄存器中的对应 ,(# 标志。
(#0:清除通道 0 的传输完成标志1023410!5!:!4这些位由软件设置和清除。 :不起作用 :清除 7#)8 寄存器中的对应 (# 标志。
;#0:清除通道 0 的全局中断标志1023410<!!=:!4这些位由软件设置和清除。 :不起作用 :清除 7#)8 寄存器中的对应的 ;#、(/#、,(# 和 (#
标志。
DMA 通道配置寄存器(DMA_CCRx):
//:存储器到存储器模式 1!"!">4该位由软件设置和清除。 :非存储器到存储器模式; :启动存储器到存储器模式。
%?:通道优先级 1:!!"@4这些位由软件设置和清除。 :低 :中 :高 :最高
)#A/:存储器数据宽度 1!".4这些位由软件设置和清除。 :$ 位 : 位 : 位 :保留
%)#A/:外设数据宽度 1%!:!.4这些位由软件设置和清除。 :$ 位 : 位 : 位 :保留
#:存储器地址增量模式 1!"!>4该位由软件设置和清除。 :不执行存储器地址增量操作 :执行存储器地址增量操作
%#:外设地址增量模式 1%!:!!>4该位由软件设置和清除。 :不执行外设地址增量操作 :执行外设地址增量操作
#8:循环模式 1!=!>4该位由软件设置和清除。 :不执行循环操作 :执行循环操作
#8:数据传输方向 1!5!>!B4该位由软件设置和清除。 :从外设读 :从存储器读
(/#/:允许传输错误中断 1(!5!!!!!!=:<4该位由软件设置和清除。 :禁止 (/ 中断 :允许 (/ 中断
,(#/:允许半传输中断 1,5!5!!!=:<4该位由软件设置和清除。 :禁止 ,( 中断 :允许 ,( 中断
(#/:允许传输完成中断 1(!5!:!!=:<4该位由软件设置和清除。 :禁止 ( 中断 :允许 ( 中断
/:通道开启 1<4该位由软件设置和清除。 :通道不工作 :通道开启
DMA 通道 x 传输数量寄存器(DMA_CNDTRx)(x = 1…7)
低 位有效。这个寄存器控制通道每次传输的数据量,数据传输数量为 至 。该寄存器会随着传输的进行而递减,为 表示已经发送完成。
DMA 外设地址寄存器(DMA_CPARx)
位寄存器。外设数据寄存器的基地址,作为数据传输的源或目标。
DMA 存储地址寄存器(DMA_CMARx)
存储器地址-存储器地址作为数据传输的源或目标。
代码如下: ("C和 507C等相关代码参照 直接操作寄存器开发环境配置 )
&!*C
D=>E507<CF
D=>G"CG
D=>G=!CG
H D=>G>CG
D=>GBCG
D=>G!CG
$ D>I?/% =1H4
D>I?/% =14
D>I?/% =14
@>;:7#1@>4J
H
**数据源
=)877'=K!2
L
$ 0H-0$-0 '-0/-
0H-0$-0 '-0/-
0H-0$-0 '-0/-
0H-0$-0 '-0/H-
0HHHHH-0HHHH$-0HH H'H-0HH/H-
0H-0$-0 '-0/-
H 0H-0$-0 '-0/-
0H-0$-0 '-0/$
MJ
$
**目标位置
=)(7'=K!J
1@>4
H L
=$2J
=)!(2-%&):>(2- ):>(2JJ
$
87#14J**系统时钟设置
H
H &!7#1-4J
H
H
(7#1(#7--4J**初始化 (# 定时器,设定重装值和分频值-计时时间为 =*次
HH
剩余12页未读,继续阅读
资源评论
fxh_bool
- 粉丝: 1
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功