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
>> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.