LPC40xx - DMAenable innerhalb einer UART-ISR bringt falsche Übertragung

Gast #3534380
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.