How does two-dimensional (2D) DMA work, and is it just useful for video?
2D DMA allows you to apply an arbitrary "stride" after every data element or element group you transfer into or out of memory. It’s very useful in video transactions, as well as data transfers outside the video realm (i.e., ADC and DAC applications). If you view a typical DMA process as an "inner loop", 2D DMA adds capability for an "outer loop" that will execute the inner loop a specified number of times. Taken together, this functionality has several important implications, some examples of which are provided below:
RGB data can be read from an image sensor and de-interleaved on-the-fly into separate R, G and B buffers in memory.
I and Q converter data can be interleaved from memory before being sent out a serial or parallel port.
An arbitrary rectangular data region (that is, not linearly contiguous) in memory can be transferred out through a peripheral such as the PPI.
DMA interrupts can be scheduled based on the expiration of an inner loop count, an outer loop count, both, or neither, thus providing added flexibility compared with typical "buffer half full" and "buffer full or empty" interrupt conditions. The "buffer half full" condition would be the same functionality provided by the ADSP-BF535 Blackfin processor and the previous ADSP-219x DMA engines, which generated a half-done interrupt that could not be disabled.
Retrieving data ...