【DMA进行任意数据量的接收与发送】

一、DMA介绍

DMA是直接存储器访问的英文缩写,被用于内存和内存之间或内存和外设之间的高速数据传输。数据传输可以在没有CPU的干预下快速移动,这样可以保持CPU资源处理其他事情。其工作结构如下图:
DMA数据通道

图1 DMA工作结构

DMA的核心参数主要有:
1、 数据的源地址
2、 数据传输位置的目标地址
3、 传递数据多少的数据传输量
4、 进行多少次传输的传输模式

二、DMA的主要特征

每个通道都直接连接专用的硬件DMA通道,每个通道都同样支持软件触发,这些功能通过软件配置。
1、 在同一个DMA模块上,多个请求间的优先权可以通过软件编程配置,优先权设置相等的时候由硬件决定(请求0的优先级高于请求1)
2、 独立数据源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐
3、 支持循环的缓冲器管理
4、 每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错),这三个事件标志逻辑或成为一个单独的中断请求
5、 是存储器和存储器、外设和存储器、外设和外设之间的传输
6、 闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和目标
7、 可编程的数据传输数目最大为:65535

三、DMA接收和发送阐述

每次传输完成(串口发送完成)后都会触发一次中断,此时只需要在中断函数中清除相应的标志位,并对发送状态进行相应的标记。
格式化发送:
1、 格式化数据为字符串
2、 判断发送状态,若忙则等待
3、 设置好存储器地址,使能发送并设置发送状态
串口DMA接收:
当串口进入空闲状态时即开启一次DMA接收,下次数据到来时DMA会自动搬运数据至指定的存储器,搬运完成后会再次触发空闲中断,此时清除空闲标志位、DMA传输完成标志位和传输错误标志位,并清除接收内存,开启下一次接收。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值