I'm playing with ADC and DMA and I'd configure a DMA channel to copy ram->ram without problem, and after the citter reaches zero it generates IRQ and the source address and destination address rewind using SLAST and DLAST, it all goes fine, BUT if the destination is ADC->SC1[0] (to begin a ADC sample) the ADC begins normally and DMA does his work fine, but after CITER reaches zero, DMA doesn't rewind nor generate IRQ. The only single change was the destinatino adress. Of course in that case the destination address don't move becouse always point to same ADC2->SC1[0].
here is the TCD I'm using
9 DMA0->TCD[0].CSR&=~0x0080;
8 DMA0->TCD[0].SADDR=(uint32_t)Adc_Sc; //Adc_Sc is an 8 byte arrays filled with 0x07
7 DMA0->TCD[0].SOFF=1;
6 DMA0->TCD[0].ATTR=0x0000;
5 DMA0->TCD[0].NBYTES_MLNO=1;
4 DMA0->TCD[0].SLAST=-8; //when Citer reaches zero Adc_Sc doesn't rewind!!
3 DMA0->TCD[0].DADDR=(uint32_t)&ADC2->SC1[0]; //if I change these with any ram pos, all goes fine
2 DMA0->TCD[0].DOFF=0;
1 DMA0->TCD[0].DLAST_SGA=0;
48 DMA0->TCD[0].CSR=0x0002; //when Citer reaches zero it does not generate irq
1 DMA0->TCD[0].CITER_ELINKYES=8; //using debug I've checked it reaches zero normally
2 DMA0->TCD[0].BITER_ELINKYES=8;
3 DMA0->SERQ=0x00;
4