Elektronische Grundlagen Versuch E13, Schnittstellen und ihre ...

uni.magdeburg.de

Elektronische Grundlagen Versuch E13, Schnittstellen und ihre ...

Elektronische Grundlagen

Versuch E13, Schnittstellen und ihre Programmierung

Praktikumsgruppe IngIF 1, 21. Mai 2003

Stefan Schumacher 1

Sandra Ruske


Oliver Liebold


Vorbereitungsfragen

3.1

Zentrale Verarbeitungseinheit (ZVE, CPU)

- Speicher (RAM/ROM)

- I/O-Einheit

- Uhr (Clock)

- D/A-umsetzer

- Counter usw.

Das BUS-System, bestehend aus Adress-, Daten- und Systembus, verbindet die Komponenten

miteinander. Der Datenbus überträgt i.d.R. bidirektional Daten, während Steuerund

Adressbus die Modi der Teilnehmer bzw. anzusprechende Adressen überträgt.

Um mit peripheren Einheiten zu kommunizieren ist eine Umwandlung der Signale des

Systembus notwendig. Dazu werden in der I/O-Einheit

ˆ Interruptanforderungen weitergeleitet

ˆ Daten zwischengepuffert um die Übertragungsgeschwindigkeit anzugleichen und zu

synchronisieren

ˆ Datenumwandlung (D/A bzw. A/D und parallell / seriell resp. umgekehrt)

Es ist möglich spezielle Bausteine (z.B. DMA 2 -Controller) einzusetzen die die Kontrolle

über den BUS übernehmen und so die CPU entlasten.

3.2

Die boolesche Logik der Schaltungen wird über Logikgatter, FlipFlops und Busse realisiert,

welche zu Registern zusammengefasst werden.

Der serielle Port benötigt lediglich ein Schieberegister, da er die Daten seriell nach FIFO

Order ausgibt.

Der parallele Port hingegen benötigt mehrere (meist 8) parallele Datenleitungen und (2)

Steuerleitungen. Der Timer implementiert einen synchronen Bitzähler.

3.3

Üebertragungsrichtungen (bi-/unidirektional)

Übertragungswege (Kabel, Funk, Infrarot)

Frequenz

Wortbreite

1 PGP Schlüssel 0xB3FBAE33

2 Direct Memory Access

1


Anzahl der Anschließbaren Geräte

2


3.4

Bei der seriellen Datenübertragung werden die Signale nacheinander auf einer Datenleitung

versendet. Um Sender und Empfänger synchron zu halten gibt es zwei Möglichkeiten,

die asynchrone und die synchrone Datenübertragung

Für den Halbduplex- oder Simplex- Betriebsmodus sind nur zwei Leitungen für die serielle

Datenübertragung notwendig, die Übertragungsleitung und eine Masseleitung. Für

den Vollduplex- Modus sind es entsprechend doppelt so viele Leitungen, falls eine gemeinsame

Masseleitung benutzt wird, werden nur drei Leitungen benötigt.

Die Synchronisierung von Programmen und Sendedaten erfolgt mittels Pufferung. Die

CPU verschickt ihre Daten, die im TDR zwischengespeichert und dann an das TSR

geschickt werden. Sind TDR und TSR voll, bekommt die CPU das Signal keine weiteren

Daten zu schicken. Sind die Puffer durch eine Datenübertragung geleert worden,

bekommt die CPU wieder die Möglichkeit Daten zu schicken.

3.5

Datenübertragung mittels Stromschleife ist in vielen Umgebungen eine bevorzugte Technik;

meistens wird sie in industriellen Anwendungen eingesetzt. Die meisten Systeme

arbeiten mit der vertrauten, analogen 4-20 mA Stromschleife über Zweidraht. Ein verdrilltes,

zweiadriges Kabel dient sowohl als Spannungsversorgung für das Modul als auch

als Medium für die Übertragung des Ausgangssignals. Weniger populär ist die Dreidraht-

Stromschnittstelle, deren primärer Vorteil die Übertragung von zusätzlicher Leistung für

die Modulelektronik ist.

