/* 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); }
/* DeInitialize DMA for UART, free transfer channels and disable DMA interrupt */ static void App_DMA_DeInit(void) { Chip_DMA_Stop(LPC_GPDMA, dmaChannelNumTx); Chip_DMA_Stop(LPC_GPDMA, dmaChannelNumRx); NVIC_DisableIRQ(DMA_IRQn); }