打印
[N32G45x]

DMA双缓冲

[复制链接]
671|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
DM, DMA, pi, spi
本帖最后由 咿呀咿呀哟rui 于 2022-11-3 10:08 编辑

DMA收到数据之后,DMA 会逐字节搬运到RX_Buf中。搬运到一定的数量时,就会产生中断(半中断、全中断),程序会进入中断函数以处理数据。处理数据这一步一般是使用FIFO进行处理,先来看数据接收的流程图。

一个缓冲区实现的乒乓缓存
乒乓缓存是指一个缓存写入数据时,设备从另一个缓存读取数据进行处理;数据写入完成后,两边交换缓存,再分别写入和读取数据。这样给设备留足了处理数据的时间,避免缓冲区中旧数据还没读取完又被新数据覆盖掉的情况。当MCU只有一个缓冲区,要怎么实现乒乓缓存呢?
没错,半中断。现在,一个缓冲区能拆成两个来用了。
DMA半传输中断是用DMA的半传输完成中断,传输完成中断实现双缓冲,即将一个缓冲区分成两部分,半传输完成中断后,DMA将使用后半部分的DMA缓冲区,程序可以处理缓冲区前半部分的数据,传输完成中断后,DMA将使用前半部分的缓冲区,程序可处理后半部分的数据;

看这图我们再来理解一下上面提到的两个中断:接受缓冲区的前半段填满后触发半中断,后半段填满后触发全中断;举个例子:使用DMA读取20个字节的数据,它会产生两次中断,如下图所示。

3.png (46 KB )

3.png

2.png (25.55 KB )

2.png

1.png (29.72 KB )

1.png

使用特权

评论回复
沙发
软核硬核| | 2022-11-3 16:10 | 只看该作者
DMA双缓冲一般用于通信较快的情况。

使用特权

评论回复
板凳
芯路例程| | 2022-11-3 16:11 | 只看该作者
之前做过UART的DMA双缓冲,一定要调试好,要不很容易出问题的。

使用特权

评论回复
地板
专注于嵌入式| | 2022-11-4 10:42 | 只看该作者
学习了

使用特权

评论回复
5
HXM1593| | 2022-11-4 15:20 | 只看该作者
很好的介绍。
应用到有哪些,能再详细点最好

使用特权

评论回复
6
chenjun89| | 2022-11-4 20:53 | 只看该作者
DMA用好了,可以极大提升应用程序的处理效率。

使用特权

评论回复
7
AloneKaven| | 2022-11-4 22:10 | 只看该作者
DMA双缓冲一般用于通信较快的情况

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:国民技术股份有限公司
简介:国民技术股份有限公司(简称:国民技术)2000年源于国家“909”集成电路专项工程成立,2010年创业板上市(股票代码:300077),是通用MCU、安全芯片领先企业和国家高新技术企业。

15

主题

26

帖子

0

粉丝