8255
& 71055 |
PPI-Baustein mit drei 8bit TTL-Port
Programmierung
PPI
heist peripherial-port-interface und ist ein universeller
I/O-Schaltkreis für die 8-bit parallele Ein-Ausgabe. Der 8255 bzw.
uPD71055-C enthält drei Ein-Ausgabeports (bezeichnet mit Port A, B
und C), über die der digitale Datenaustausch zwischen einem Prozessor
und der Peripherie erfolgt. Die Konfiguration der drei Ein-Ausgabeports
erfolgt über ein zusätzliches Register, dem Control-Register
bzw. auch Komandoregister oder Status-Register genannt. Die drei Ports
A, B und C werden durch das Einschreiben eines Bytes in das Control-Register
entsprechend konfiguriert.
Beispiel
Mit
dem Befehl: OUT(Statusport, 128 + xxx) wird das Status-Register des 8255-Portbausteins
programmiert. Dieses Register gibt vor, welche der drei E/A-Ports (PA,
PB und PC) auf Eingabe oder Ausgabe gestellt werden. Alle Ports können
sowohl als Ausgabe- oder Eingabe-Port fungieren. Der Port "PC" kann in
zwei Hälften unterteilt werden, sodass 4 bit als Ein- und 4 bit als
Ausgabe dienen können. Das Komandowort, dass zum Status-Port des 8255
gesendet wird, muss vor der jeweiligen Nutzung der E/As erfolgen. Das geschriebene
Komandowort ist so lange gültig, bis es mit einem anderen Wert überschrieben
wird. Es muss aber mindestens ein mal nach dem Einschalten des PCs erfolgen,
um den 8255 grundsätzlich zu initialisieren. Die Initialisierung des
Komandoregisters ist jedoch nach Wegnahme der Spannungsversorgung (PC wird
abgeschaltet) wieder ungültig bzw. gelöscht.
Registerbelegungstabelle für ISA-Karten:
| I/O-Adresse | Lesen | Schreiben |
| Basisadresse + 0 | 8255/Port A lesen | in 8255/Port A schreiben |
| Basisadresse + 1 | 8255/Port B lesen | in 8255/Port B schreiben |
| Basisadresse + 2 | 8255/Port C lesen | in 8255/Port C schreiben |
| Basisadresse + 3 | - | Betriebsart des 8255 festlegen |
Registerbelegungstabelle für PCI-Karten (bei D0-D7 Datenbus):
| I/O-Adresse | Lesen | Schreiben |
| Basisadresse + 0 | 8255/Port A lesen | in 8255/Port A schreiben |
| Basisadresse + 4 | 8255/Port B lesen | in 8255/Port B schreiben |
| Basisadresse + 8 | 8255/Port C lesen | in 8255/Port C schreiben |
| Basisadresse + C | - | Betriebsart des 8255 festlegen |
Registerbelegungstabelle für PCI-Karten (bei D8-D15 Datenbus):
| I/O-Adresse | Lesen | Schreiben |
| Basisadresse + 1 | 8255/Port A lesen | in 8255/Port A schreiben |
| Basisadresse + 5 | 8255/Port B lesen | in 8255/Port B schreiben |
| Basisadresse + 9 | 8255/Port C lesen | in 8255/Port C schreiben |
| Basisadresse + D | - | Betriebsart des 8255 festlegen |
Die ausführliche, deutsche Zusammenstellung zur Programmierung des Komandowortes finden Sie im Anhang der jeweiligen PC-Kartenbeschreibung oder in englischer Sprache auf unserer Web-Seite als PDF-Dokument unter:
Datenblatt 8255 Port-Baustein von INTEL
Datenblatt 8255 Port-Baustein von HARRIS
PCI-Dekoder und I/O-Port-Adressierung
Die Literaturstelle dazu
ist:
Dale Roberts
Direct Port I/O and Windows
NT
Dr.Dobb's Journal
Von Dale Roberts wird der Treiber GIVEIO.SYS und ein Treiber -Installationsprogramm für Windows NT - INSTDRV.EXE – zur Verfügung gestellt. In einem DOS-Consolen-Fenster ( unter NT ) erfolgt dann die Installation mit: INSTDRV GIVEIO <Pfadname>\GIVEIO.SYS
Da unter NT die Hardwaretreiber normalerweise im Verzeichnis %SystemRoot%\system32\drivers stehen, ist es üblich, den Treiber GIVEIO.SYS vorher auch dorthin zu kopieren. Für <Pfadname> ist dann folglich %SystemRoot%\system32\drivers einzusetzen. Damit der Treiber nach jedem Rechnerstart automatisch zur Verfügung steht, ist er mit der Systemsteuerung entsprechend einzustellen: Control Panel->Devices->GIVEIO->Start Up->Automatic. Ein Programm, das Portzugriffe ausführen will, muß den Treiber zuvor aufrufen, damit für dieses Programm die Ports entsprechend freigegeben werden. Folgende Programmzeilen sind in das eigene Programm einzufügen:
#include <windows.h>
int main (void )
{
.....
HANDLE h;
h = CreateFile("\\\\.\\giveio",
GENERIC_READ, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
NULL);
if(h == INVALID_HANDLE_VALUE)
{
printf("giveio nicht installiert!\n");
return (-1);
}
CloseHandle(h);
......
}
Die Original-Pinbelegung des 40pol. 8255 :