www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DMA: Verständnisfrage


Autor: StinkyWinky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Bei DMA werden ja z.B. die Daten von der Preipherie direkt zum Speicher 
transferiert, ohne dass die CPU belastet wird.

Frage 1)
Da die CPU während des DMA-Transfer vom Adress- und Datenbus getrennt 
ist, kann sie ja eh nur Däumchen drehen?

Falls nicht, Frage 2)
Wenn die CPU während eines DMA-Transfer zufällig die selbe 
Speicheradresse lesen möchte, welche durch DMA gerade beschrieben wird, 
was passiert dann genau? Wird die CPU warten oder wird sie Mist lesen?

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CPU und DMA sind Busteilnehmer.
zu 1.
bei einem Buszugriff auf jeden Fall

zu 2.
kann nicht passieren da nicht beide gleichzeitig zugreifen können.

Autor: Dr. Ashayk Egsi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

soweit ich mich erinnern kann (länger her und plattformabhängig) greift 
der DMA-Controller "phasenverschoben" auf den RAM zu, so kommt er sich 
nicht mit der CPU ins Gehege.
Nachdem die CPU bzw. Dein Code den DMA-Transfer initiiert bist auch Du 
für die Datenkonsistenz verantwortlich. Der Controller schaufelt nur 
dumm die Daten von Peripherie <=> RAM.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Da die CPU während des DMA-Transfer vom Adress- und Datenbus getrennt
> ist, kann sie ja eh nur Däumchen drehen?

Nicht unbedingt. Die CPU hat ja meistens auch einen Cache. Solange sie 
nicht auf Code oder Daten zugreifen muß, die nicht im Cache liegen oder 
auf Peripherie, kann sie währenddessen weiterarbeiten.

> Wenn die CPU während eines DMA-Transfer zufällig die selbe
> Speicheradresse lesen möchte, welche durch DMA gerade beschrieben wird,
> was passiert dann genau?

"zufällig" wird sie das eher nicht tun, denn die CPU greift ja nicht 
einfach mal so auf irgendwelche Speicherstellen zu. Sie führt die 
Zugriffe aus, die im Programm stehen, und da mußt du dann selbst dafür 
sorgen, daß es hier keine Konflikte gibt. Das kann z.B. durch 
double-Buffering geschehen oder durch einen Ringpuffer, der immer nur 
soweit gelesen wird, wie die Hardware schon geschrieben hat.

> Wird die CPU warten oder wird sie Mist lesen?

Warten muß sie eh, weil sie nicht gleichzeitig mit dem DMA-Controller 
zugreifen kann.
Was nachher rauskommt, ist dann aber im Prinzip trotzdem Zufall, je 
nachdem, ob die CPU den Zugriff kurz vor oder kurz nach dem 
DMA-Controller durchführt.

Autor: StinkyWinky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit "zufällig" meinte ich bezogen auf die Zeit, falls nämlich die 
Synchronisation schief laufen würde.

Die CPU liest die Daten entweder vor oder nach dem DMA-Zugriff. Sie 
bekommt also entweder die alten oder die neuen Daten.
Daher kann ich davon ausgehen, dass die gelesenen Daten keinen 
"internen" Müll enthalten.

Autor: Jörn Paschedag (jonnyp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt ja nicht nur den tristate Adress- und Datenbus sondern auch noch 
den Controlbus. Die cpu übergibt dem DMA-Controller die Parameter 
woraufhin der über controlbus einen Busrequest anfordert und damit alle 
auffordert sich vom adress/datenbus zu verziehen. Sind alle weg, erhält 
der DMA einen busgranted und darf loslegen. Über den controlbus wird 
auch zurück gemeldet wenn der dma fertig ist.
Das war es in ganz kurz. Check doch mal arbitration oder vme-bus.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.