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?
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.
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.
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?
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
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.
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
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.