咿呀咿呀哟rui 发表于 2022-11-3 10:05

DMA双缓冲

本帖最后由 咿呀咿呀哟rui 于 2022-11-3 10:08 编辑

DMA收到数据之后,DMA 会逐字节搬运到RX_Buf中。搬运到一定的数量时,就会产生中断(半中断、全中断),程序会进入中断函数以处理数据。处理数据这一步一般是使用FIFO进行处理,先来看数据接收的流程图。https://bbs.21ic.com/forum.php?mod=image&aid=2011434&size=300x300&key=e61cc6e52d0a1068&nocache=yes&type=fixnone
一个缓冲区实现的乒乓缓存乒乓缓存是指一个缓存写入数据时,设备从另一个缓存读取数据进行处理;数据写入完成后,两边交换缓存,再分别写入和读取数据。这样给设备留足了处理数据的时间,避免缓冲区中旧数据还没读取完又被新数据覆盖掉的情况。当MCU只有一个缓冲区,要怎么实现乒乓缓存呢?没错,半中断。现在,一个缓冲区能拆成两个来用了。DMA半传输中断是用DMA的半传输完成中断,传输完成中断实现双缓冲,即将一个缓冲区分成两部分,半传输完成中断后,DMA将使用后半部分的DMA缓冲区,程序可以处理缓冲区前半部分的数据,传输完成中断后,DMA将使用前半部分的缓冲区,程序可处理后半部分的数据;
https://bbs.21ic.com/forum.php?mod=image&aid=2011436&size=300x300&key=0d567667bf428e12&nocache=yes&type=fixnone看这图我们再来理解一下上面提到的两个中断:接受缓冲区的前半段填满后触发半中断,后半段填满后触发全中断;举个例子:使用DMA读取20个字节的数据,它会产生两次中断,如下图所示。

软核硬核 发表于 2022-11-3 16:10

DMA双缓冲一般用于通信较快的情况。

芯路例程 发表于 2022-11-3 16:11

之前做过UART的DMA双缓冲,一定要调试好,要不很容易出问题的。

专注于嵌入式 发表于 2022-11-4 10:42

学习了

HXM1593 发表于 2022-11-4 15:20

很好的介绍。
应用到有哪些,能再详细点最好

chenjun89 发表于 2022-11-4 20:53

DMA用好了,可以极大提升应用程序的处理效率。

AloneKaven 发表于 2022-11-4 22:10

DMA双缓冲一般用于通信较快的情况
页: [1]
查看完整版本: DMA双缓冲