10.5. Direct Memory Access-Controller - kurz: DMA

history menue Letztmalig dran rumgefummelt: 09.11.07 07:48:55
DMA's (Direct Memory Access-Controller - Direkte Speicherzugriffs-Steuereinheiten) sind hoch integrierte Schaltkreise, welche ohne Kommunikation des Prozessors mit seiner Peripherie auf mehreren Adressports (typischerweise Vielfache von 8-Bit-Blöcken) gleichzeitig ermöglichen. Aus Prozessorsicht nimmt der DMA-Controller die Belastung des "Datenschaufelns" auf den RAM oder vom RAM bzw. der Peripherie ab. Sein Verhalten ist programmierbar. Sie sind in der Lage, einen Interrupt abhängig vom Ein- und/oder Ausgabezustand an eine übergeordnete Einheit abzugeben. Ausgangsseitig können sie keine Last treiben - sie sind lediglich als Quellen logischer Signale zu verstehen. - diese sind TTL-kompatibel. Grundsätzlich zeigen alle Ausgänge Tri-State-Verhalten, was aber nicht bedeutet, dass sie parallel geschalten werden können. DMA-Controller agieren auf dem gleichen Bus wie die CPU selbst, das heißt, sie übernehmen während ihrer Arbeit den Rechnerkern mehr oder weniger komplett.
  • die Aktivierung vieler Signale geschieht über logisches "L" - das liegt an der MOS-Technologie
  • einige PIOs lassen sich parallel auch in 4-Bit-Gruppen (Nibbel-Programming) programmieren - besonders häufig bei Microcontrollern anzutreffen
  • höher organisierte PIOs verfügen über ein Bestätigungssignal für Ein- und Ausgang (Quittung für außen: Daten erhalten, Anforderung nach innen: Daten verfügbar)
  • das nennt man dann "Shake Hand-Verfahren" - und die zugehörigen Signale heißen STROBE und READY
  • die einzelnen Kanäle verfügen über eine interne Prioritätenkette - extern ist es ebenfalls möglich, die Wichtung der Einzelbausteine durch Prioritäten festzulegen
  • das nennt man dann "Daisy Chain"-Kette oder Logik
  • dadurch ergibt sich eine Interrupt-Kaskade
1. Grundsätzliches Prinzip
2. Typische elektrische Beschaltung - Signalspiel - Interruptverhalten
3. Einsatzprinzip
4. Typpalette
5. DMA-Funktion am Beispiel Z80 DMA (U 858)

Logo der CPUs

Informatik-Profi-Wissen

Grundfunktion des PIO ist eigentlich ein Fangregister, denn mitunter (also eigentlich immer), fallen Daten immer genau dann an, wenn die CPU gerade nicht in der Lage ist sie abzuholen, bzw. stellt sie Daten zur Verfügung, die gerade nicht von der Außenstelle abgeholt werden können - Joa - genau das machen PIO's (Mist, verdammter, warum fallen mir solche alles entscheidenden Sätze immer erst am Rande ein: also Fangemeinde: ich hab' soeben und hiermit 'ne Klasse Definition für die PIO-Funktion gefunden - und das Schönste ist: die hat das Zeug für die Ewigkeit - na gut - reduzieren wir bis auf's Ende der Welt. Au weia - da fällt mir ja schon wieder so'n schöner Witz ein!

