Scatter Gather is a mechanism that allows for automated data transfer scheduling through a pre-programmed instruction list of transfer descriptors (Scatter Gather Transfer Descriptor Definition). This instruction list is programmed by your software application into a memory-resident data structure that must be accessible by the AXI CDMA SG interface. This list of instructions is organized into what is referred to as a transfer descriptor chain. Each descriptor has an address pointer to the next sequential descriptor to be processed. The last descriptor in the chain generally points back to the first descriptor in the chain but it is not required.
CDMA operations begins with the setup of the descriptor pointer registers and the CDMA control registers. The following lists minimum steps, in order, required for AXI CDMA operations:
2.Set CDMACR.SGMode. The toggling of the SGMode bit forces the CDMA SG engine to use the new value written to CURDESC_PNTR in step 3.
3.Write a valid pointer to the channel CURDESC_PNTR register (Offset 0x08). If the address space selected is more than 32, then write the CURDESC_PNTR_MSB to specify the upper bits of current descriptor pointer.
4.Write control information to the channel CDMACR register (Offset 0x00) to set interrupt enables and key hole feature if desired.
5.Write a valid pointer to the channel TAILDESC_PNTR register (Offset 0x10). This starts the channel fetching and processing descriptors. If the address space selected is more than 32, then write the TAILDESC_PNTR_MSB to specify the upper bits of current descriptor pointer.
6.CDMA scatter gather operations continue until the descriptor at TAILDESC_PNTR is processed, and then the engine idles as indicated by CDMASR.Idle = 1.