首先介绍一下DMA的流水线,DMA的流水线是一个四阶流水线。如下图所示:
在这之中有一个例外。就是当任何一个McBSPs通道作为DMA的数据源的时候,由于在读取数据的期间,读取McBSP DRR寄存器会额外占用一个时钟周期,该周期内DMA总线依然被占用。具体时序图如下图所示:
除了流水线之外,还有一些DMA的操作会影响到DMA总的数据吞吐量。具体的包括一下几点:
1.每个数据块(BURST)之前会加入一个时钟周期的延时;
2.从CH1高优先级中断返回时需要加入一个时钟周期的延时;
3.32位传输模式的吞吐量是16位传输模式的两倍,(也就是说,传输一个32位的字跟传输一个16位的字所消耗的总时间是相同的。)
4.与CPU同时操作数据源会造成额外的延时,这个具体在CPU与DMA的仲裁里面会仔细的说一下。
举个例子,现在要将128个16位的字从ADC搬移到RAM里面。DMA配置为16位传输模式,那么可以转移8个数据块,每个数据块包含16个字(16位),即可完成数据搬移。所需时钟如下:
8 数据块 * [(4 时钟周期/字 * 16 字/数据块) + 1] = 520 时钟周期
假如DMA配置为32传输模式,同样转移8个数据块,每个数据块包括8个字(32位),即可完成数据搬移。此时所消耗的时钟周期如下:
8 数据块 * [(4 时钟周期/字 * 8 字/数据块) + 1] = 264 时钟周期