如何计算DMA传输时间(从获取权限到传输完成)
参考官方文档AN2548,里面关于传输时长描述如下:
例如stm32l4xx,按照参考文档得出ts最小需要:ts = 2+2+1 = 5个AHB周期
注:通常网络上说的DMA传输需要一个周期是参考的twr时间,指的是sram写入时间
多个DMA的传输控制
在上一节中只是单DMA的传输时长,如下图多个DMA的一起的传输时间:
该图中,多个DMA通道传输时,需要一个挥手机制,需要耗费一个周期,所以整个时间为最小:tTS = ts +tACK = 6个周期
图中上下两行对应的两个独立的DMA,传输时间不受彼此影响。
为何需要计算该时间?
设计需要频率尽可能低,需要定时器捕获加DMA搬运IO口数据;在此可能会出现有几个数固定正常,其他数异常,就如上面所示,取决于AHB时钟(需考虑实际外设所在时钟),同一个DMA会存在等待情况,这个等待导致的数据搬运超过时序持续时间,固出现错误,解决办法就是提升主频,计算出合适的频率
有两个DMA的不影响彼此传输数据,但是不能去访问同一个外设,会存在竞争关系,需要等待!