K20 ADC with DMA

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

K20 ADC with DMA

1,523 Views
knipsknaps
Contributor II

Folks,

 

we have trouble to get the K20 configured correctly with ADC and DMA.

 

Our idea is quite easy explained: We want  i.e 10 consecutive samples of ADC0 (triggered by PDB) to be stored in 10 consecutive memory locations (32 bits)  by DMA. After the 10th conversion we want to get an interrupt to start some CPU action. 

 

Our ADC is running properly and triggering by PDB also works fine.

 

We now have tried to get one sample to be converted and transferred by DMA for testing, but the DMA wil never be triggered...

 

The ADC configuration is

 

  ADC0_CFG1 = ADC_CFG1_ADIV(0x3) | ADC_CFG1_MODE(0x1) | ADC_CFG1_ADICLK(0x1);

  ADC0_CFG2 = ADC_CFG2_ADLSTS(0x2);

  ADC0_SC2 = ADC_SC2_ADTRG_MASK | ADC_SC2_DMAEN_MASK ;

  ADC0_SC3 =  ADC_SC3_AVGS(0x0);

  ADC0_SC1A = /*ADC_SC1_AIEN_MASK |*/ ADC_SC1_ADCH(26);

  ADC0_SC1B = /*ADC_SC1_AIEN_MASK |*/ ADC_SC1_ADCH(26);

 

The DMA and DMA mux configuration is like that:

 

  SIM_SCGC6 |= SIM_SCGC6_DMAMUX_MASK;

  SIM_SCGC7 |= SIM_SCGC7_DMA_MASK;

  DMA_CR = 0;

  DMA_SERQ = 0x1;

  DMA_CERR = 0x40; //Clear all errors

  DMA_DCHPRI0 = 0;

  DMA_TCD0_SADDR = (uint32_t)&ADC0_RA;

  DMA_TCD0_SOFF = 0;

  DMA_TCD0_ATTR = 0x202; //Source and destination size 32bit, no modulo

  DMA_TCD0_NBYTES_MLNO = 0x4;

  DMA_TCD0_NBYTES_MLOFFNO = 0x4;

  DMA_TCD0_NBYTES_MLOFFYES = 0x4;

  DMA_TCD0_SLAST = 0;

  DMA_TCD0_DADDR = (uint32_t)&adc_dma;

  DMA_TCD0_DOFF = 0x4;

  DMA_TCD0_CITER_ELINKYES = 0x1;

  DMA_TCD0_CITER_ELINKNO = 0x1;

  DMA_TCD0_DLASTSGA = 0;

  DMA_TCD0_BITER_ELINKYES = 0x1;

  DMA_TCD0_BITER_ELINKNO = 0x1;

  DMA_TCD0_CSR = 0xA;

 

  DMAMUX_CHCFG0 = 0;

  DMAMUX_CHCFG0 = 40 | 0x80; //Set DMA Channel0 to ADC0 and enable

 

Any idea, what we are doing wrong ?

 

Any support is welcome. Thanks in advance.

 

Regards, Ulf 

 

0 Kudos
Reply
1 Reply

544 Views
konrada
Contributor IV

Have you looked at DMA_ES, where EDMA reports the many ways one can get DMA setup wrong?

0 Kudos
Reply