1.6.6.10 DMAC_LinkedListDescriptorSetup Function

C

void DMAC_LinkedListDescriptorSetup (dmac_descriptor_registers_t* currentDescriptor,
DMAC_CHANNEL_CONFIG setting,
const void *srcAddr,
const void *destAddr,
size_t blockSize,
dmac_descriptor_registers_t* nextDescriptor);

Summary

Sets up linked list descriptor

Description

This function sets up DMA linked list descriptor. Once the descriptor is setup, DMAC_ChannelLinkedListTransfer API can be used to initiate the linked list mode of DMA transfer.

Precondition

  • DMAC should have been initialized by calling the DMAC_Initialize.

  • The Linked List option should have been enabled in MHC DMA manager

Parameters

Param Description
currentDescriptor Address of current descriptor
setting Block transfer setting of current descriptor
srcAddr Source address of the DMAC transfer
destAddr Destination address of the DMAC transfer. If the CRC engine is enabled and configured in Memory mode then store the seed to be used by CRC engine in the destination address.
blockSize Size of the transfer block in bytes.
nextDescriptor Address of next descriptor. if user wants to stop the transfer, this argument should be NULL.

Returns

None.

Example

uint8_t txPingBuffer[] = "INITIAL_DMA_DATA_FROM_PING_BUFFER";
uint8_t txPongBuffer[] = "initial_dma_data_from_pong_buffer";

__attribute__((__aligned__(16))) static dmac_descriptor_registers_t pTxLinkedListDesc[2];

#define BUFEER0_TX_BTCTRL (DMAC_BTCTRL_STEPSIZE_X1 | DMAC_BTCTRL_SRCINC_Msk | \
DMAC_BTCTRL_BEATSIZE_BYTE | DMAC_BTCTRL_BLOCKACT_INT | DMAC_BTCTRL_VALID_Msk)

// Setup DMA linked list
DMAC_LinkedListDescriptorSetup (&pTxLinkedListDesc[0],
BUFEER0_TX_BTCTRL,
(void *)&txPingBuffer[0],
(void *)&SERCOM1_REGS->SPIM.SERCOM_DATA,
sizeof(txPingBuffer),
&pTxLinkedListDesc[1]);
DMAC_LinkedListDescriptorSetup (&pTxLinkedListDesc[1],
BUFEER0_TX_BTCTRL,
(void *)&txPongBuffer[0],
(void *)&SERCOM1_REGS->SPIM.SERCOM_DATA,
sizeof(txPongBuffer),
// this setting will enable continuous transfer, to stop the transfer this argument should be NULL.
&pTxLinkedListDesc[0]);

// Start the DMA in linked list mode
DMAC_ChannelLinkedListTransfer(DMAC_CHANNEL_1, &pTxLinkedListDesc[0]);

Remarks

None.