DMA 之FIFO的作用
目录
1.FIFO( 进先出存储器缓冲区)
2.FIFO的作用:
1.FIFO( 进先出存储器缓冲区)
当两个DMA都调用总线时,总线仲裁会根据优先级分配总线资源。即分配给其中优先级最高的DMA,另一个DMA的数据会暂时存储在FIFO中。
-
DMA控制器和AHB有三个接口:
-
一个Slave接口(用于CPU对它进行编程)
-
两个Master接口,允许将DMA去开启两个AHB总线上两个从设备之间的信号通信。
-
每个DMA都具有8个Streams
注意:不是在从外设到内存模式时双向传输,即同一模式下只能从单一方向传输
-
每个Stream都只能单向传输(图中双向箭头的意思是stream可以从外设到内存,内存到外设,内存到内存)
-
Steam可被配置的模式
-
从内存到外设
-
从外设到内存
-
从内存到内存
-
-
-
假如没有FIFO,数据进来一次就立刻通过流输出,DMA占用了总线CPU就不能占用总线了,而总线的带宽一般是32为,一个字节进来就打断一次,效率太低了。
但是有了FIFO,可以先存够相应字节再一起发出去,提高了资源的利用率;FIFO缓存的大小可以看手册,stm32F4一般为16个字节。
2.FIFO的作用:
1,减少AHB带宽的占用,减少AHB总线的仲裁,让CPU能够在AHB总线上占用更大的带宽而不需要和DMA经常竞争总线。(DMA接收数据时可以旁路AHB总线)
2,减少溢出,在需要动态扩展内存时,DMA会暂存数据进入FIFO,给CPU执行动态扩展内存争取时间,防止溢出。
3、DMA多路Stream仲裁时,FIFO可以多路Stream缓冲,极大提高并发性。(假如串口和ADC都来数据,FIFO可以避免数据发生错误)
假如没有FIFO,数据进来一次就立刻通过流输出,DMA占用了总线CPU就不能占用总线了,而总线的带宽一般是32为,一个字节进来就打断一次,效率太低了。
但是有了FIFO,可以先存够相应字节再一起发出去,提高了资源的利用率;FIFO缓存的大小可以看手册。STM32F4的FIFO大小为16字节。
下一篇
DMA Burst的妙用https://mpbeta.csdn.net/mp_blog/creation/editor/146577388