Verständnisfrage UART Rx + DMA

Gast #1457359
Hallo,


ich arbeite gerade Hobby-technisch an einem Projekt, bei dem ein 
Mikrocontroller an den PC gekoppelt ist (USART <=> USB/UART-Wandler <=> 
PC). Ich plane Bitraten im Bereich 1-3 MBit zu nutzen. Die "hohe" 
Datenrate wird eigentlich nur in Richtung PC benötigt, in Richtung 
Controller würde wesentlich weniger ausreichen - allerdings kann man 
einen USART nun mal nur mit einer Baudrate konfigurieren.

Der verwendete Controller bietet DMA für Tx und Rx an. In Senderichtung 
(MC => PC) ist das in meinen Augen ganz einfach: Paket der Größe X 
aufsetzen und warten bis die DMA "fertig" meldet.

In Empfangsrichtung (PC => MC) stehe ich vor dem Problem, dass ich 
definitiv nicht für jedes empfangene Byte einen Interrupt haben möchte, 
dann käme der Controller zu nichts anderem mehr. Wenn ich hier DMA 
nutzen möchte, müsste ich alle Pakete bzgl. der Größe vereinheitlichen 
(bspw. X mal 10 Byte). Die DMA würde ich dann auf 10 Byte konfigurieren. 
Gibts da einen eleganteren Weg, so dass ich nur die wirklich benötigten 
Daten zum Controller schicken muss und nicht noch Dummy-Bytes ... ?


Besten Dank für erhellende Tipps :)

Alex
Gast #1457573
Rx+DMA ist immer ein bißchen kniffelig. Nimm einen größeren 
Eingangspuffer und laß das Programm in gewissen Abständen nachsehen, 
wieweit der Zeiger für den Puffer gekommen ist.

Bei neueren µCs gibt es DMA mit speziellen Modi, wo beim Erreichen des 
Pufferendes auf einen alternativen Puffer umgeschaltet wird. Oder man 
verwendet einen µC mit UART+FIFO.
Deiner scheint wohl beides nicht zu haben.
Gast #1457670
An so etwas habe ich auch schon gedacht, ich stelle es mir nur 
race-condition technisch etwas schwierig vor. Bei 3 MBit kommen im 3,3 
µs Takt Bytes rein (wenn auch nur alle Jubeljahre, dann aber ein Burst). 
Ich muss da nochmal genau nachsehen, inwiefern man die DMA zur Laufzeit 
umkonfigurieren kann, ohne das Daten verloren gehen. Also: DMA 
kontrollieren und Zustand sichern, dann DMA umkonfigurieren auf anderen 
Puffer, dann Daten aus erstem Puffer auslesen. Kritisch ist halt die 
Zeit zwischen Lesen des Zustands der DMA und dem Umkonfigurieren.

Nur zur Info: Der Prozessor ist ein STM32F10xxx.
Gast #1457697
> Kritisch ist halt die
>Zeit zwischen Lesen des Zustands der DMA und dem Umkonfigurieren.

Das glaube ich nicht. Probier es einfach aus.
Den Prozessor kenne ich nicht näher. Vielleicht hat er aber schon ein 
Flag, das gesetzt wird (+Interrupt), wenn der halbe DMA-Transfer 
abgelaufen ist. Damit könnte man rechtzeitig den Puffer umkonfigurieren.
Gast #1457707
Ich sehe gerade, 'DMA Half Transfer' haben die µCs ja. Vielleicht gibt 
es auch noch einen Repeat-Modus, der am Ende einen Interrupt auslöst und 
wieder bei der Startadresse ohne CPU-Eingriff beginnt. Dann hättest Du 
einen schönen Ringpuffer.
#1457717
Gast schrieb:

> Ich sehe gerade, 'DMA Half Transfer' haben die µCs ja. Vielleicht gibt
> es auch noch einen Repeat-Modus, der am Ende einen Interrupt auslöst und
> wieder bei der Startadresse ohne CPU-Eingriff beginnt.

Gibt es. Nennt sich "circular mode". In Verbindung mit dem "half 
transfer interrupt" wird das wasserdicht.
Gast #1457726
>Nennt sich "circular mode".

Schön! Ich hatte im Datenblatt nach 'repeat' gesucht und nichts 
gefunden.
Dann brauche ich ja nicht meine Renesas-Lieblinge zu empfehlen :-)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.