28.6.3.1.2 Modifying a Descriptor in a List

In order to add descriptors to a linked list, the following actions must be performed:

  1. Enable the Suspend interrupt for the DMA channel.
  2. Enable the DMA channel.
  3. Reserve memory space in SRAM to configure a new descriptor.
  4. 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
  5. Clear the VALID bit for the existing list and for the descriptor which has to be updated.
  6. 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 (DESCRADDR) 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'
  7. Go to step 4 if needed.