Hallo Leute,
ich versuche schon den ganzen Nachmittag vergebens einen 12 Bit ADC-Wert
über den DMA-Controller im SDRAM abzulegen. Irgendwie scheint das ganze
schon zu funktionieren, nur nicht so wie ich es will.
Der DMA legt im SDRAM auch Werte ab, allerdings nur das LOW-Byte der ADC
Wandlung und dieses gleich doppelt (hintereinander).
Controller ist ein XMEGA128A1. Ich nutze ein XPLAIN-Board.
Burst-len ist auf 2 Bytes eingestellt, dann müsste er doch auch 2 Bytes
abholen?
1 | / setup ADC for continuous acquisition 12 bits, single ended on
|
2 | // PORTA:0
|
3 | ADCA.CH0.CTRL |= 0x81; // configure single ended no gain on CH0
|
4 | ADCA.REFCTRL = 0x10; // use internal Vref = VCC-0.6
|
5 | ADCA.CTRLB = 0x8; // freerun, 12 bit right justified
|
6 | ADCA.CTRLA = 1; // enable ADC
|
7 |
|
8 | // configure DMA
|
9 | DMA.CTRL = 0x80; // Enable, single buffer, round robin
|
10 | DMA.CH0.ADDRCTRL = 0xc5;// Reload source addr after each burst, incr des, fix src
|
11 | DMA.CH0.TRIGSRC= 0x10; // ADCA CH0 is trigger source
|
12 | DMA.CH0.TRFCNT = 1; // Buffer is len bytes
|
13 |
|
14 | //des addr
|
15 | DMA.CH0.DESTADDR0 =0x00;
|
16 | DMA.CH0.DESTADDR1 =0x40;
|
17 | DMA.CH0.DESTADDR2 =0x00;
|
18 |
|
19 | //src addr
|
20 | DMA.CH0.SRCADDR0 =0x24;
|
21 | DMA.CH0.SRCADDR1 =0x02;
|
22 | DMA.CH0.SRCADDR2 =0x00;
|
23 |
|
24 |
|
25 | // Enable, repeat, 2 byte, burst
|
26 | DMA.CH0.CTRLA = 0x95;
|
Kann mir jemand von euch einen tipp geben, welches register ich falsch
gesetzt habe?
Bin für jede Hilfe dankbar!