Stromschleife wird in der Regel über schnelle, Stromgekoppelte Daten-Optokoppler vorgenommen.

Dies gewährleistet in den meisten Applikationen eine galvanische Trennung

zwischen den verbundenen Geräten, so dass über TTY- (current-loop- ,20 mA- oder

Linienstrom-) Schnittstellen ohne weitere Schutzmaßnahmen in der Regel eine isolierte

Datenübertragung über eine große Distanz möglich ist. Der Vorteil der relativ sicheren

Übertragung wird bei der dieser Schnittstelle jedoch mit vergleichsweise niedrigen Datenraten

erkauft.

Die maximale Datenübertragungsrate beträgt 115 kB, üblich sind jedoch nur 9,6 kB

oder 19,6 kB. Die maximale Entfernung wird mit 1 km bei 2400 B angegeben.

Die 20mA- bzw. Current-Loop-Schnittstelle überträgt die Daten, indem in einer Leitungsschleife

ein 20mA-Strom im Takt der Datenbits ein- und ausgeschaltet wird. Im

Ruhezustand bzw. während der Übertragung von ”1Bits fließt ein konstanter Strom von

20 mA, während ”0Bits durch einen unterbrochenen Stromfluss gekennzeichnet sind. Innerhalb

jeder Stromschleife darf lediglich ein angeschlossenes Gerät den erforderlichen

Schleifenstrom von 20 mA liefern. Dieses Gerät bezeichnet man als aktiv, das andere als

passiv. Die Stromschnittstelle, auch unter dem Namen Linienstrom-, 20 mA-, Current-

Loop- oder TTY-Schnittstelle bekannt, ist nicht genormt.

3.6

Die Vielzahl der im PC vorhandenen Schnittstellen sind nicht auf das Anbieten sehr

spezialisierter Funktion beschränkt, sondern sie bieten viele Möglichkeiten, um die angebotenen

Funktion komfortabler und individueller zu handhaben. Die Schnittstellen

besitzen aus diesem Grunde ein oder mehrere Register, in denen die aktuelle Betriebsart

gespeichert ist. Werden die Register manipuliert, verändert sich auch das spezifische

3


Verhalten der Schnittstelle zur Peripherie und zum System. Im Bereich des PC gibt es

drei Möglichkeiten, die Register und damit die Schnittstelle zu konfigurieren:

1. direkte Adressierung

Hierfür sind genaue Kenntnisse über das System und die jeweilige Schnittstelle notwendig.

Verschiedene Prozessoren sprechen ihre Schnittstellen unterschiedlich an (Stichwort:

Speicherbezogene oder isolierte Adressierung). Weiterhin müssen Ein-/Ausgabeadressen

der Schnittstelle, die jeweilige Portinitialisierung, Registerfunktionen der Schnittstelle

und Datenformate der Schnittstellenbausteine bekannt sein.

2. BIOS-Interrupts benutzen

Das BIOS als unterste Ebene des Betriebssystems bietet Routinen an, über die mittels

dem BIOS zugeordneter Interrupts auch auf die Schnittstellen zugegriffen werden kann.

Kenntnisse über die Funktionsweise der Peripheriebausteine sind aber immer noch nötig,

ebenso wie über die Parameter der BIOS- Interrupts.

3. DOS- Interrupts benutzen

Das DOS (disk operating system) stellt ebenso wie das BIOS Routinen zur Verfügung,

über die auf die Schnittstellen zugegriffen werden kann. Da das DOS rechnerunabhängig

ist, sind keine Kenntnisse über die Adressen und Funktionen der Peripherie nötig.

Unter die Kategorie Softwareinterrupts fallen die Möglichkeit 2 und 3. Daraus kann man

ableiten, dass Softwareinterrupts eine große Rolle spielen, wenn es darum geht, Schnittstellen

möglichst einfach zu konfigurieren, insbesondere sind sie unumgänglich, wenn die

Unabhängigkeit eines Programms vom jeweilig verwendeten PC notwendig ist.

3.7

Das Prinzip des Handshaking soll hier am Beispiel des Intel PPI 8255 gezeigt werden.

