コード例 #1
0
/**
 * \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");
	}
}
コード例 #2
0
ファイル: main.c プロジェクト: wpd/atmel-software-package
/**
 *  \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;
		}
	}
}