Thanks for your answer Mark, but I haven't got understood the whole code of your uTasker project.
So I tried to write a very simple example with the help of your code and the datasheet. This example
should only wait for a the adc complete flag and then write the adc data to my ringbuffer... But if I
debug the program, I get some errors in the DMA_ES register and the dma doesn't work
(TCDn_DADDR is inconsistent with TCDn_ATTR[DSIZE])
Do you knwo what I can do now?
Thanks
Pascal
{
| | ADC0_SC1A = ADC_SC1_ADCH(0x13); |
| | |
| | ADC0_CFG1 |= ADC_CFG1_MODE(0x03); |
| | ADC0_CFG1 |= ADC_CFG1_ADIV(0x03); |
| | |
| | ADC0_SC1A = ADC_SC1_ADCH(0x13);//1A |
| | |
| | |
| | ADC0_SC3 |= ADC_SC3_ADCO_MASK; |
| | //ADC0_SC2 |= ADC_SC2_DMAEN_MASK; |
| |
| | |
}
void DMA_init(void)
{
SIM_SCGC6 |= SIM_SCGC6_DMAMUX_MASK;
SIM_SCGC7 |= SIM_SCGC7_DMA_MASK;
/*Start the sequence*/
DMA_ERQ |= DMA_ERQ_ERQ0_MASK;
/* Set the Source Address*/
DMA_TCD0_SADDR = (uint32_t)(&ADC0_RA); //UART2_D 0x4006C007
/* Destination address */
DMA_TCD0_DADDR = (uint32_t)(&UART_RINGBUFFER);
/* Source offset*/
DMA_TCD0_SOFF = 0; // No offset
/* Destination offset*/
DMA_TCD0_DOFF = 0; //No offset
DMA_TCD0_ATTR = 0x00
| DMA_ATTR_SSIZE(4)
| DMA_ATTR_DSIZE(4);
/* Transfer size */
DMA_TCD0_NBYTES_MLNO = 4; //4 byte
/* No adjustment to source address */
DMA_TCD0_SLAST = 0;
/* No link channel, transactions */
DMA_TCD0_CITER_ELINKNO = 1; //1 major loop
/* Adjustment to destination address */
DMA_TCD0_DLASTSGA = 0;
/* No link channel, transactions */
DMA_TCD0_BITER_ELINKNO = 1; //1 major loop
DMA_TCD0_CSR = 0;
DMAMUX_CHCFG0 = 0x00;
DMAMUX_CHCFG0 = 0x00
|DMAMUX_CHCFG_ENBL_MASK
|DMAMUX_CHCFG_SOURCE(40); //Enable channel 0, Request souurce = ADC0
}