×
单片机 > 单片机程序设计 > 详情

stm32 DMA性能资料

发布时间:2020-05-18 发布时间:
|
为了快速传送一个数据块,使用 DMA 传送程序(Mem to Mem 16bits) 测量了一下传送的时间,128个16b数据大约用了12us (72Mhz 时钟)。 换句话来说,STM32 DMA 性能为10M/s


   又使用memcpy 来比对一下,用时约4us ,显然memcpy 要快很多。

   btw, 在ST的手册里面未见对DMA性能的表述。

----------------------------------

DMA传送数据的速度不会比CPU直接传送数据快,因为总

 

线频率没有变。

当CPU也在运行执行指令时,DMA传送数据的速度会比CPU直接传送数据慢,这是因为DMA与CPU分时使用同一条总线的缘故。

----------------------------------

 

有一个专门讲DMA性能的手册的,你可以在官网上找到的
里面对DMA的性能描述得很清楚
AN2548 Using the STM32F101xx and STM32F103xx DMA controller

----------------------------------------

 

这个说法有点问题
DMA数据传送是memory->memory
memcpy是memory -> cpu_internal_register -> memory

memcpy快应该是因为1. memcpy采用了ldm/stm指令,这个对提高速度很有帮助 2. 总线仲裁偏袒cpu core

---------------------------------------

恩............ DMA控制器并不在memory之内?我想你的意思是指MASTER DMA吧,像PCI那样。但即使是legacy dma,由dma controller通过硬件的方式存取memory在通常情况下也应该比cpu快,因为不需要取指/解码/执行这样的流程。不过stm32的 controller不支持bust mode确实对其速度有很大影响,而ldm/stm指令实际上起到了bust mode的作用,可以在一次取指/解码/执行过程中操作多个数据。如果controller支持burst,相信就可以超越memcpy的速度了。目前来看stm32 dma的速度确实不如memcpy,其最大的好处在于cpu可以不参与其过程。

-----------------------------------

非常同意byeyear 的解释,顺便问一句,其他品牌的M3的DMA是否也不支持 burst 模式?

------------------------------------

 

DMA并不一定快,只是提高了有效代码的运行效率。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈AVR中定时器几种工作模式