Forum: Mikrocontroller und Digitale Elektronik Xmega DMA anhalten


von Florian E. (fofi1)


Lesenswert?

Servus,

ich habe ein kleines Problem mit der Xmega DMA. Da ich leider keine 
Kanäle mehr frei habe muss ich für Senden/Empfangen auf der SIO den 
selben DMA Channel verwenden.

Ablauf ist so:
- Die DMA sendet x Zeichen
- Die DMA wartet auf x Zeichen zum empfang. Sollten diese innerhalb von 
200ms nicht ankommen schaltet die DMA wieder auf RX.

Wenn die DMA im RX Betrieb schon ein paar Zeichen empfangen hat, aber 
wegen des Timeouts dann auf TX umgeschaltet werden soll, entsteht ein 
Error auf dem DMA Channel. Dieser lässt die anderen Channels des DMA 
Controllers kurz stehen....folglich entsteht Müll auf den anderen 
Channels.

Gibt es eine Möglichkeit, eine laufende DMA Transaktion sauber 
abzubrechen ohne dass sie einen Error wirft? Wenn ich das Channel Enable 
Bit auf 0 setze bekome ich einen Error

Controller ist ein Atxmega128A4U


Gruß,
Flo

: Bearbeitet durch User
von Alexxx (Gast)


Lesenswert?

>> Da ich leider keine Kanäle mehr frei habe muss ich für Senden/Empfangen auf der 
SIO den selben DMA Channel verwenden...

Lohnt sich dann der Aufwand überhaupt noch? Wäre es nicht sinnvoller, 
beides über INT-Routinen zu machen???

Jedenfalls kann eine Transaktion nicht einfach abgebrochen werden.
Wenn du die Anzahl der empfangenen Zeichen weist, kannst du den 
Transfercount darauf setzen und auf Transaction complete prüfen.
Dann kannst du umschalten...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.