Forum: Mikrocontroller und Digitale Elektronik DMA allgemeine Fragen


von Noob (Gast)


Lesenswert?

Servus,

ich habe noch nicht so ganz verstanden, wie das mit dem DMA 
funktioniert. Wie ich es verstanden haben kann man damit z.B. ohne den 
Prozessor zu belasten Daten über UART empfangen und ins Ram legen oder 
senden. Dafür braucht man jeweils einen Kanal, oder?

Was ist der Unterschied zwischen Controller mit DMA Ram zu denen ohne?

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


Lesenswert?

Noob schrieb:
> Wie ich es verstanden haben kann man damit z.B. ohne den
> Prozessor zu belasten Daten über UART empfangen und ins Ram legen oder
> senden. Dafür braucht man jeweils einen Kanal, oder?

Ja. Wir wissen zwar nicht, von welchem Prozessor du redest, aber 
prinzipiell stimmt das so.
Bei den STM32 z.B. kannst du gar nicht mehrere ADC Kanäle quasi simultan 
(im Freilauf) einlesen, ohne DMA zu benutzen, da der ADC nur ein 
Register fürs Messergebnis hat. Die DMA liest das Resultat und schreibt 
das dann in den RAM.

von Jasson J. (jasson)


Lesenswert?

Der Unterschied - oder nennen wir es Vorteil - ist, dass du viel 
Prozessorzeit sparen kannst.
Bleiben wir bei dem ADC als Beispiel. Angenommen du machst aus 
irgendeinem Grund rasend schnelle Wandlungen. Ohne DMA müsstest du nach 
jeder Conversion einen Interrupt auslösen, den Wert holen und z.B. in 
einen Ringbuffer schreiben. Dieser Vorgang des Programmunterbrechens und 
Springens kostet jedes mal Zeit. Wenn du den DMA jetzt aber so 
einstellst, dass er dir z.B. nach 100 Werten "bescheid sagt" dann 
springst nicht mehr 100 mal, sondern kannst gleich die Routine triggern, 
welche die 100 Werte verarbeitet. Du sparst dir also 100 mal Interrupt, 
100 mal hinspringen 100 mal speichern und 100 mal zurückspringen.

Dazu kann es noch noch sinnvolle Features geben, wie das der DMA sich 
meldet, wenn die Hälfte der angegebenen Datenmenge transferriert wurde. 
Auf die Art kann man kontinuierliche Datenströme erzeugen nach dem 
Prinzip die eine Hälfte bewegen, die andere simultan bearbeiten.

von Noob (Gast)


Lesenswert?

Danke für die Antworten. Im Sinn hatte ich die Microchip dsPIC33E.

Z.B. der dsPIC33EP32MC202 hat 4 DMA Kanale,
der dsPIC33EP32MC202 hat 15 DMA Kanäle und 4K DMA Ram.

Wozu kann man den DMA Ram dann gebrauchen?

von Reinhard Kern (Gast)


Lesenswert?

Noob schrieb:
> Was ist der Unterschied zwischen Controller mit DMA Ram zu denen ohne?

?? Ein Controller ohne DMA hat kein DMA, oder was soll die Frage?

Noob schrieb:
> Daten über UART empfangen und ins Ram

Grundsätzlich gibt es eine Quelle und ein Ziel - das kann ein 
I/O-Register sein, üblicherweise fest, und eine RAM-Adresse, die 
üblicherweise hochgezählt wird. Oder auch 2 RAM-Adressen, während 2 I/Os 
weniger üblich sind. Auf ein bestimmtes Ereignis, z.B. bei einem UART 
Data Ready, wird das Byte/Word von der Quelle gelesen und am Ziel 
gespeichert. Der/die nötigen Buszyklen werdem dem Prozessor geklaut.

Besonders effektiv kann das sein, wenn ein Prozessor getrennte 
Adressbereiche und Steuersignale für RAM und I/O hat, dann kann Lesen 
und Schreiben im selben Zyklus stattfinden, das ist die schnellste 
denkbare Transfermöglichkeit.

Gruss Reinhard

von Noob (Gast)


Lesenswert?

Reinhard Kern schrieb:
> Noob schrieb:
>> Was ist der Unterschied zwischen Controller mit DMA Ram zu denen ohne?
>
> ?? Ein Controller ohne DMA hat kein DMA, oder was soll die Frage?

Es ging in der Frage um das DMA RAM. Es gibt welche mit und ohne Ram bei 
Microchip. Wollte wissen welchen Vorteil das DMA Ram dann noch bietet.

von Reinhard Kern (Gast)


Lesenswert?

Noob schrieb:
> Es ging in der Frage um das DMA RAM. Es gibt welche mit und ohne Ram bei
> Microchip. Wollte wissen welchen Vorteil das DMA Ram dann noch bietet.

Wenn du kein RAM hast, kannst du nichts reinschreiben. Ein RAM kann 
natürlich auch extern sein, aber das ist bei Microchip weniger üblich. 
Auch der DMA-Controller kann extern sein, dazu muss der Prozessor bloss 
Anschlüsse für DMAREQ und DMAACK haben und natürlich einen 
Adress/Datenbus für externen Speicher. Im Prinzip muss das auch nicht 
unbedingt RAM sein, es ist z.B. sinnvoll, Daten aus einem Flash-Speicher 
per DMA an einen DAC zu verfüttern.

Gruss Reinhard

von Noob (Gast)


Lesenswert?

Es geht, wie in der Frage geschrieben um das DMA Ram, nicht das 
"Herkömmliche".

Der Typ oben ist natürlich falsch. Der dsPIC33EP256MU806 hat 15 DMA 
Kanale, 4K DMA Ram und 28K Standard Ram.

Die Frage ist was die 4K DMA Ram bringen?

von Nandfänger (Gast)


Lesenswert?

Noob schrieb:
> Der Typ oben ist natürlich falsch. Der dsPIC33EP256MU806 hat 15 DMA
> Kanale, 4K DMA Ram und 28K Standard Ram.
> Die Frage ist was die 4K DMA Ram bringen?

Guck halt in's Datenblatt, wenn Du was über den Chip wissen willst.
Hab' ich jetzt auch machen müssen, da ich den dsPIC noch nie verwendet
habe. Da steht dann "The dsPIC33EPXXX(GP/MC/MU)806/810/814 and
PIC24EPXXX(GP/GU)810/814 DMA subsystem uses dual-ported SRAM memory
(DPSRAM) and register structures that allow the DMA to operate across
its own, independent address and data buses with no impact on CPU
operation. This architecture eliminates the need for cycle stealing,
which halts the CPU when a higher priority DMA transfer is requested."

Mehr Info über's DMA gibts im "dsPIC33E/PIC24E Family Reference Manual",
Section 22, "Direct Memory Access (DMA)"

Gruß, N.

von (prx) A. K. (prx)


Lesenswert?

DMA ist nicht kostenlos. Ein Transfer blockiert u.U. kurz die CPU, um 
Zugriff auf das RAM zu erhalten. Es gibt IO-Module mit besonders hohen 
Tranferraten, bei denen dies signifikant sein kann, wie etwa Ethernet 
oder Highspeed-USB.

Ohne direkten Bezug auf diesen µC: Es ist es nicht unüblich, für solche 
Module separaten Speicher vorzusehen, auf denen sowohl CPU als auch 
IO-Modul zugreifen.

Microchips DMA-RAM ist ein Speicherbereich, auf den dessen DMA zugreifen 
kann, ohne die CPU dafür kurz anzuhalten.

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.