/** * \brief DMA driver configuration */ static void _initialize_dma(void) { /* Driver initialize */ xdmad_initialize(false); /* Allocate DMA TX channels for CLASSD */ dma_channel = xdmad_allocate_channel(XDMAD_PERIPH_MEMORY, ID_CLASSD); if (dma_channel) { printf("DMA channel allocated\n\r"); xdmad_prepare_channel(dma_channel); } else { printf("DMA channel allocation error\n\r"); } }
/** * \brief dma Application entry point * \return Unused (ANSI-C compatibility) */ extern int main(void) { uint8_t key; bool configured = false; /* Output example information */ console_example_info("XDMA Example"); /* Allocate a XDMA channel. */ xdmad_channel = xdmad_allocate_channel(XDMAD_PERIPH_MEMORY, XDMAD_PERIPH_MEMORY); if (!xdmad_channel) { printf("-E- Can't allocate XDMA channel\n\r"); return 0; } /* Display menu */ _display_menu(); while (1) { key = console_get_char(); if (key >= 'a' && key <= 'd') { dma_data_width = key - 'a'; _display_menu(); } else if (key >= '0' && key <= '3') { dma_src_addr_mode = key - '0'; _display_menu(); } else if (key >= '4' && key <= '7') { dma_dest_addr_mode = key - '4'; _display_menu(); } else if (key >= '8' && key <= '9') { dma_memset = key - '8'; if (dma_memset == 0 && dma_view == 0) { printf("-I- DMA View 0 cannot be used when MEMSET is in NORMAL mode, selecting DMA View 1 instead.\r\n"); dma_view = 1; } _display_menu(); } else if (key >= 'e' && key <= 'h') { dma_view = key - 'e'; if (dma_view == 0 && dma_memset == 0) { printf("-I- DMA View 0 can only be used when MEMSET is in HW mode, enabling HW mode.\r\n"); dma_memset = 1; } _display_menu(); } else if (key == 'S' || key == 's') { dma_mode = 1; _configure_transfer(); configured = true; } else if (key == 'M' || key == 'm') { dma_mode = 2; _configure_transfer(); configured = true; } else if (key == 'L' || key == 'l') { dma_mode = 3; _configure_transfer(); configured = true; } else if (key == 'H') { _display_menu(); } else if (configured && (key == 'T' || key == 't')) { printf("-I- Start XDMA transfer\n\r"); _start_dma_transfer(); configured = false; } } }