Gast
#4914871
Hallo, ich habe einen XMega32A4U und möchte unter anderem die Versorgungsspanng überwachen. Der ADC läuft durch (free run), DMA holt sich regelmäßig das Ergebnis und legt es im RAM ab, das Hauptprogramm holt sich die Daten ab und zu aus dem RAM zwecks Anzeige auf dem Display ab. Bis hierhin funktioniert alles wunderbar. Nun wollte ich mittels des Compare-Registers des ADC ein Interrupt auslösen lassen, sobald die Spannungsversorgung einbricht (Brownout in Software). Wenn ich den Interrupt aktiviere, funktioniert zwar der Interrupt zuverlässig, der RAM bleibt aber leer (0x0000), sprich DMA funktioniert nicht. Scheint als würden der Compare-Register des ADC und der DMA sich um das Ergebnis streiten und der DMA ständig den kürzeren ziehen. Kann das einer nachvollziehen? Gibt es ein Workaround? Habe ich einen Fehler gemacht? Hier meine Konfiguration (andere Kanäle weg gelassen, zum aktivieren des Interrupt die auskommentierte Zeile aktivieren):
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |