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