 |
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)
|
 |
|
 |
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! |
 |
|
 |
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. |
 |
|
 |
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 |
 |
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
|
|