Fachhochschule Niederrhein

Fachhochschule Niederrhein h c Te k i n P µ Kapitel 6 6821 PIA Pin-Belegung Funktionen und Eigenschaften: Der 6821 (PIA) realisiert eine progr...
Author: Reiner Geier
8 downloads 3 Views 1022KB Size
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