Forum: Mikrocontroller und Digitale Elektronik DMA, für was sinnvoll?


von Patrick B. (p51d)


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

von dma (Gast)


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.

von Patrick B. (p51d)


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.

von Läubi .. (laeubi) Benutzerseite


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.

von Patrick B. (p51d)


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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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.

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.