Xmega DMA anhalten

OP #5995865
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
Gast #5996043
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren