需要大数据搬移场景下,大家都会首选使用DMA进行数据传输,如果多个模块都在使用DMA传输数据,相互之间会存在影响吗?
DMA通道呈矩阵式分布,当DMA多通道都在进行数据传输时,首先会根据通道优先级传输高优先级通道数据,此时若有其他通道请求,会在高优先级通道连续采集3~5个长度后再把DMA资源分配给下一个通道,响应会秉承轮询原则进行传输。
当一些应用中出现ADC、USART、SPI等多个模块都需要使用DMA传输数据,且会存在并行请求情况,此时DMA的效率会有所下降,单位时间内,各模块传输的数据量会有所减少。有些应用场景中有对单位时间传输数据有严格要求,此时可以让有冲突的模块使用两个不同的DMA,例ADC使用DMA1,USART使用DMA2,这种配置下两个DMA传输效率不会有影响。
同时DMA的传输效率也与CPU任务量有关,CPU任务量越大,分给DMA的带宽会越小,理论是主频的一半。
|