27.5.3.1.2 Modifying a Descriptor in a List
To add descriptors to a linked list, perform these actions:
- Enable the Suspend interrupt for the DMA channel.
- Enable the DMA channel.
- Reserve memory space in SRAM to configure a new descriptor.
- Configure the new descriptor:
- Set the next descriptor address (DESCADDR).
- Set the destination address (DSTADDR).
- Set the source address (SRCADDR).
- Configure the block transfer control (BTCTRL) including:
- Optionally enable the Suspend block action.
- Set the descriptor VALID bit.
- Clear the VALID bit for the existing list and for the descriptor which has to be updated.
- Read DESCADDR from the Write-Back
memory.
- If the DMA has not already fetched the descriptor, which requires changes (i.e.,
DESCADDR is wrong):
- Update the DESCADDR location of the descriptor from the List.
- Optionally clear the Suspend block action.
- Set the descriptor VALID bit to '1'.
- Optionally enable the Resume software command.
- If the DMA is executing the same descriptor as the one which requires changes:
- Set the Channel Suspend software command and wait for the Suspend interrupt.
- Update the next descriptor address DESCADDR in the write-back memory.
- Clear the interrupt sources and set the Resume software command.
- Update the DESCADDR location of the descriptor from the List.
- Optionally clear the Suspend block action.
- Set the descriptor VALID bit to '1'.
- If the DMA has not already fetched the descriptor, which requires changes (i.e.,
DESCADDR is wrong):
- Go to Step 4 if required.
