Fachhochschule Niederrhein
h c Te
k i n
P µ
Kapitel 6
6821 PIA
Pin-Belegung
Funktionen und Eigenschaften: Der 6821 (PIA) realisiert eine programmierbare Schnittstelle zur parallelen Datenübertragung zwischen einem µP und peripheren Geräten. Das in NMOS- bzw. in CMOS-Technologie hergestellte IC ist u.a. in einem 40-poligen DIL-Gehäuse untergebracht und hat die folgende Pin-Belegung: Vss ( )
Vcc
Decoder
(+5V)
Steuer-Bus
Adress-Bus
Daten-Bus
A2...A15
22 24 23
A0
36
A1
35
E
25
Reset
34
R/W
21
IRQ/FIRQ
38
IRQ/FIRQ
37
^
20
CS0 CS1 CS2
CA1 CA2
40 39 2...9
RS0
PA0...PA7
Data
RS1 Enable
Reset R/W
PIA 6821
IRQA
CB1
IRQB
CB2
18 19 10...17
33...36 D0...D7
1
DB0...DB7
PB0...PB7
Data
Zwei bidirektionale 8-Bit breite Daten-Ports (Anschluß periph. Geräte) Zwei programmierbare Interrupt-Eingänge (CA1 und CB1) Zwei programmierbare Interrupt-Ein-/Ausgänge (CA2 und CB2) Zwei Interrupt-Requestleitungen (IRQA und IRQB) Ein PIA-Enable Eingang zum Timing aller PIA-internen Vorgänge Ein RESET-Eingang zum Zurücksetzen aller PIA-Register Ein R/W-Eingang zur Schreib-/Lese-Richtungssteuerung 8 bidirektionale Datenleitungen zur Ankopplung an den µP-Datenbus Chip-Select- und Register-Auswahl-Eingänge zur Freigabe des Bausteins und Adressierung der Register
6821 Peripheral Interface Adapter Pin-Belegung
mp 6 01 01
Kontroll-/Status-Register (CRA, CRB) zur Festlegung und Anzeige der Betriebsart Ausgangs-Register (DRA, DRB) zur (Ein-)/Ausgabe von Daten-Bits Datenrichtungs-Register (DDRA, DDRB) mit dem jede Portleitung individuell als Eingang (DDR-Bit=0) oder Ausgang (DDR-Bit=1) konfiguriert werden kann
6821 Peripheral Interface Adapter Blockschaltbild
mp 6 01 02
6821 PIA
Port A
Line-Interface Bit n von DDRA 0 - Eingang 1 - Ausgang
VCC
1
RD≈1,5kΩ
Bit n des internen Eingangsbusses
Bit n Ein-/ Ausgang von Port A
1 >1
Bit n des Ausgangsregisters A
Port B
Bit n von DDRB 0 - Eingang 1 - Ausgang
1 Bit n des int. Eingangsbusses
>1
Bit n des Aus-
VCC RD
>1
&
1
& 1
Bit n Ein-/ Ausgang von Port B
>1
gangsregisters A
6821 Peripheral Interface Adapter Line-Interface
mp 6 01 03
Adressierung der PIA-Register
6821 PIA
Auswahl der PIA-Register: Der PIA 6821 hat je Port drei Register:
Kontroll-Register Datenrichtungs-Register Ausgabe-Register Zur Adressierung der drei Register stehen nur zwei Register-SelectLeitungen zur Verfügung. Die Unterscheidung zwischen Datenrichtungsregister (DDRA bzw. DDRB) und Ausgaberegister (DRA bzw. DRB) erfolgt durch Bit 2 des zuständigen Kontroll-Registers (CRA bzw. CRB). Vom µP aus gesehen belegt der Schnittstellen-Baustein in der AdressMap somit lediglich vier Adressen, d.h. Datenrichtungs- und AusgabeRegister werden über die gleiche Adresse angesprochen. Insgesamt ergibt sich das nachfolgende Adressierungsschema:
Reg. Select Ctrl.-Reg.-Bits Adressiertes RS1 RS0 CRA2 CRB2 PIA-Register 0 0 0 X Datenrichtungs-Reg. A 0 0 1 X Ausgangs-Register A 0 1 X X Kontroll-Register A 1 0 X 0 Datenrichtungs-Reg. B 1 0 X 1 Ausgangs-Register B 1 1 X X Kontroll-Register B Die Adressen liegen bei den Laborrechnern des µP-Labors wie folgt: DRA DDRA CRA DRB DDRB CRB
EQU EQU EQU EQU EQU EQU
$FCF8 $FCF8 $FCF9 $FCFA $FCFA $FCFB
* * * * * * *
Ausgabe-Register Port A Datenrichtungs-Register Port A Kontroll-Register Port A Ausgabe-Register Port B Datenrichtungs-Register Port B Kontroll-Register Port B
6821 Peripheral Interface Adapter Adressierung
mp 6 01 04
6821 PIA
Initialisierung
Zustand der PIA-Register nach einem Reset:
Alle Register sind zurückgesetzt, d.h.: Die Daten-Ports (PA0...7 und PB0...7) sind als Eingänge definiert, die Kontroll-Leitungen (CA1/2 und CB1/2) sind als peripherieseitige Interrupt-Eingangsleitungen festgelegt.
Zweckmäßige Initialisierungs-Reihenfolge für beide Ports:: 1
Löschen des PIA-Kontroll-Registers: insb. wird hiermit das Zugriffs-Bit für das
2
Laden der E-/A-Richtungsinfo (für einzelne Portleitungen) in einen Akku (A oder B) des µP. Ablegen des Akku-Inhaltes im Datenrichtungsreg. (z.B. STA DDRB). Laden der Kontroll-Information in einen Akku des µP: dabei muß das
3 4 5 6
Datenrichtungs-Register (Bit 2 des Kontroll-Register) zurückgesetzt und damit der Zugriff auf das Datenrichtungs-Register ermöglicht.
Zugriffs-Bit für das Datenrichtungs-Register (Bit 2 des Kontroll-Registers) wieder gesetzt werden, um den Zugriff auf das Ausgabe-Register zu ermöglichen.
Ablegen des Akku-Inhaltes im Kontroll-Register (z.B. STA CRB). Dummy-Read: Leseoperation auf das Ausgabe-Register (DatenRegister), um die Interrupt-Flags im Kontrollregister (CRA7 und CRA6 bzw. CRB7 und CRB6) zu löschen!!
Das Kontroll-Register des PIA enthält sowohl Statusinformation (nur Lesezugriff auf diese Bits möglich) als auch Kontrollinformation (Lese-/Schreibzugriff auf diese Bits möglich). Das PIA-Kontroll-Register hat die nachfolgende Struktur: 7
6
5
IRQA1 IRQA2
4
3
CA2-Control
1 0 2 DDRA CA1-Control Access
Kontroll-Register A (CRA) 7
6
IRQB1 IRQB2
5
4 CB2-Control
3
1 0 2 DDRB CB1-Control Access
Kontroll-Register B (CRB)
6821 Peripheral Interface Adapter Initialisierung
mp 6 01 05
Betriebsarten mit CA1 bzw. CB1 als Interrupt-Eingänge
6821 PIA
Die notwendigen Einstellungen der Kontroll-Bits für die im Zusammenhang mit den Interrupt-Eingängen CA1 bzw. CB1 möglichen Betriebsarten lassen sich der nachfolgenden Übersicht entnehmen:
7
6
Kontroll-Register A (CRA) 5
IRQA1 IRQA2 7
6
IRQB1 IRQB2
4
3
CA2-Control
1 0 2 DDRA CA1-Control Access
Kontroll-Register B (CRB) 5
4
CB2-Control
3
1 0 2 DDRB CB1-Control Access
Interrupt Flag CRA1 CRA0 Interrupt Input CRA7 (CRB7) (CRB1) (CRB0) CA1 (CB1) Set 1 on 0 0 of CA1 (CB1) Active Set 1 on 0 1 of CA1 (CB1) Active Set 1 on 1 0 of CA1 (CB1) Active Set 1 on 1 1 of CA1 (CB1) Active
µP Interrupt Request IRQA (IRQB) Disabled Active (low) when CRA7 (CRB7) is set Disabled Active (low) when CRA7 (CRB7) is set
6821 Peripheral Interface Adapter Betriebsarten Eingänge CA1/CB1
mp 6 01 06
6821 PIA
Data
Port A
Data
Port B
Lesen/Schreiben ohne Verwendung der Steuerleitungen
Lesen peripherer Daten: 7 6 IRQA1 IRQA2
5
4 3 CA2-Control
1 0 2 DDRA CA1-Control
0 0 0 1 0 Kontroll-Register A (CRA)
0
* Baustein-Initialisierung CLR CRA * Loesche Zugriffs-Bit fuer DDRA CLR DDRA * Alle Port-Leitungen von A als Eingang LDA #$04 * Lege Betriebsart fest: STA CRA * Zugriff auf DDRA ab jetzt gesperrt : * Daten-Zugriff : LDA DRA * Lies moment. Zust. der Leitungen (Port A)
Schreiben peripherer Daten: 7 6 IRQB1 IRQB2
5
4 3 CB2-Control
1 0 2 DDRB CB1-Control
0 0 0 1 0 Kontroll-Register B (CRB)
0
* Baustein-Initialisierung CLR CRB * Loesche Zugriffs-Bit fuer DDRB LDA #$FF * Datenrichtungscode fuer Ausgang STA DDRB * Schalte alle Leitungen (Port B) als Ausgang LDA #$04 * Lege Betriebsart fest: STA CRB * Zugriff auf DDRB ab jetzt gesperrt : * Daten-Zugriff : LDA DATA * Hole Ausgabedaten aus dem RAM und STA DRB * gib sie ueber Port B aus
6821 Peripheral Interface Adapter CA1- bzw. CB1-Control (1)
mp 6 01 07
6821 PIA
Data
Port A
CA1
CA1- bzw. CB1-Control Lesen von Port A Busy Waiting Meldung bei an CA1
Beispiel für “Busy Waiting”: Jedesmal, wenn sich die Peripherie über die Steuerleitung CA1 (steigende Flanke) bei dem PIA meldet, soll der µP ein 8-Bit-Datum von der Peripherie einlesen: Gleichzeitig mit der Meldung über CA1 setzt der PIA Bit CRA7 als Statusinformation im Kontroll-Register von Port A. Über eine Abfrage-Schleife (Busy-Waiting) beobachtet der µP dieses Ready-Bit. Ist das Ready-Bit gesetzt, werden die an Port A anliegenden Daten vom µP eingelesen. Mit dem Einlesevorgang wird das Ready-Bit automatisch im Kontroll-Register von Port A gelöscht, d.h. die EingabeAufforderung quittiert. 7 6 IRQA1 IRQA2 ReadyBit
5
4 3 CA2-Control
1 0 2 DDRA CA1-Control
1
1
0
Kontroll-Register A (CRA) * Baustein-Initialisierung CLR CRA * Loesche Zugriffs-Bit fuer DDRA CLR DDRA * Alle Port-Leitungen von A als Eingang LDA #$06 * Lege Betriebsart fest: STA CRA * Zugriff auf DDRA ab jetzt gesperrt LDA DRA * Loesche Ready-Bit (CRA7); ‘Dummy Read’ : * Programmsequenz (Busy-Waiting) mit Daten-Zugriff : LOOP LDA CRA * Teste Ready-Bit und warte... BPL LOOP * ...bis Ready-Bit gesetzt ist LDA DRA * Lies Eingabe-Datum (+loesche Ready-Bit) :
6821 Peripheral Interface Adapter CA1- bzw. CB1-Control (2)
mp 6 01 08
Betriebsarten mit CA2 bzw. CB2 als Interrupt-Eingänge
6821 PIA
Die peripherieseitigen Leitungen CA2 bzw. CB2 können sowohl als Ausgänge als auch als Eingangs-Leitungen definiert werden. Sind sie als Eingänge definiert, so ergeben sich die nachfolgenden Betriebsarten:
7
6
IRQA1 IRQA2 7
6
IRQB1 IRQB2
Kontroll-Register A (CRA) 5
4
3
0 CA2-Control
1 0 2 DDRA CA1-Control Access
Kontroll-Register B (CRB) 5
4
3
0 CB2-Control
1 0 2 DDRB CB1-Control Access
Interrupt Flag CRA4 CRA3 Interrupt Input CRA6 (CRB6) (CRB4) (CRB3) CA2 (CB2) Set 1 on 0 0 of CA2 (CB2) Active Set 1 on 0 1 of CA2 (CB2) Active Set 1 on 1 0 of CA2 (CB2) Active Set 1 on 1 1 of CA2 (CB2) Active
µP Interrupt Request IRQA (IRQB) Disabled Active (low) when CRA6 (CRB6) is set Disabled Active (low) when CRA6 (CRB6) is set
6821 Peripheral Interface Adapter Betriebsarten Eingänge CA2/CB2
mp 6 01 09
6821 PIA
Data
Port A
CA2
CA2- bzw. CB2-Control Lesen von Port A Interrupt und Meldung bei an CA2
Beispiel für Interrupt und Meldung über Ready-Bit: Jedesmal, wenn sich die Peripherie über die Steuerleitung CA2 (fallende Flanke) bei dem PIA meldet, soll über die IRQALeitung des PIA ein Interrupt beim µP initiiert werden: Gleichzeitig mit der Meldung an CA2 setzt der PIA Bit CRA6 als Statusinformation im Kontroll-Register von Port A und legt die Ausgangsleitung IRQA auf low (Interrupt-Anforderung). In der Interrupt-Serviceroutine des µP erfolgt dann das Einlesen des von der Peripherie angelegten Datums über Port A. Mit dem Einlesevorgang wird das Ready-Bit automatisch im Kontroll-Register von Port A gelöscht, d.h. der Interrupt quittiert. 7 6 IRQA1 IRQA2
5
ReadyBit
0
4 3 CA2-Control
0
1
1 0 2 DDRA CA1-Control
1
Kontroll-Register A (CRA) * Baustein-Initialisierung CLR CRA * Loesche Zugriffs-Bit fuer DDRA CLR DDRA * Alle Port-Leitungen von A als Eingang LDA #$0C * Lege Betriebsart fest: STA CRA * Zugriff auf DDRA ab jetzt gesperrt LDA DRA * Loesche Ready-Bit (CRA6); ‘Dummy Read’ : * Datenzugriff innerhalb der Interrupt-Serviceroutine : LDA DRA * Lies Datum, quittiere Interrupt (CRA6=0) : RTI * Return from Interrupt
6821 Peripheral Interface Adapter CA2- bzw. CB2-Control (1)
mp 6 01 10
Betriebsarten mit CA2 bzw. CB2 als Signal-Ausgänge
6821 PIA
CRA4 CRA3
0
0
0
1
1 1
0 1
0
0
0
1
1 1
0 1
4 3 1 CA2-Control
gelöscht Low mit Rückflanke von E nach µP-Lese-Operation bezüglich Port A Low mit Rückflanke von E nach µP-Lese-Operation bezüglich Port A
1 0 2 DDRA CA1-Control CA2
gesetzt High, wenn Interrupt-Flag IRQA1 durch die aktive Flanke an CA1 gesetzt wird High mit Rückflanke des ersten E-Pulses nach der Deselektion des Bausteins
Der Inhalt von CRA3 wird von CA2 ausgegeben (Low) Der Inhalt von CRA3 wird von CA2 ausgegeben (High)
7 6 IRQB1 IRQB2 CRB4 CRB3
5
5
4 3 1 CB2-Control
gelöscht Low mit Vorderflanke des ersten E-Pulses nach µPSchreib-Operation bzgl. B Low mit Vorderflanke des ersten E-Pulses nach µPSchreib-Operation bzgl. B
1 0 2 DDRB CB1-Control CB2
gesetzt High, wenn Interrupt-Flag IRQB1 durch die aktive Flanke an CB1 gesetzt wird High mit Rückflanke des ersten E-Pulses nach der Deselektion des Bausteins
Der Inhalt von CRB3 wird von CB2 ausgegeben (Low) Der Inhalt von CRB3 wird von CB2 ausgegeben (High)
6821 Peripheral Interface Adapter Betriebsarten Ausgänge CA2/CB2
Kontroll-Register B (CRB)
7 6 IRQA1 IRQA2
Kontroll-Register A (CRA)
Zu diesen Betriebsarten zählt insbesondere der sog. Hand-shake-Betrieb zur Synchronisation zwischen Peripherie und µP.: 1 Statischer Hand-shake-Mode: Die Signale liegen solange an, bis der Kommunikationspartner den Datenaustausch quittiert hat. 2 Pulsed Hand-shake-Mode: Die Signale liegen nur kurzzeitig (Pulse) an.
mp 6 01 11
Port A
6821 PIA
PA0...PA7
CA2 CA1
Statischer Read-Hand-shake über Port A Für das Interrupt-gesteuerte Einlesen von Daten vom peripheren Gerät im statischen Hand-shake-Betrieb ergibt sich folgender Ablauf: 7 6 IRQA1 IRQA2 ReadyBit
5
4 3 CA2-Control
1 0 2 DDRA CA1-Control
1 0 0 1 0 Kontroll-Register A (CRA)
1
E µP-Read
R/W
t
µP-Read
t
CS RS1 RS0
t
D0...D7
2 new
CA1 CRA7 CA2
1 2 3 4
5
t
4
PA0...PA7 Data 1
3 3
t
new Data
t
4
Busy
5
Data taken Ready
Busy
Data taken
t t
Das Peripheriegerät legt ein 8-Bit-Datenwort an PA0...PA7. Das Anliegen der Daten wird dem 6821 über CA1 mitgeteilt. Als Voraussetzung hierzu muß die vorherige Datenübertragung abgeschlossen sein, d.h. CA2 führt Low-Signal. Mit dem Low-Tasten von CA1 wird CRA7 (Ready-Bit) im CRA gesetzt und CA2 High getastet (PIA Busy). Das Peripheriegerät darf (noch) keine neuen Daten anlegen. Die Einlese-Anforderung wird vom 6821 über einen IRQ dem µP gemeldet. Dieser unterbricht seine Arbeit und liest mit Hilfe der zugehörigen Interrupt-Serviceroutine die Daten von Port A ein. Dabei wird CRA7 (Ready-Bit) im CRA gelöscht und der IRQ vom 6821 zurückgenommen. CA2 wird wieder Low getastet (PIA ready) und damit die Datenübernahme quittiert.
6821 PIA - statischer Read-Hand-shake über Port A
mp 6 01 12
Port B
6821 PIA
PB0...PB7
CB2 CB1
Statischer Write-Hand-shake über Port B Für die Interrupt-gesteuerte Ausgabe von Daten auf dem peripheren Gerät im statischen Hand-shake-Betrieb ergibt sich folgender Ablauf: 7 6 IRQB1 IRQB2 ReadyBit
5
4 3 CB2-Control
1 0 2 DDRB CB1-Control
1 0 0 1 0 Kontroll-Register B (CRB)
E R/W
t
µP-Write
t
CS RS1 RS0
4
t
D0...D7
t
PB0...PB7 CB1 1 WriteRequ. CRB7 2 3 CB2
1 2
3 4 5
1
PB0..PB7 old Busy
WriteRequ.
PB0..PB7 new 5 Ready
Busy
t t t t
Das Peripheriegerät fordert über Low an CB1 beim 6821 ein 8-Bit-Datenwort an. Hierfür muß die vorherige Übertragung beendet sein (CB2 Low). Mit dem Low-Tasten von CB1 wird CRB7 (Request-Bit) im CRB des PIA gesetzt und CB2 High getastet (PIA Busy). Das Peripherie-Gerät darf keine neuen Daten anfordern. Die Ausgabe-Anforderung wird vom 6821 über einen IRQ dem µP gemeldet. Der µP unterbricht sein laufendes Programm und liest zunächst innerhalb der Interrupt-Serviceroutine das PIA-Datenregister (Dummy Read) zum Löschen des Request-Bits CRB7 und zur Rücknahme des IRQ´s. Der µP schreibt das angeforderte 8-Bit-Datenwort in das Ausgaberegister des PIA und damit auf PB0..PB7. CB2 wird wieder Low getastet (PIA ready) und damit die Daten-Ausgabe quittiert.
6821 PIA - statischer Write-Hand-shake über Port B
mp 6 01 13
Port A
6821 PIA
PA0...PA7
CA2 CA1
Pulsed-Mode Read-Hand-shake über Port A Für das Interrupt-gesteuerte Einlesen von Daten vom peripheren Gerät im Pulsed-Mode Hand-shake-Betrieb ergibt sich folgender Ablauf: 7 6 IRQA1 IRQA2 ReadyBit
5
4 3 CA2-Control
1 0 2 DDRA CA1-Control
1 0 1 1 0 Kontroll-Register A (CRA)
E µP-Read
R/W
µP-Read
t
D0...D7
2 new
CA1
1 2 3 4
5
t
4
PA0...PA7
CA2
t t
CS RS1 RS0
CRA7
1
new Data
Data 1
3
4 5
Data taken
t t t
Data taken t
Das Peripheriegerät legt ein 8-Bit-Datenwort an PA0...PA7. Das Anliegen der Daten wird dem 6821 über CA1 mitgeteilt. Als Voraussetzung hierzu muß die vorherige Datenübertragung abgeschlossen sein, d.h. CA2 führt Low-Signal. Mit dem Low-Tasten von CA1 wird CRA7 (Ready-Bit) im CRA gesetzt, CA2 ist High. Das Peripheriegerät darf (noch) keine neuen Daten anlegen. Die Einlese-Anforderung wird vom 6821 über einen IRQ dem µP gemeldet. Dieser unterbricht seine Arbeit und liest mit Hilfe der zugehörigen Interrupt-Serviceroutine die Daten von Port A ein. Dabei wird CRA7 (Ready-Bit) im CRA gelöscht und der IRQ vom 6821 zurückgenommen. CA2 wird für eine Taktperiode Low getastet (PIA ready) und damit die Datenübernahme quittiert.
6821 PIA - Pulsed-Mode Read-Hand-shake über Port A
mp 6 01 14
Port B
6821 PIA
PB0...PB7
CB2 CB1
Pulsed-Mode Write-Hand-shake über Port B Für die Interrupt-gesteuerte Ausgabe von Daten auf dem peripheren Gerät im Pulsed-Mode Hand-shake-Betrieb ergibt sich folgender Ablauf: 7 6 IRQB1 IRQB2 ReadyBit
5
4 3 CB2-Control
1 0 2 DDRB CB1-Control
1 0 1 1 0 Kontroll-Register B (CRB)
E R/W
t
µP-Write
CS RS1 RS0
t 4
t
D0...D7
t
PB0...PB7 CB1 1 WriteRequ. CRB7 2 3
WriteRequ.
CB2 5
1 2 3 4 5
1
Data written
t t t t
Das Peripheriegerät fordert über Low an CB1 beim 6821 ein 8-Bit-Datenwort an. Mit dem Low-Tasten von CB1 wird CRB7 (Request-Bit) im CRB des PIA gesetzt, CB2 ist High. Die Ausgabe-Anforderung wird vom 6821 über einen IRQ dem µP gemeldet. Der µP unterbricht sein laufendes Programm und liest zunächst innerhalb der Interrupt-Serviceroutine das PIA-Datenregister (Dummy Read) zum Löschen des Request-Bits CRB7 und zur Rücknahme des IRQ´s. Der µP schreibt das angeforderte 8-Bit-Datenwort in das Ausgaberegister des PIA und damit auf PB0..PB7. CB2 wird für eine Taktperiode Low getastet und damit die Daten-Ausgabe quittiert.
6821 PIA - Pulsed-Mode Write-Hand-shake über Port B
mp 6 01 15
6821 PIA µP-gesteuerter BCD-Vorwärts-/Rückwärtszähler: Unter Verwendung des PIA 6821 soll ein zweistelliger µP-gesteuerter BCD-Vorwärts-/Rückwärtszähler realisiert werden, der über eine Reihe von Schaltern gemäß nachfolgendem Schema kontrolliert wird: S0 = {1, Zählrichtung “vorwärts”; S1 = {1, Zähler steht “Stop”; S2 = {1, Zähler rücksetzen “Reset” ; S3 = {1, Programm beenden “Quit”;
D7 PIA - Port B
8421 zu 7 Segm.
8421 zu 7 Segm.
Decoder
Decoder
0, Zählrichtung “rückwärts”} 0, Zähler läuft “Run” } 0, sonst } 0, sonst }
D0 PIA - Port A
BCD-Vorwärts-/Rückwärtszähler Aufgabenstellung
3
2
1
0
mp 6 01 16
µP-gesteuerter BCD-Vorwärts-/Rückwärtszähler: Programm: BCDCNT Zweck: Modellierung eines zweistelligen BCD-Zählers der über Schalterstellungen kontrolliert. Er kann zu jedem Zeitpunkt gestoppt und zurückgesetzt werden und vorwärts sowie rückwärts zählen. Mit dem Abschalten erfolgt der Rücksprung in den Monitor. Benutzte Unterprogramme: DELAY (X) - Verzögerungsschleife Lokale Daten: DELCNT - Anfangswert für Verzögerungsschleifenzählung Verwendete Register: A - aktueller Zählerstand B - Schalterstellungsregister X - Verzögerungsschleifenzähler Peripheral Interface Adapter (PIA) initialisieren: -Port A als Eingang zum Einlesen der Schalterstllg. zur Zählerkontrolle -Port B als Zählerausgang zur Ansteuerung einer Anzeigeeinheit -Betriebsart: Lesen und Schreiben von Daten ohne Verwendung der Steuerleitungen (Polling der Schaltereingänge zur Zählerkontrolle) Zähler zurücksetzen und Zählerstand anzeigen Anfangswert DELCNT für Verzögerungsschleife definieren. Lies Schalterstellungen zur Zählerkontrolle ein Y
S3 auf Ende ? Y
N
S2 auf Reset ? Y
S1 auf Stop ?
Zähler zurücksetzen Zählung und Zähler- aussetzen stand anzeigen BREAK Until BREAK Zurück zum Monitor-Programm
N N
S0 auf vorwärts ? Y N Zählerstand Zählerstand inkrementieren dekrementieren BCD-Korrektur durchführen Lade X mit DELCNT DELAY ( X) Verzögerungsschleife Zählerstand anzeigen
BCD-Vorwärts-/Rückwärtszähler Struktogramm
mp 6 01 17
ORG $4000 ********************************************************* * * Program: B C D C N T * * Description: * * Model of a BCD- Up- and Down- Counter beeing * controlled by switch states. The Counter can be * stopped or reset at any time. * Program control is returned to the Monitor * program if the counter is switched off. * * Subroutine called: * * DELAY (X) Delay counter cycle * * Data Declarations: * * DELCNT Start value for delay count cycle * * Registers changed: * * A Current BCD-Counter state * B Current switch states * X Delay counter * ********************************************************* DDRA DRA CRA
EQU EQU EQU
$FCF8 $FCF8 $FCF9
* Data Direct. Reg. of PIA port A * Data Register of PIA port A * Control Register of PIA port A
DDRB DRB CRB
EQU EQU EQU
$FCFA $FCFA $FCFB
* Data Direct. Reg. of PIA port B * Data Register of PIA port B * Control Register of PIA port B
MON
EQU
$F02D
* Monitor Entry Point
BCDCNT
CLRA STA STA LDA STA LDA
CRA DDRA #$04 CRA DRA
* * * * * *
Initialize complete PIA port A as input and set operation mode to read data without using PIA control lines.
BCD-Vorwärts-/Rückwärtszähler Assembler-Listing 1
mp 6 01 18
CLRA STA LDA STA LDA STA LDA CLRA STA LDX STX LOOP
CRB #$FF DDRB #$04 CRB DRB DRB #$0000 DELCNT
* * * * * * * * * * *
Initialize complete Port B as output and set operation mode to write data without using PIA control lines Reset and show BCD-Counter state Define start value for delay count cycle
DRA #$08 TSTS2 RETURN #$04 TSTS1
ELOOP
LDB BITB BEQ BRA BITB BEQ CLRA STA BRA BITB BEQ BRA BITB BEQ ADDA BRA ADDA DAA LDX BSR STA BRA
DELCNT DELAY DRB LOOP
* * * * * * * * * * * * * * * * * * * * * *
RETURN
JMP
MON
* Back home to monitor program
DELCNT
RMB
2
* Delay Counter
TSTS2
TSTS1 TSTS0 UP DOWN BCDADJ
DRB ELOOP #$02 TSTS0 ELOOP #$01 DOWN #$01 BCDADJ #$99
Read control switch states Leave program if S3 is set Reset BCD-Counter if S2 is set and continue Stop BCD-Counter if S1 is set and continue If S0 is set Then increment BCD-Counter Else decrement BCD-Counter BCD-Adjustment Load start value for Delay and delay next operation Display new BCD-Counter state and repeat Loop Body
DELAY * Subroutine: D E L A Y (X) * Description: Delay cycle counter * Called from: BCDCNT- Main Program * Subroutines used: none * Parameters: In:X - Delay counter state REPEAT LEAX -1,X * Decrement X BNE REPEAT * Until X=0 RTS * Return
Out: none
END
BCD-Vorwärts-/Rückwärtszähler Assembler-Listing 2
mp 6 01 19
6850 ACIA
Pin-Belegung
Funktionen und Eigenschaften: Der 6850 (ACIA) realisiert eine programmierbare Schnittstelle zur asynchron seriellen Datenübertragung zwischen einem µP und peripheren Geräten. Das in NMOS- bzw. in CMOS-Technologie hergestellte IC ist u.a. in einem 24-poligen DIL-Gehäuse untergebracht und hat die folgende Pin-Belegung:
Steuer-Bus
Adress-Bus
Daten-Bus
Mikro-Prozessor
Decoder
A1...A15
8 10 9
A0
11
E
14
R/W
13
IRQ/FIRQ
7
^
12
CS0 CS1 CS2
TxCLK TxData
RS Enable
R/W
ACIA 6850
IRQ
15...22 D0...D7
1
DB0...DB7
CTS RTS DCD
RxData RxCLK
4 6
Sendertakt serieller
Datenausgang
Peripherie
Vss ( )
Vcc (+5V)
24 5 23
2
serieller
Dateneingang 3 Empfängertakt
Empfangsdaten-Eingang (RxData)/Sendedaten-Ausgang (TxData) Sender- und Empfänger-Takteingänge (TxCLK, RxCLK) Eingang Clear-To-Send (CTS), Ausgänge Request-To-Send (RTS)- und Data-Carrier-Detect (DCD) für die Datensynchronisation (Modem) Eine Interrupt-Requestleitung (IRQ) zur Interrupt-Anforderung Ein ACIA-Enable Eingang zum Timing aller ACIA-internen Vorgänge Ein R/W-Eingang zur Schreib-/Lese-Richtungssteuerung 8 bidirektionale Datenleitungen zur Ankopplung an den µP-Datenbus Chip-Select- und Register-Auswahl-Eingänge zur Freigabe des Bausteins und Adressierung der Register
6850 Asynchronous Communications Interface Adapter (ACIA) Pin-Belegung
mp 6 02 01
6850 ACIA
Blockschaltbild
Paritätsgenerator
Chip Select and R/W Control
Bidirekt. Data Bus Buffers
Interne Steuersignale
TaktTeiler SendeDatenRegister
SendeSchiebeRegister
TxData
SenderSteuerung
CTS
ControlRegister
RTS IRQ Steuerung
IRQ
EmpfängerSteuerung
DCD
EmpfangsSchiebeRegister
RxData
StatusRegister
EmpfangsDatenRegister TaktTeiler
6850 Asynchronous Communications Interface Adapter (ACIA) Blockschaltbild
Paritätsgenerator
mp 6 02 02
6850 ACIA
Registersatz
Kontroll-Register (CR): Festlegung der jeweiligen Empfangs- bzw. Sende-Betriebsart Write-Only Register
Status-Register (SR): Melde-Register, des über seine Flags den momentanen Betriebszustand des ACIA anzeigt Read-Only Register
Sende-Daten-Register (Transmit Data Register TDR): Übernahme des Sendedatums durch einen µP-Schreibbefehl mit der Rückflanke des Enable-Signals Dabei wird das TxDRE-Bit (T ransmit D ata R egister E nable) im Status-Register zurückgesetzt Mit der Übernahme des Sendedatums in das Sende-Schieberegister wird das TxDRE im Status-Register gesetzt Das Senden des Sendedatums erfolgt bitweise aus dem SendeSchieberegister über die TxData -Leitung mit dem Sende-Takt (TxCLK), wobei Start-, Paritäts- und Stop-Bits hinzugefügt werden Write-Only Register
Empfangs-Daten-Register (Receive Data Register RDR): Bitweises Laden der seriellen Eingangsdaten über die RxData Leitung mit dem Empfangs-Takt (RxCLK) in das EmpfangsSchieberegister, dabei werden Wortformat und Parität überwacht Ist das Empfangs-Schieberegister gefüllt, wird das RxDRF-Bit (Receive Data Register Full) im Status-Register gesetzt und der Inhalt des Empfangs-Schieberegisters in das Empfangs-DatenRegister (Receive Data Register) übertragen. Beim Auslesen des Empfangs-Daten-Registers durch einen µPLesebefehl wird das RxDRF-Bit im Status-Register zurückgesetzt . Read-Only Register
6850 Asynchronous Communications Interface Adapter (ACIA) Registersatz
mp 6 02 03
6850 ACIA
Adressierung
Auswahl der ACIA-Register: Der ACIA 6850 hat insgesamt vier 8-Bit-Register: Kontroll-Register Status-Register Sende-Daten-Register Empfangs-Daten-Register
(write only) (read only) (write only) (read only)
Zur Adressierung dieser Register dienen die Eingänge RS (RegisterSelect) und R/W (Read/Write) Vom µP aus gesehen belegt der Schnittstellen-Baustein in der AdressMap somit lediglich zwei Adressen, d.h. Kontroll- und StatusRegister sowie Sende-Daten- und Empfangs-Daten-Register werden über die gleiche Adresse angesprochen. Insgesamt ergibt sich das nachfolgende Adressierungsschema: CS2 CS1 CS0 RS R/W 0 0 0 0 X X 1
1 1 1 1 X 0 X
1 1 1 1 0 X X
0 0 1 1 X X X
0 1 0 1 X X X
Adressiertes ACIA-Register Kontroll-Register (write only) Status-Register (read only) Sende-Daten-Register (write only) Empfangs-Daten-Register (read only) ACIA nicht adressiert
In Bezug auf die Rechner-Arbeitsplätze des µP-Labors ergibt sich die nachfolgende Lage: CR SR
EQU EQU
$FCF4 $FCF4
* ACIA Control-Register * ACIA Status-Register
TXD RXD
EQU EQU
$FCF5 $FCF5
* ACIA Transmit-Register * ACIA Receive-Register
6850 Asynchronous Communications Interface Adapter (ACIA) Adressierung
mp 6 02 04
6850 ACIA
Betriebsarten
Die notwendigen Einstellungen der Kontroll-Bits für alle möglichen Betriebsarten des ACIA 6850 lassen sich der nachfolgenden Übersicht entnehmen: Receiver Interrupt Enable Bit: Counter Divide Select Bits: Controls Interrupt Output (IRQ) in Controls Divide ratios utilized in Receiving Mode (Receive Data Reg. Transmitter and Receiver section full or Overrun or lost Data Carrier, and provides a Master Reset i.e. on DCD-Input) CR1 CR0 Function (Tx, Rx) CR7 Function 0 0 1 0 1 16 0 IRQ disabled 1 0 64 1 IRQ enabled Master Reset 1 1 7
6
RIE
TC2
Kontroll-Register (CR) 5
4
3
2
TC1
WS3
WS2
WS1
1
0
CDS2 CDS1
Word
Stop
CR6 CR5 CR4 CR3 CR2 Length Parity Bits Function 0 0 Sets RTS=0 and inhibits TIE 0 0 0 7 even 2 0 1 Sets RTS=0 and enables TIE 0 0 1 7 odd 2 1 0 Sets RTS=1 and inhibits TIE 0 1 0 7 even 1 1 1 Sets RTS=0, inhibits TIE 0 1 1 7 odd 1 and transmits Break 1 0 0 8 none 2 (TIE, Transmit Interrupt Enable) 1 0 1 8 none 1 Transmitter Control Bits: 1 1 0 8 even 1 Controls Interrupt Output (IRQ) in 1 1 1 8 odd 1 Transmitting Mode (Transmit Data Word Select Bits: Reg. empty) and Request-To-Send used to select Word Length, Parity (RTS) Output and transmitting of and number of Stop Bits a Break level (Space)
6850 Asynchronous Communications Interface Adapter (ACIA) Betriebsarten
mp 6 02 05
Wortformat und Paritätsprüfung
6850 ACIA
Sende-Betrieb: Generierung des Wortformats und des Paritäts-Bits Empfangs-Betrieb: Prüfung des Wortformats und des Paritäts-Bits Die allgemeine Darstellung des Wortformats ist nachfolgend gezeigt; es wird durch die Kontroll-Register-Bits CR4, CR3 und CR2 festgelegt:
Mark Space
Start Bit
1
Wortlänge 7 Bit: Paritäts-Bit
Stop-Bit
D0 D1 D2 D3 D4 D5 D6 LSB
Datenrahmen
1
t
MSB
Wortlänge 8 Bit: Mark Space
Start Bit
1
Paritäts-Bit
D0 D1 D2 D3 D4 D5 D6 D7 LSB
Datenrahmen
Stop-Bit
1
t
MSB
Beispiele: CR4 CR3 CR2 0
1
0
1
0
0
M S
M S
7 Bit ASCII Zeichen “K” = $4B = %01001011, gerade Parität, 2 Stop-Bits
Strt D0 D1 D2 D3 D4 D5 D6 Par Stp Stp
t
8 Bit ASCII Zeichen “H” = $48 = %01001000, gerade Parität, 1 Stop-Bit
Strt D0 D1 D2 D3 D4 D5 D6 D7 Par Stp
6850 Asynchronous Communications Interface Adapter (ACIA) Wortformat und Paritätsprüfung
t
mp 6 02 06
OVRN
FE
4
1.The internal RxData transfer signal causes SR4=1 due to the above conditions and causes SR4=0 on the next RxData transfer signal if conditions have been rectified.
PE
IRQ
5
Framing Error: SR4=1: indicates the absence of the first stop bit because of a character synch. error, faulty transmission or Break condition.
6
7 TDRE RDRF
0
Receive Data Register Full: SR0=0: RxData Register is empty. SR0=1: Data has been transferred to RxData Register and status bits states are set (PE, OVRN, FE).
1. The internal Tx transfer signal causes SR1=1 . 2. The write data command on high-to-low transition on E input causes SR1=0. 3. A high signal on CTS input causes SR1=0 .
Transmit. Data Register Empty: SR1=1: TxData Register is empty i.e. ist contents has been transferred. New data may be entered now. SR1=0: TxData register is still full.
mp 6 02 07
1. Low-to-high transition of DCD input causes SR2=1 and generates 1. Read data command on high-toan interrupt: low transition on E input or SR7=1 and IRQ output line low. master reset causes SR0=0 . 2. Reading Status Register and RxData 2. A high on DCD input causes Register in sequence or SR0=0 and the receiver to be master resetting the ACIA causes reset. SR2=0 and SR7=0 .
DCD
2
Data Carrier Detect: SR2=0: Carrier is present SR2=1: Loss of carrier
CTS
3
1
Note: The CTS input does not reset the transmitter. The CTS bit is not affected by master reset.
Clear To Send: The CTS bit reflects the CTS input status for use by the MPU for interfacing to a modem.
Status-Register (SR)
1.The read data command on high-tolow transition on E input causes SR5=1 andSR0=1 if an overrun condition exists. The next read data command on high-to-low transition on E input causes SR5=0 andSR0=0 .
OV eR uN Error: SR5=1: One or more characters were received but not read from RxData register prior to subsequent characters being received.
6850 Asynchronous Communications Interface Adapter Status-Register
Parity Error: SR6=1: indicates that a parity error has been detected. This bit is inhibit if no parity control is selected. It is updated by the internal receive data transfer signal.
Interrupt ReQuest: SR7 indicates the state of the IRQ output. Any interrupt condition that is set and enabled is indicated in this status bit. Any time the IRQoutput is low SR7 is high to indicate interrupt request status. IRQ is cleared i.e. SR7=0 by read operation to the RxData register or a write operation to the TxData register.
1 Leitungsempfänger MC 1489
1
Leitungsempfänger MC 1489
Zustand undef.: -3V < U < 3V
1
1
Zustand log. 0: 3V < U < 12V Zustand log. 1: -12V < U < -3V
Leitungstreiber MC 1488
Leitungstreiber MC 1488
mp 6 02 08
Daten-Terminal
RS232-/V.24-Schnittstelle
6850 Asynchronous Communications Interface Adapter RS232-/V.24-Schnittstelle
Mikroprozessor
6850 ACIA
CR_SR TX_RXD TXDAT EOF MON
ORG : EQU EQU EQU EQU EQU : : LDA STA LDA STA : : LDX LBSR : : JMP
$4000
* Begin Transmit-Program (Master)
$FCF4 $FCF5 $6000 $04 $F02D
* * * * *
ACIA Control-/Statusregister ACIA Transmit/Receive Data Reg. Start Address of Transm. Data File End of File Character Monitor Entry Point
#$03 CR_SR #$18 CR_SR
* * * *
ACIA MasterReset Operation mode: 8 Bit, even Par., 1 Stop-Bit, Clock 1:1, IRQ disabled
#TXDAT SEND
* Load Data Start Address * and CALL SEND (X)
MON
* End of Transmit Program
SEND ************************************************************ * * Subroutine: S E N D ( X ) * Description: Transmit Data File * Called from: Main Program * Subroutine used: none * Parameters: * In: X - (Word) Start Address of Data File (Register) * Out: none * Local Data: A - (Byte) Transmit Character (Reg.) * B - (Byte) Transmit Status (Reg.) * ************************************************************ WAIT LDB CR_SR * REPEAT BITB #$02 * REPEAT BEQ WAIT * UNTIL TDRE=1 (Ready to Transmit); LDA 0,X+ * Load and STA TX_RXD * transmit next Character; CMPA #EOF * BNE WAIT * UNTIL EOF; RTS : : END
Serielle Rechnerkopplung mit ACIA 6850 - Master
mp 6 02 10
CR_SR TX_RXD RXDAT EOF IRQVC MON
ORG : EQU EQU EQU EQU EQU EQU : ORCC LDA STA LDA STA : LDX STX LDX STX LDA STA ANDCC : JMP RMB
$4000
* Begin Receiver-Program (Slave)
$FCF4 $FCF5 $6000 $04 $FE76 $F02D
* * * * * *
ACIA Control-/Statusregister ACIA Transmit/Receive Data Reg. Start Address of Receive Data File End of File Character Address for IRQ Vector Monitor Entry Point
#$10 #$03 CR_SR #$98 CR_SR
* * * * *
Disable (Mask) IRQ ACIA MasterReset Operation mode: 8 Bit, even Par., 1 Stop-Bit, Clock 1:1, IRQ enabled
#RXIRQ IRQVC #RXDAT INDEX CR_SR TX_RXD #$EF
* * * * * * *
Load Addr. of Receive IRQ Service to IRQ Vector Save Start Addess of Rec. Data File to Receive Data File Index Clear IRQ-Bit and ACIA’s IRQ Signal Enable IRQ of 6809
MON * End of Receiver Program INDEX 2 * Receive Data File Index RXIRQ ************************************************************** * IRQ-Service-Rout.: R X I R Q * Description: IRQ controlled receipt of one Character * Called from: Main Program (via IRQ) * Subroutine used: none * Input Parameters: none * Output Parameters: none * Local Data: A - (Byte) Currently received Char. (Reg.) * B - (Byte) Receive Status (Reg.) * X - (Word) Curr. Rec. Data File Index (Reg.) * Global Data: INDEX - (Word) Rec. Data File Index ************************************************************** LDX INDEX * Get curr. state of Rec. Data Index LDB CR_SR * Get Status info, load receive char. LDA TX_RXD * and clear IRQ-Bit and IRQ-Signal BITB #$70 * IF (Par.-, Overrun OR Fram.-Error) BNE RXERR * THEN ELSE STA 0,X+ * Put rec. char. into rec. data file RXERR STX INDEX * Save curr. valid Rec. Data File Index CMPA #EOF * IF (NOT EOF) BNE RXRET * THEN ELSE LDX #RXDAT * Reinitialize Rec. Data File Index STX INDEX * with Start Value RXRET RTI * Return from IRQ Service : END
Serielle Rechnerkopplung mit ACIA 6850 - Slave
mp 6 02 11