For each allocated source buffer descriptor object, program the following.
a.Program the source data fragment to transfer into the source buffer descriptor object. The ADDR LSB and ADDR MSB fields are programmed.
b.Program the size of each source data fragment to transfer into the source buffer descriptor object. The SIZE field is programmed.
c.Set the coherency bit if the source data buffer is not flushed or is not allocated as cache coherent. The coherency bit is valid only in the case of LPD DMA. The FPD DMA does not support coherency at buffer descriptor or buffer level.
d.Set the DSCR element type to 1.
e.Set the INTR field if an interrupt is required after the data is read for transfer. Typically, this can be set for the buffer descriptor object corresponding to the last source data fragment. Setting the last source descriptor for interrupt reduces the number of interrupts received.
f.The non-final buffer descriptor command field can be set to 00 for the next descriptor valid. For the final buffer descriptor, set the command field to 10 for STOP after completing this descriptor.
TIP: You can set 01 for pause after completing the descriptor if you want the DMA in a paused state after completing the final-buffer descriptor. The steps to come out of a paused state into a enabled/disabled state are described in Channel Paused.
g.Program the NEXT ADDR LSB and NEXT ADDR MSB to point to the next source buffer descriptor. If this is the last buffer descriptor in a linked list, these fields must be NULL.