Im Modus 1 werden je drei Leitungen des Ports C den Ports A und B als Handshake-

Leitungen zugeordnet. Auf ihnen werden die Signale STB (Strobe), ACK (acknowledge)

und INT (interrupt) übertragen. Die übrigen beiden Leitungen von Port C sind ebenfalls

zu Port A zugeordnet und können fürbeliebige Aufgaben benutzt werden.

Dateneingabe: Das angeschlossene Peripheriegerät legt die Daten auf die Portleitungen

von Port A oder B und signalisiert dem PPI 8255 überein kurzes Strobe- Signal am jeweiligem

Port, das Daten anliegen. Die negative Flanke dieses Signals setzt den FlipFlop

FF, so daß dessen Ausgangssignal IBF dem Peripheriegerät anzeigt, das das Eingaberegister

IB noch voll ist. Die positive Flanke von STB realisiert nun die Übernahme der

Daten von den Portleitungen nach IB. Ist IE (interrupt enable) gesetzt (im Statusregister),

so wird im Zusammenspiel mit dem IBF- Signal ein Signal auf dem Ausgang

INT erzeugt, das der CPU anzeigt, das Daten im IB vorliegen. Holt die CPU die Daten

irgendwann ab, sorgt das Lesesignal RD für die Rücknahme von INT und löscht IBF,

womit das angeschlossene Peripheriegerät erkennt, das der jeweilige Port wieder frei ist.

Datenausgabe: Der Prozessor legt die Daten auf den Datenbus und löst einen Schreibimpuls

WR (negativ) aus. Die Daten werden nun ins Ausgaberegister DR übertragen

und erscheinen kurz später auf den Portleitungen von entweder Port A oder B. Ein dem

DR zugeordnetes FlipFlop FF wird zurückgesetzt, dessen Low- Pegel OBF dem angeschlossenem

Peripheriegerät des Vorliegen von Daten anzeigt. Holt das Peripheriegerät

die Daten ab, quittiert es dies mit ACK. Die negative Flanke dieses Signals setzt das

FF zurück und damit auch OBF. Ist IE gesetzt, so wird nun ein INT- Signal an den

4


Prozessor geschickt, das ihm den Abschluss der Datenübertragung und die Bereitschaft

des Ports für eine neue Übertragung anzeigt.

Die Kontrolle des Datenflusses zwischen Sender und Empfänger erfolgt über die 3 Leitungen

des Handshake-Bus. Aufgrund der asynchronen Datenübertragung können Geräte

mit verschiedenen Übertragungsgeschwindigkeiten miteinander kommunizieren. Die maximale

Datenübertragungsgeschwindigkeit wird vom langsamsten Gerät bestimmt. Der

IEC-Bus verwendet ein Dreidraht-Handshake, wobei die Leitungen NDAC und NRFD

von mehreren Geräten zu unterschiedlichen Zeiten bedient werden. Hier gilt: - jede Datenübertragung

wird erst begonnen, wenn alle Geräte ihre Bereitschaft (NRFD = log. 0

gesendet haben - jede Datenübertragung wird erst dann abgeschlossen, wenn alle Geräte

ihre Fertigmeldung (NDAC = log. 0) gesendet haben

3.8

Wesentliche Merkmale:

Baustein für parallele Schnittstelllen (u.a. Datenübertragung)

24 programmierbare I/O-Pins

Drei 8-bit-Ports(Port A, B und C)

Port C wird in Teilpors (C-Low bzw. C-High) eingeteilt

drei verschiedene Modusarten:

Modus 0:

- Port C wird in zwei Teilports mit jeweils 4 Steuerleitungen unterteilt

- jeder Port(A oder B) kann dabei unabhängig voneinander zur Ein- und Ausgabe benutzt

werden

Modus 1:

- I/O-Aufgaben können zu oder von einem Port ermöglicht werden

- je drei Leitungen des Ports C werden den Ports A und B als Handshake- Leitungen

zugeordnet(zur Synchronisation der Datenübertragung)

Modus 2:

- nur Port A wird zur Datenübergabe(bidirektional) benutzt

- Port B kann als Ein- oder Ausgang verwendet werden

- Leitungen von Port C können als Handshake-Leitungen(wie im Modus 0)

oder als Ein-/Ausgabeleitung benutzt werden

RD-Leitung:

- Lesesignal

- Zeigt an, das Daten gelesen werden (siehe auch Aufgabe 3.7)

WR-Leitung:

- Schreibsignal

- Übernahme der Daten in den Datenpuffer (siehe auch Aufgabe 3.7)

A0,A1-Leitung:

- zur Programmierung der vier internen Register (Port A, B, C)

- Steuerwortregister)

