Forum: Mikrocontroller und Digitale Elektronik DMA: Verständnisfrage


von StinkyWinky (Gast)


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?

von Wolfram (Gast)


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.

von Dr. Ashayk Egsi (Gast)


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.

von Rolf Magnus (Gast)


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.

von StinkyWinky (Gast)


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.

von Jörn P. (jonnyp)


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.

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.