关于F4的DMA的FIFO应用
1、为什么需要FIFO,在F103中,如果DMA的P端和M端数字宽度不一样,那么,虽然可以传输,但会丢掉很多数据,有了FIFO以后,就算P端和M端的位宽不一致,也可以实现不丢包传输。这里注意一点:在不开启FIFO的情况下,传输的位宽,P端和M端是一样的,由PSIZE决定,与MSIZE无关。
2、FIFO传输原理是什么?
FIFO有16个字节,也就是4个字,当P端有数据过来的时候,并不是马上写到M端,而是先写到FIFO,当FIFO的容量达到FIFO的阈值时,FIFO才会把数据写到M端。这里有一个特性,就是当DMA传输完成,如果FIFO中还含有数据,它会最后再写一次。有了这个特性,我们完全不用管FIFO阈值级别,就可以实现DMA的单次传输。但需要注意一点:DMA的传输数量,应为MSIZE/PSIZE的整数倍,如MSIZE为32位,而PSIZE为8位,那传输数量应该为4的整数倍。
3、什么是突发传输
简单理解,突发传输就是一次触发,DMA响应N次,有4次、8次、16次,这个应用场景很少,笔者只在JPEG硬件解码中遇到这个情况。比如一个硬件每次产生16字节的数据,才产生一次硬件触发。而咱们一次只能读4字节的数据,这时如果用4节拍的突发传输,就刚好解决这个问题。但使用中需要注意FIFO阈值级别的问题,FIFO的阈值应该等于每次M端产生的数据量,不然会产生FIFO错误。 |