RESET-Leitung:

- Rücksetzen des Bausteins

CS-Leitung:

- Signalleitung

5


- Baustein angewählt

Datenbus-Puffer:

- speichert Ein- und Ausgabedaten

Lese-/Schreibsteuerung:

- interpretiert die Steuersignale von jedem Port

- steuert das Verhalten der Ports (siehe auch 3.7)

3.9

Interruptverarbeitung im IBM-PC:

Um Interrupts zu verarbeiten gibt es für einen Rechner prinzipiell mehrere Organisationsmöglichkeiten.

Beim IBM-PC hat man ich für die Variante mit Interruptcontrollern

entschieden. Dies ist eine Hardware-Lösung, welche zum Vorteil hat, dass man den Prozessor

nicht belastet. Bei der Verarbeitung muß zuerst zwischen Software- und Hardware-

Interrupts unterschieden werden. Beim Software-Interrupt wird kein Interruptcontroller

benötigt, da der Prozessor den INT-Befehl als gültigen Opcode(VDI-Funktionsnummer)

erkennt und daraus den Interruptvektor berechnet und das Interrupt-Handling auslöst.

Hardware-Interrupts dagegen werden an Interruptcontroller gerichtet, welches dan das

Prioritätenhandling abwickelt und mit den Prozessor kommuniziert.

Arbeitsweise Interruptcontrollers PIC 8259:

Der Interruptcontroller PIC 8259 (programable interrupt controller) kann acht unterschiedliche

Unterbrechungsleitungen verwalten. Es lassen sich durch Kaskadierung bis

zu 64 unterschiedliche Unterbrechungsleitungen verwalten. Möchte nun ein angeschlossenes

Gerät (am Controller angeschlossen) ein Interrupt auslösen, so wird eine der Leitungen

IR0 bis IR7 gesetzt. Der PIC 8259 bemerkt dieses und ermittelt den Zustand

aller acht Eingangsleitungen, welchen er im IRR (interrupt request register) ablegt. Aus

den Zuständen ermittelt er die höchste Priorität, IR0 hat höchste, IR7 hat die niedrigste

Priorität. Dies ist nötig, da auch der Fall eintreten kann, dass mehrere Leitungen gleichseitig

gesetzt waren. Der Interruptcontroller kann anhand der Priorität erkennen, ob der

anliegende Interrupt das Recht hat, den aktuell ausgeführten Interrupt zu unterbrechen.

Daraufhin vergleicht der Controller, ob der nun ermittelte Interrupt mit der höchsten

Priorität maskiert (gesperrt) ist oder nicht. Ist dies nicht der Falls, so wird das höchste

Bit des IRR ins ISR-Register (interrupt service register) übertragen. Mit einem Signal

auf dem INT-Ausgang, welcher direkt mit dem INT-Eingang des jeweiligen Prozessors

verbunden ist, wird dem Prozessor mitgeteilt, das ein erlaubter IRQ vorliegt. Ist das

Bit IE (interrupt enable) in der CPU gesetzt, so bestätigt diese mit einem ersten INTA-

Signal. Daraufhin wird das IRR des Interruptcontrollers zurückgesetzt., da der Interrupt

akzeptiert wurde.

Der Prozessor sendet ein zweites INTA-Signal, woraufhin der PIC 8259 den Inhalt des

ISR an die CPU sendet. Bei dem Inhalt dieses Registers handelt es sich um ein Interruptvektor,

den der Prozessor nun verarbeitet (Unterbrechungsroutine wird ausgeführt).

