/* DMA routine for example_uart */ static void App_DMA_Test(void) { uint8_t receiveBuffer[16]; App_DMA_Init(); dmaChannelNumTx = Chip_DMA_GetFreeChannel(LPC_GPDMA, _GPDMA_CONN_UART_Tx); isDMATx = ENABLE; channelTC = channelTCErr = 0; Chip_DMA_Transfer(LPC_GPDMA, dmaChannelNumTx, (uint32_t) &uartDMA_menu[0], _GPDMA_CONN_UART_Tx, GPDMA_TRANSFERTYPE_M2P_CONTROLLER_DMA, sizeof(uartDMA_menu)); while (!channelTC) {} dmaChannelNumRx = Chip_DMA_GetFreeChannel(LPC_GPDMA, _GPDMA_CONN_UART_Rx); isDMATx = DISABLE; channelTC = channelTCErr = 0; Chip_DMA_Transfer(LPC_GPDMA, dmaChannelNumRx, _GPDMA_CONN_UART_Rx, (uint32_t) &receiveBuffer[0], GPDMA_TRANSFERTYPE_P2M_CONTROLLER_DMA, 10); while (!channelTC) {} isDMATx = ENABLE; channelTC = channelTCErr = 0; Chip_DMA_Transfer(LPC_GPDMA, dmaChannelNumTx, (uint32_t) &receiveBuffer[0], _GPDMA_CONN_UART_Tx, GPDMA_TRANSFERTYPE_M2P_CONTROLLER_DMA, 10); while (!channelTC) {} App_DMA_DeInit(); }
/* DMA routine for DAC example */ static void App_DMA_Test(void) { uint32_t tmp = 0; volatile uint32_t i = 0; /* Initialize GPDMA controller */ Chip_GPDMA_Init(LPC_GPDMA); /* Setting GPDMA interrupt */ NVIC_DisableIRQ(DMA_IRQn); NVIC_SetPriority(DMA_IRQn, ((0x01 << 3) | 0x01)); NVIC_EnableIRQ(DMA_IRQn); /* Get the free channel for DMA transfer */ dmaChannelNum = Chip_DMA_GetFreeChannel(LPC_GPDMA, GPDMA_CONN_DAC); /* Output DAC value until get 'x' character */ while (DEBUGIN() != 'x') { /* Start D/A conversion */ tmp++; if (tmp == (DATA_SIZE - 1)) { tmp = 0; } /* pre-format the data to DACR register */ DMAbuffer = (uint32_t) (DAC_VALUE(tmp) | DAC_BIAS_EN); for (i = 0; i < 0x10000; i++) ; channelTC = 0; Chip_DMA_Transfer(LPC_GPDMA, dmaChannelNum, (uint32_t) &DMAbuffer, GPDMA_CONN_DAC, GPDMA_TRANSFERTYPE_M2P_CONTROLLER_DMA, 1); /* Waiting for writing DAC value completed */ while (channelTC == 0) {} } /* Disable interrupts, release DMA channel */ Chip_DMA_Stop(LPC_GPDMA, dmaChannelNum); NVIC_DisableIRQ(DMA_IRQn); }