1. PIO-Prinzip history menue scroll up
Blöcke von mehreren logischen Signalen können aus dem Rechner an die Umgebungselektronik abgegeben, oder aus der Umgebungselektronik in den Rechner eingelesen werden. Das geschieht häufig auf einer Breite von 8 Bit, wobei Bridges dazu übergehen, den Port mit derzeit bis zu 32 Bit aufzufassen. Dominierend sind heute natürlich die Byte- bzw. Word oder Double-Word organisierten  Datenstrukturen. Wichtig ist in jedem Falle, dass mehrere Bits mit einem "Kommando" auf die Reise zu einer Gegenstelle geschickt werden. Natürlich muss diese auch in der Lage sein, die entsprechende Bitanzahl aufzunehmen und dazu auch entsprechend programmiert sein.
Die Arbeitsweise hat streng genommen nichts mit den Taktfrequenzen der beiden beteiligten Kanäle zu tun. Die Verfügbarkeit muss also entweder langfristig und in einem garantierten Zeitraum liegen (wobei ms hier schon extrem langfristig sind). Der PIO-Kanal hält Daten auch noch dann bereit, wenn auf dem internen Daten-BUS bzw. auf den externen Verbindungsleitungen schon lange andere Daten liegen. Er ist mit Fangregistern eng verwant.

Grundsätzlicher PIO-Aufbau

PIO in der Rechner-Gesamtstruktur

Die Leistungsfähigkeit eines PIO wird durch folgende Aspekte bestimmt:

  • maximal mögliche Taktfrequenz - das hat natürlich viel mit der Prozessortaktfrequenz zu tun - beide hängen an einem Signal

  • Breite eines Kanals - dabei sind acht Bit typisch gehen heut jedoch in Bridges von Mainboards bis zu Double-Word hinauf - das entspricht dann 64 Bit

  • Anzahl der Kanäle

  • Funktionalität der Kanäle (oft sind bestimmte Kanäle nicht für alle Aufgaben einsetzbar) - Z80 PIO kann beispielsweise im Byte-orientierten Eingabe-/Ausgabemodus mit Shake-Hand-Betrieb und Interrupt nur auf Kanal A arbeiten

  • Zusammenarbeit der Kanäle (können diese evtl. zu Funktionsgruppen zusammengefasst werden?)

  • Aufwand in der Programmierung und damit vor allem Zeit zur Umprogrammierung

  • eigene Interruptsteuerung

  • Dienstbestätigung- oder -anforderungssignale (Shake Hand)

... und das alles kann ein PIO ;-)

Paralleles Einlesen von 8 Bit


2. Typische elektrische Beschaltung - Signalspiel und Interruptverhalten history menue scroll up
Blöcke von mehreren logischen Signalen können aus dem Rechner an die Umgebungselektronik abgegeben, oder aus der Umgebungselektronik in den Rechner eingelesen werden. Das geschieht häufig auf einer Breite von 8 Bit, wobei Bridges dazu übergehen, den Port mit derzeit bis zu 32 Bit aufzufassen. Dominierend sind heute natürlich die Byte- bzw. Word oder Double-Word organisierten  Datenstrukturen
 
 

3. Einsatzprinzip history menue scroll up
Das nun mehrere Bit gleichzeitig übertragen werden können, klingt sehr gut, nur ist dem in der Praxis leider nicht so. Die Sache hat nämlich auch einen gewaltigen Haken: Und der besteht schlicht und ergreifend in der Tatsache, dass zur Übertragung der jeweiligen Bitzahl auch die jeweilige Anzahl von Leitungen - und zwar in Echtzeit benötigt werden. Bei den Frequenzen lässt sich leider auch mit Multiplexern nicht mehr tricksen.
Wenn aber die Leitungswege kurz und alle programmiertechnischen Hürden beseitigt sind, bietet der PIO verschiedene Betriebsarten an. Neben Microcontrollern sind die PIOs i8255 und Z80-PIO immer noch die Flagschiffe der parallelen Ein- und Ausgabe von Bitmustern.

und so werden 8-Bit CPUs und PIO miteinander grundsätzlich verschalten

Byte-Ausgabe mit und ohne Interrupt:
  • die Daten werden als 8-Bit Block auf die externen Portleitungen gebracht und es muss garantiert werden, dass sie auch im Verfügbarkeitszeitraum abgeholt werden
  • es werden bei Datenübernahme durch die externen Geräte keine Interrupts ausgelöst, wenn diese nicht ausdrücklich in einer der benötigten Formen programmiert wurde
  • die Quittungssignale reagieren, werden sie jedoch nicht von der peripheren Einheit aufgefangen und ausgewertet, ist von dort auch keine Reaktion zu erwarten
  • ein Beispielprogramm für die Byte-Ausgabe findet man auch hier