Vektorinterrupt:

Das Verfahren des Vektorinterrupt wird als eines der schnellsten und elegantesten beschrieben.

Die Startadressen aller Ausnahmeroutinen sind in einer Interrupt Vector Table(IVT)

zusammengefasst. Jeder Ausnahmeursache wird als Vektor der Index zugeordnet,

unter dem in der Tabelle der Startpunkt ihrer Behandlungsroutine steht. Maskier-

6


are Interrupts stehen meist am Ende der Tabelle und nicht maskierbare vorn in der

Tabelle. Somit ist für Abarbeitung eines Interrupts die Interrupt Vektor Nummer (IVN)

notwendig, anhand derer die Startadresse der nun auszuführenden Routine ermittelt

werden kann.

Versuchsaufgaben

2.

Die Initialisierung des PPI erfolgte mit dem Steuerwort [10110100] 2 bzw. B4h welches

an Port 303h mit

-o 303 4b

übergeben wurde. Danach verwendeten wir folgende Assemblerroutinen um die Daten

aus Port A auf Port B zu schreiben:

mov dx, 300 ; setze Register auf 300h (Port A)

in al, dx ; Daten aus DX nach AL (Akkumulator) schieben

inc dx ; dx erhöhen auf 301h (Port B)

out dx, al ; Daten aus AL (Akkumulator) auf DX schieben (jetzt Port B)

danach wurde das Programm mit dem Debugbefehl -g und den entsprechenden Adressen

gestartet. Die Werte aus Port A wurden wie gewünscht nach Port B kopiert.

3.

Übergabe der Sprungadresse zur Interrupserviceroutine die mittels IRQ 7 angesprungen

werden soll.

e0:3c 00 01 81 13

3Ch berechnet sich aus 0F h (Der Hexwert für IRQ 7) multipliziert mit 4, 0001 8113 ist

die Adresse mit verdrehtem Segment/Offset und Hi/Lo-Byte

push ax ; Register auf Stack retten

push dx ; Register auf Stack retten

mov dx, 300 ; Register auf Port A setzen

in al, dx ; Portinhalt auf Akkumulator schieben

inc dx

; Register auf Port B setzen

out dx, al ; Akkumulator über Register ausgeben

mov al, 20 ;

mov dx, 20 ; PIC zurücksetzen

out dx, al ; Akkumulator auf dx setzen

pop dx

; Register von Stack zurückpushen

pop ax

; Register von Stack zurückpushen

iret

; Rücksprung zu unterbrochenen Programm

anschließend wurde die IRQ Maske im Debugger mit

-i 21

eingelesen und der Rücksprung für den Return übergeben mit:

-o 20 20

Abschließend wurden mit rf das ei Flag gesetzt um Interrupts einzuschalten. Durch

7


aktivieren des Interruptschalters wird nun das laufende Programm unterbrochen und

unsere Routine gestartet.

4.

Die Ansteuerung des Druckers erfolgte mittels BIOS-Interrupt 17h, welcher mit den ersten

3 Befehlen initialisiert wurde.

Anschließend wurde die Funktion “Zeichen parallel ausgeben´´ angesteuert und jeweils

der hexadezimale ASCII-Code des zu druckenden Zeichens übergeben. Nach Übergabe

des Line Feed Signals begann der Drucker mit dem Ausdruck der gepufferten Zeichen.

mov ah, 01

mov dx, 0

int 17

mov ah, 0

mov al, 41

mov dx, 0

int 17

mov ah, 0

mov al, 42

mov dx, 0

int 17

mov ah, 0

mov al, a

mov dx, 0

int 17

; Initialisierung des Drucker per BIOS Interrupt

; Zeichen auf Drucker ausgeben

; ASCII Hexcode für A

; erste LPT Schnittstelle

; Zeichen auf Drucker ausgeben

; ASCII Hexcode für B

; erste LPT Schnittstelle

; Zeichen auf Drucker ausgeben

; ASCII Hexcode für LF, Signal für den Drucker zu starten

; erste LPT Schnittstelle

8

Weitere Magazine dieses Users
Ähnliche Magazine