Forum: Mikrocontroller und Digitale Elektronik LPC40xx - DMAenable innerhalb einer UART-ISR bringt falsche Übertragung


von Sebastian (Gast)


Lesenswert?

Hallo,

ich versuche eine UART-Übertragung mittels ISR und DMA zu Empfangen.
Dabei soll als erstes ein Header mittels ISR empfangen werden, in 
welchem die Adresse und die Länge der Payload ausgewertet werden. Wenn 
die Adresse stimmt wird die Anzahl der noch folgenden Bytes aufgenommen 
und als Transfersize für den DMA eingesetzt und innerhalb der ISR der 
DMA-Channel enabled.
Soweit funktioniert das auch, aber der DMA legt als ersten Wert immer 
ein leeres Byte in den Empfangspuffer und hört nach dem vorletzten Byte 
auf.
Als Beispiel, 5 Bytes Payload sollen gesendet werden:
Adresse | 05(folgende Payload) | Byte1 | Byte2 | Byte3 | Byte4 | Byte5

Im Empfangspuffer wird abgelegt:

0 | Byte1 | Byte2 | Byte3 | Byte4

Byte5 fehlt und das erste Byte ist immer 0.

Kann mir jemand genau erklären wie der DMA getriggert wird?
Ist es möglich, dass wenn ich mich innerhalb der ISR befinde der DMA 
getriggert wird obwohl der FIFO leer ist und das Interrupt-Pending-Bit 
gelöscht ist?
Ich habe schon ein UART-FIFO-Reset(keine Option), ein DMA-FIFO-Drain 
versucht. Es bleibt dabei.
Das einzige was bisher funktioniert hat war den DMA außerhalb des ISR zu 
enablen. Das ist aber keine Lösung, weil ich nicht weiß wie viel Zeit 
zwischen der ISR und dem Enable vergeht und so ein Overflow auftreten 
kann.

Vielen Dank schon mal.

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.