DMA, für was sinnvoll?

OP #2882275
Lesenswert?

Hallo miteinander

Ich arbeite mich gerade ein wenig in die DMA-Welt ein und schon kommen 
die ersten Fragen:
Wann macht es Sinn, einen DMA-Controller zu verwenden?
Ich habe da an eine USART Kommunikation gedacht, welche keine fixen 
Grössen und Längen hat. Das Senden und Empfangen wäre schon viel 
eleganter, wenn ich den String wie beim Printf einfach "übergeben" 
könnte und der DMA erledigt dann den Rest. Dasselbe beim Empfangen, 
wobei es hier wohl etwas komplizierter sein wird, da nicht bekannt ist, 
wie viel vom Host gesendet wird.

Für ständig gleich gross bleibende Daten-Packete ist der DMA sicher sehr 
gut, aber gehts auch bei variablen? Wenn ja, wie könnte man so etwas 
umsetzen?

Besten Dank für die Antwort, MFG
Patrick
Gast #2882328
Lesenswert?

DMA macht in erster linie für Schnittstellen mit mehr Durchsatz Sinn, 
z.B. USB und Ethernet.
Dann kann die CPU nämlich derweil was besseres tun als memcpy.
USART dagegen mit den üblichen 14kByte/s langweilt aktuelle CPUs eher.
OP #2882465
Lesenswert?

aber man kann ja den DMA mit fast allen Peripherien einer CPU verbinden 
(ADC, DAC, CAN, SPI, I2C, I2S...) und da ist bei vielen längst nicht 
eine Geschwindigkeit von >1MByte/s.

Ich habe bis jetzt mit kleinen 8 und 16-Biter gearbeitet, und da hätte 
ich mir z.T. einen DMA gewünscht, da je nach Anwenung 16-72 DMIPS nicht 
gerade berauschend (Regler, RS232 Stream...). Jetzt bin ich mit einem 
STM32F4 am experimentieren, und hier ist die Leistung vorhanden, und 
auch DMAs. Also frage ich mich, wieso bei den kleineren DMA's so selten 
sind, da sie hier ja umso praktischer wären.
Persönliche Seite #2882470
Lesenswert?

Patrick B. schrieb:
> Also frage ich mich, wieso bei den kleineren DMA's so selten
> sind, da sie hier ja umso praktischer wären

Weil man das ganze interruptgesteuert ebenso einfach und viel flexibler 
machen kann ohne dafür extra Silizium vorzusehen. Gerade bei kleinen 
CPUs hat man eh nicht viel anderes zu tun sodass die paar ms welche für 
den Interupt + Softwarebehandlung draufgehen keine Auswirkung hat.
OP #2882478
Lesenswert?

Läubi .. schrieb:
> Gerade bei kleinen
> CPUs hat man eh nicht viel anderes zu tun sodass die paar ms welche für
> den Interupt + Softwarebehandlung draufgehen keine Auswirkung hat

Ich hatte einmal ein Projekt (Testadapter), der von einem Motorregler 
Daten via SPI empfängt, und diese dann via RS232->FT245 an den PC 
gesendet wurden.
Hier wurden vom Regler (STM32) 12 32-Bit Variablen (Regler-Interne Werte 
wie p,i,d vom Stromregler, vom V-Regler und vom Positionsregler) über 
das SPI gesendet und das alle 1ms. Parallel mussten 4 Variablen auf 
12-Bit umgerechnet (mit Faktoren versehen) werden, um eine DAC Ausgabe 
zu erreichen (SPI). Der Ft245 ist ebenfalls nicht einfach nur so 
anzusteuern... (Bitmanipulierung rundum). Das Ganze hat den 16-Bit 
Prozessor ziemlich schnell an die Grenze gebracht, obwohl es eigentlich 
nicht viel war.

Der Sprung von den kleinen zu einem ARM ist dann meistens gerade etwas 
zu gross, so dass dann lieber auf das bekannte zurückgegriffen wird.
(Firma: matzetronics) #2882486
Lesenswert?

Gerade bei den STM32 musst du manchmal DMA verwenden, um die 
Peripherie sinnvoll nutzen zu können. Ein Beispiel ist das 
'automatische' Abtasten mehrerer ADC Kanäle im Freilauf Modus. Im 
Gegensatz zu z.B. den XMegas hat hier nicht jeder ADC Kanal ein Ergebnis 
Register (zumindest beim STM32F1XX) und du bist gezwungen, die DMA zum 
Ablegen der Werte in den Speicher zu benutzen.
Wenn man das ganze aber erstmal ausprobiert hat, ist es eine recht 
elegante Lösung. Einmal angeschubst läuft das ganze im Hintergrund und 
dein Programm holt sich nur noch die Werte aus dem Speicher.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren