5#include <GPDMA_LPC17xx.h>
21 DAC_CFG_USE_CNT = 0x4,
26 DAC_CFG_USE_DMA = 0x8,
29void DAC_InitDMA(
u32 sample_rate_hz)
31 LPC_DAC->DACCTRL |= (DAC_CFG_USE_DMA | DAC_CFG_USE_CNT);
32 LPC_DAC->DACCNTVAL = sample_rate_hz;
39void DAC_DeinitDMA(
void)
42 LPC_DAC->DACCTRL &= ~(DAC_CFG_USE_DMA | DAC_CFG_USE_CNT);
43 LPC_DAC->DACCNTVAL = 0;
49_PRIVATE void dma_transfer_complete_callback(
u32 event)
51 dma_ok = (
event & GPDMA_EVENT_TERMINAL_COUNT_REQUEST) != 0;
55void DAC_PlayDMA(
const u16 *
const pcm_samples,
u32 sample_count)
57 if (!pcm_samples || sample_count == 0)
60 const u32 status = GPDMA_ChannelConfigure(dma_channel, (
u32)pcm_samples, (
u32)&LPC_DAC->DACR, sample_count,
61 GPDMA_CH_CONTROL_SI | GPDMA_CH_CONTROL_DI | GPDMA_WIDTH_HALFWORD,
62 GPDMA_CONFIG_E, dma_transfer_complete_callback);
67 if (GPDMA_ChannelEnable(dma_channel) != 0)
73 GPDMA_ChannelDisable(dma_channel);