dac_config_t dacConfigStruct;
DAC_GetDefaultConfig(&dacConfigStruct);
dacConfigStruct.referenceVoltageSource = kDAC_ReferenceVoltageSourceVref2;
dacConfigStruct.enableLowPowerMode = false;
DAC_Init(DAC0, &dacConfigStruct);
dac_buffer_config_t dacBufferConfigStruct;
DAC_GetDefaultBufferConfig(&dacBufferConfigStruct);
dacBufferConfigStruct.triggerMode = kDAC_BufferTriggerBySoftwareMode;
DAC_SetBufferConfig(DAC0, &dacBufferConfigStruct);
DAC_SetBufferValue(DAC0, 0U, 0x7FF);
static const uint16_t DACdata[16] = {0x000, 0x0110, 0x220, 0x330, 0x440, 0x550, 0x660, 0x770, 0x880, 0x990, 0xAA0, 0xBB0, 0xCC0, 0xDD0, 0xEE0, 0xFF0, };
DMAMUX_Init(DMAMUX0);
DMAMUX_Type *pDMAMUX0 = DMAMUX0;
DMAMUX_DisableChannel(DMAMUX0, 0);
DMAMUX_SetSource(DMAMUX0, 0, kDmaRequestMux0AlwaysOn63 );
DMAMUX_EnablePeriodTrigger(DMAMUX0, 0);
DMAMUX_EnableChannel(DMAMUX0, 0);
DMA_Type* pDMA0 = DMA0;
edma_config_t edmaConfig;
EDMA_GetDefaultConfig(&edmaConfig);
EDMA_Init(DMA0,&edmaConfig);
DMA0->CR = 0;
DMA0->TCD[0].SADDR = (uint32_t)(&DACdata[0]);
DMA0->TCD[0].DADDR = (uint32_t)(&DAC0->DAT);
DMA0->TCD[0].ATTR = DMA_ATTR_SSIZE(kEDMA_TransferSize2Bytes) | DMA_ATTR_DSIZE(kEDMA_TransferSize2Bytes);
assert(DMA0->TCD[0].ATTR==0x0101);
DMA0->TCD[0].SOFF = 2;
DMA0->TCD[0].DOFF = 0;
DMA0->TCD[0].NBYTES_MLNO = 2;
DMA0->TCD[0].SLAST = -16*2;
DMA0->TCD[0].DLAST_SGA = 0;
DMA0->TCD[0].BITER_ELINKNO =
DMA0->TCD[0].CITER_ELINKNO = 16;
DMA0->SERQ = DMA_SERQ_SERQ(0);
uint8_t dmaErr = DMA0->ES;
assert(dmaErr==0);
uint8_t dmaErq = DMA0->ERQ;
assert((dmaErq&1)==1);
#define PIT_CHANNEL kPIT_Chnl_1
{
pit_config_t pit_setup;
PIT_GetDefaultConfig(&pit_setup);
pit_setup.enableRunInDebug = 1;
PIT_Init(PIT,&pit_setup);
}
PIT_SetTimerPeriod(PIT, PIT_CHANNEL, USEC_TO_COUNT(5000U, CLOCK_GetFreq(kCLOCK_BusClk)));
PIT_StartTimer(PIT, PIT_CHANNEL);
#if 1
for(int i=20; i; i--) {
DMA0->SSRT = 0;
uint8_t dmaErr = DMA0->ES;
assert(dmaErr==0);
for(int j=2000000; j; j--) {};
};
#endif
I coded the following, which *almost* works. The DMA transfer is never started by the PIT. If I manually kick the DMA, transfer works properly so it looks like the DMA setup is OK but the triggering setup is not. Any idea what I've done wrong?
Thanks in advance,
Best Regards, Dave