Configure the DMA
- Create a DMA resource configuration structure, which can be filled out to adjust the configuration of a single DMA transfer.
structdma_resource_config config; - Initialize the DMA resource configuration struct with the module's default values.
dma_get_config_defaults(&config);Note: This should always be performed before using the configuration struct to ensure that all values are initialized to known default settings. - Set extra configurations for the DMA resource. ADC_DMAC_ID_RESRDY trigger causes a beat transfer in this example.
#if (SAMC21)config.peripheral_trigger = ADC1_DMAC_ID_RESRDY;#elseconfig.peripheral_trigger = ADC_DMAC_ID_RESRDY;#endifconfig.trigger_action = DMA_TRIGGER_ACTON_BEAT; - Allocate a DMA resource with the configurations.
dma_allocate(resource, &config); - Create a DMA transfer descriptor configuration structure, which can be filled out to adjust the configuration of a single DMA transfer.
structdma_descriptor_config descriptor_config; - Initialize the DMA transfer descriptor configuration struct with the module's default values.
dma_descriptor_get_config_defaults(&descriptor_config);Note: This should always be performed before using the configuration struct to ensure that all values are initialized to known default settings. - Set the specific parameters for a DMA transfer with transfer size, source address, and destination address.
descriptor_config.beat_size = DMA_BEAT_SIZE_HWORD;descriptor_config.dst_increment_enable =false;descriptor_config.src_increment_enable =false;descriptor_config.block_transfer_count = 1000;descriptor_config.source_address = (uint32_t)(&adc_instance.hw->RESULT.reg);#if (SAML21)descriptor_config.destination_address = (uint32_t)(&dac_instance.hw->DATA[DAC_CHANNEL_0].reg);#elsedescriptor_config.destination_address = (uint32_t)(&dac_instance.hw->DATA.reg);#endifdescriptor_config.next_descriptor_address = (uint32_t)descriptor; - Create the DMA transfer descriptor.
dma_descriptor_create(descriptor, &descriptor_config); - Add DMA descriptor to DMA resource.
dma_add_descriptor(&example_resource, &example_descriptor);
