本帖最后由 咿呀咿呀哟rui 于 2022-11-3 10:08 编辑
DMA收到数据之后,DMA 会逐字节搬运到RX_Buf中。搬运到一定的数量时,就会产生中断(半中断、全中断),程序会进入中断函数以处理数据。处理数据这一步一般是使用FIFO进行处理,先来看数据接收的流程图。
一个缓冲区实现的乒乓缓存 乒乓缓存是指一个缓存写入数据时,设备从另一个缓存读取数据进行处理;数据写入完成后,两边交换缓存,再分别写入和读取数据。这样给设备留足了处理数据的时间,避免缓冲区中旧数据还没读取完又被新数据覆盖掉的情况。当MCU只有一个缓冲区,要怎么实现乒乓缓存呢? 没错,半中断。现在,一个缓冲区能拆成两个来用了。 DMA半传输中断是用DMA的半传输完成中断,传输完成中断实现双缓冲,即将一个缓冲区分成两部分,半传输完成中断后,DMA将使用后半部分的DMA缓冲区,程序可以处理缓冲区前半部分的数据,传输完成中断后,DMA将使用前半部分的缓冲区,程序可处理后半部分的数据;
看这图我们再来理解一下上面提到的两个中断:接受缓冲区的前半段填满后触发半中断,后半段填满后触发全中断;举个例子:使用DMA读取20个字节的数据,它会产生两次中断,如下图所示。
|