26.6.2.5 Data Transmission
Before the DMAC can perform a data transmission, a DMA channel has to be configured and enabled, its corresponding transfer descriptor has to be initialized, and the arbiter has to grant the DMA channel access as the active channel.
Once the arbiter has granted a DMA channel access as the active channel (see DMAC Block Diagram in the Block Diagram from Related Links) the transfer descriptor for the DMA channel will be fetched from SRAM using the fetch bus, and stored in the internal memory for the active channel. For a new block transfer, the transfer descriptor will be fetched from the descriptor memory section (BASEADDR); For an ongoing block transfer, the descriptor will be fetched from the write-back memory section (WRBADDR). By using the data transfer bus, the DMAC will read the data from the current source address and write it to the current destination address. For further details on how the current source and destination addresses are calculated (see Addressing from the Related Links).
The arbitration procedure is performed after each transfer. If the current DMA channel is granted access again, the block transfer counter (BTCNT) of the internal transfer descriptor will be decremented by the number of beats in a transfer, the optional output event Beat will be generated if configured and enabled, and the active channel will perform a new transfer. If a different DMA channel than the current active channel is granted access, the block transfer counter value will be written to the write-back section before the transfer descriptor of the newly granted DMA channel is fetched into the internal memory of the active channel.
When a block transfer has come to its end
(BTCNT is zero), the Valid bit in the Block Transfer Control register will be cleared
(BTCTRL.VALID=0
) before the entire transfer descriptor is
written to the write-back memory. The optional interrupts, Channel Transfer Complete and
Channel Suspend, and the optional output event Block, will be generated if configured and
enabled. After the last block transfer in a transaction, the Next Descriptor Address
register (DESCADDR) will hold the value 0x00000000, and the DMA channel will either be
suspended or disabled, depending on the configuration in the Block Action bit group in the
Block Transfer Control register (BTCTRL.BLOCKACT). If the transaction has further block
transfers pending, DESCADDR will hold the SRAM address to the next transfer descriptor to
be fetched. The DMAC will fetch the next descriptor into the internal memory of the active
channel and write its content to the write-back section for the channel, before the arbiter
gets to choose the next active channel.