8-Bit PIO in Byte-Ausgabe-Betrieb ohne Interrupt

ohne Interrupt
  • mit dem Übernahmezeitpunkt stehen die Daten faktisch bereitgestellt vom Ausgaberegister am jeweiligen Port
  • die READY-Signale reagieren auf das Aufschalten von Daten mit dem Aktivitätssignal
  • an den Sender erfolgt jedoch keine Bestätigung, ob die Daten abgeholt wurden - mit dem Eintragen des nächsten Bitmusters in das Ausgaberegister sind alle vorherigen Daten verloren, wenn sie nicht vorab in der Quellmaschine gesichert wurden

8-Bit PIO in Byte-Ausgabe-Betrieb ohne Interrupt

mit Interrupt
  • mit dem Übernahmezeitpunkt stehen die Daten faktisch bereitgestellt vom Ausgaberegister am jeweiligen Port
  • die READY-Signale reagieren auf das Aufschalten von Daten mit dem Aktivitätssignal
  • wenige Takte später erfolgt die Anmeldung des zugehörig programmierten Interrupts
  • an den Sender erfolgt die Bestätigung, dass die Daten abgeholt wurden - mit dem Eintragen des nächsten Bitmusters in das Ausgaberegister sind alle vorherigen Daten verloren, wenn sie nicht vorab in der Quellmaschine gesichert wurden
Byte-Eingabe:
  • die Daten werden als 8-Bit Block von den externen Portleitungen geholt und es muss garantiert werden, dass sie auch im Verfügbarkeitszeitraum bestehen
  • es werden bei Datenübernahme von den externen Geräte keine Interrupts ausgelöst
  • die Quittungssignale reagieren und können softwaretechnisch ausgewertet werden
  • ein Beispielprogramm für die Byte-Eingabe findet man auch hier

8-Bit PIO in Byte-Eingabe-Betrieb ohne Interrupt

ohne Interrupt
  • mit dem Übernahmezeitpunkt stehen die Daten faktisch im Eingaberegister vom jeweiligen Port
  • die STROBE-Signale reagieren auf das Einlesen von Daten mit dem Aktivitätssignal
  • an die Quelle erfolgt jedoch keine Bestätigung, ob die Daten abgeholt wurden - mit dem Eintragen des nächsten Bitmusters auf den BUS sind alle vorherigen Daten verloren, wenn sie nicht vorab in der Quellmaschine gesichert wurden

8-Bit PIO in Byte-Eingabe-Betrieb mit Interrupt

mit Interrupt
  • mit dem Übernahmezeitpunkt stehen die Daten faktisch im Eingaberegister vom jeweiligen Port
  • die STROBE-Signale reagieren auf das Einlesen von Daten mit dem Aktivitätssignal
  • wenige Takte später erfolgt die Anmeldung des zugehörig programmierten Interrupts
  • an die Quelle erfolgt damit die Bestätigung dass die Daten erfolgreich abgeholt wurden - mit dem Eintragen des nächsten Bitmusters auf den BUS sind alle vorherigen Daten verloren, wenn sie nicht vorab in der Quellmaschine gesichert wurden
