Microchip® Advanced Software Framework

dmac_example.c File Reference

SAM4E Direct Memory Access Controller driver example.

Copyright (c) 2012-2018 Microchip Technology Inc. and its subsidiaries.

#include <asf.h>
#include <conf_board.h>
#include <conf_clock.h>

Macros

#define DMA_BUF_SIZE   32
 [dmac_define_channel] More...
 
#define DMA_CH   0
 [dmac_define_channel] More...
 

Functions

static void configure_console (void)
 Configure the console UART. More...
 
void DMAC_Handler (void)
 DMAC interrupt handler. More...
 
int main (void)
 Application entry point. More...
 
static void test_multi_buf_xfer (void)
 Test DMA multiple buffer transfer with interrupt mode. More...
 
static void test_single_buf_xfer (void)
 Test DMA single buffer transfer with polling mode. More...
 

Variables

uint32_t g_dma_buf [6][DMA_BUF_SIZE]
 DMA buffer. More...
 
volatile uint32_t g_xfer_done = 0
 [dmac_define_buffer] More...
 

#define DMA_BUF_SIZE   32

[dmac_define_channel]

[dmac_define_buffer] DMA buffer size.

Referenced by test_multi_buf_xfer(), and test_single_buf_xfer().

#define DMA_CH   0

[dmac_define_channel]

DMA channel used in this example.

Referenced by DMAC_Handler(), test_multi_buf_xfer(), and test_single_buf_xfer().

static void configure_console ( void  )
static

Configure the console UART.

References uart_rs232_options::baudrate, stdio_serial_init(), and sysclk_enable_peripheral_clock().

Referenced by main().

void DMAC_Handler ( void  )

DMAC interrupt handler.

References DMA_CH, dmac_get_status(), and g_xfer_done.

int main ( void  )

Application entry point.

Returns
Unused (ANSI-C compatibility).

References board_init(), BOARD_NAME, configure_console(), sysclk_init(), test_multi_buf_xfer(), and test_single_buf_xfer().

static void test_single_buf_xfer ( void  )
static

Test DMA single buffer transfer with polling mode.

[dmac_define_vars]

[dmac_define_vars]

[dmac_define_prepare_buffer]

Initialize DMA buffer

[dmac_define_prepare_buffer]

[dmac_init_clock]

[dmac_init_clock]

[dmac_init_module]

[dmac_init_module]

[dmac_set_priority]

[dmac_set_priority]

[dmac_enable_module]

[dmac_enable_module]

[dmac_configure_channel]

Set for channel configuration register

Enable stop on done

Set AHB Protection

FIFO Configuration

[dmac_configure_channel]

[dmac_configure_for_single_transfer_1]

Initialize single buffer transfer: buffer 0 -> buffer 1

[dmac_configure_for_single_transfer_1]

[dmac_configure_for_single_transfer_2]

[dmac_configure_for_single_transfer_2]

[dmac_configure_for_single_transfer_3]

[dmac_configure_for_single_transfer_3]

[dmac_configure_for_single_transfer_4]

[dmac_configure_for_single_transfer_4]

[dmac_start_transfer]

[dmac_start_transfer] [dmac_wait_for_done]

[dmac_wait_for_done]

References DMA_BUF_SIZE, DMA_CH, dmac_channel_enable(), dmac_channel_is_transfer_done(), dmac_channel_set_configuration(), dmac_channel_single_buf_transfer_init(), dmac_enable(), dmac_init(), DMAC_PRIORITY_ROUND_ROBIN, dmac_set_priority_mode(), g_dma_buf, pmc_enable_periph_clk(), dma_transfer_descriptor_t::ul_ctrlA, dma_transfer_descriptor_t::ul_ctrlB, dma_transfer_descriptor_t::ul_descriptor_addr, dma_transfer_descriptor_t::ul_destination_addr, and dma_transfer_descriptor_t::ul_source_addr.

Referenced by main().

volatile uint32_t g_xfer_done = 0

[dmac_define_buffer]

Referenced by DMAC_Handler(), run_multi_buf_xfer_test(), and test_multi_buf_xfer().