Byte-Ein- und Ausgabe auf unabhängigen Leitungsbündeln:
  • die Daten werden als 8-Bit Block von den externen Portleitungen geholt sowie gesendet und es muss garantiert werden, dass sie auch im Verfügbarkeitszeitraum bestehen
  • es werden bei Datenübernahme von den externen Geräte sowie auch beim Empfang externer Daten Interrupts ausgelöst
  • die Quittungssignale beider am Datenaustausch beteiligter Kanäle reagieren  und können softwaretechnisch ausgewertet werden oder aber via Interrupt entsprechend weiter verarbeitet werden
  • ein Beispielprogramm für die Byte-Eingabe findet man auch hier
  • die Daten werden als 8-Bit Block auf die externen Portleitungen gebracht und es muss garantiert werden, dass sie auch im Verfügbarkeitszeitraum abgeholt werden
  • es werden bei Datenübernahme durch die externen Geräte keine Interrupts ausgelöst, wenn diese nicht ausdrücklich in einer der benötigten Formen programmiert wurde
  • die Quittungssignale reagieren, werden sie jedoch nicht von der peripheren Einheit aufgefangen und ausgewertet, ist von dort auch keine Reaktion zu erwarten
  • ein Beispielprogramm für die Byte-Ausgabe findet man auch hier
   
   
Einzel-Bit Betrieb:
  • die Daten werden als einzelne, genau definierte Bitstellen von den externen Portleitungen geholt sowie gleichzeitig geschrieben und es muss garantiert werden, dass sie auch im Verfügbarkeitszeitraum bestehen
  • es werden bei Datenübernahme von den externen Geräte keine Interrupts ausgelöst
  • auch die Quittungssignale reagieren nicht
  • ein Beispielprogramm für die Byte-Eingabe findet man auch hier

8-Bit PIO im Einzelbit-Betrieb ohne Interrupt

ohne Interrupt
  • mit dem Übernahmezeitpunkt stehen die Daten faktisch bereitgestellt vom Ausgaberegister am jeweiligen Port beziehungsweise die entsprechend programmierten Bits im Eingaberegister
  • die READY- sowie auch die STROBE-Signale reagieren auf das Aufschalten von Daten mit dem Aktivitätssignal
  • an den Sender erfolgt jedoch keine Bestätigung, ob die Daten abgeholt wurden - mit dem Eintragen des nächsten Bitmusters in das Ausgaberegister sind alle vorherigen Daten verloren, wenn sie nicht vorab in der Quellmaschine gesichert wurden

8-Bit PIO im Einzelbit-Betrieb mit Interrupt betrieb

mit Interrupt
  • mit dem Übernahmezeitpunkt stehen die Daten faktisch bereitgestellt vom Ausgaberegister am jeweiligen Port beziehungsweise die entsprechend programmierten Bits im Eingaberegister
  • die READY- sowie auch die STROBE-Signale reagieren auf das Aufschalten von Daten mit dem Aktivitätssignal
  • wenige Takte später erfolgt die Anmeldung des zugehörig programmierten Interrupts
  • an den Sender erfolgt damit auch die Bestätigung, dass die Daten abgeholt bzw. von der beteiligten Gegenstelle eingelesen wurden - mit dem Eintragen des nächsten Bitmusters in das Ausgaberegister sind alle vorherigen Daten verloren, wenn sie nicht vorab in der Quellmaschine gesichert wurden

4. Typpalette history menue scroll up
Klasse Bauelemente-Typ Funktion

74 - ; 74 LS; 47 HCT

i8212 8 Bit bidirektionales Fangregister mit Interruptsteuerung
n-MOS i8255 3-Kanal-PIO des 8086-Systems
n-MOS Z80-PIO 2-Kanal-PIO des Z80-Systems

elektrische Bauelemente-Übersicht Fangregister und PIOs in verschiedenen Technologien



zur Hauptseite
© Samuel-von-Pufendorf-Gymnasium Flöha © Frank Rost im Dezember 2004

... dieser Text wurde nach den Regeln irgendeiner Rechtschreibreform verfasst - ich hab' irgendwann einmal beschlossen, an diesem Zirkus nicht mehr teilzunehmen ;-)

„Dieses Land braucht eine Steuerreform, dieses Land braucht eine Rentenreform - wir schreiben Schiffahrt mit drei „f“!“

Diddi Hallervorden, dt. Komiker und Kabarettist

Diese Seite wurde ohne Zusatz irgendwelcher Konversationsstoffe erstellt ;-)