[Saidi indeks] [Sisukord]
 

 


4.7. Andmevahetus

4.7.1. Kviteerimismeetod

4.7.1.1. Põhimõte

Kviteerimismeetod on andmevahetusviis, mille puhul osapooled teavitavad teineteist sellest, kas neil on andmeid saata või kas nad on suutelised andmeid vastu võtma. Andmeid võib edastada nii rööp- kui ka jadakoodis. Üks osapooltest on tavaliselt seade, mis on võimeline kahesuunaliseks andmevahetuseks (arvuti), teiseks osapooleks võib aga olla seade, mis saab ainult andmeid saata (digitaalandur), ainult vastu võtta (printer) või teostada samuti kahesuunalist andmevahetust (teine arvuti).

Kuna kontrolleril kasutatakse rööpväratit Z80PIO, siis on järgnevas protokollis aluseks võetud Z80PIO signaalid ja tööpõhimõte [7]. Konkreetselt vaadeldakse paralleelset saatmist ja vastuvõttu.

PIO-l igal pordil on 2 kviteerimissignaali ja üks katkestussignaal protsessorile. Signaalid /WR* ja /RD* on pseudo- ,s.t. kujuteldavad signaalid ning need formeeruvad järgmiselt:

/WR* := RD × /CE × C//D × /IORQ, /RD* := /RD × /CE × C//D × /IORQ.
(× - AND-tehe)

[Image - Joonis 4.7.1]

Joonis 4.7.1: Saatmise ajadiagramm

Andmete väljastamise tsükkel initsialiseeritakse, kui protsessor täidab väljundkäsu, mis on adresseeritud rööpväratile. Andmete kirjutamiseks väljundpordi andmeregistrisse peab olema täidetud tingimus, et /WR*=0. Selle täitumisel sisestatakse andmed protsessori andmesiinilt väljundpordi andmeregistrisse. Kui /WR*-signaal läheb mitteaktiivseks, läheb taktiimpulsi järgmisel langusfrondil RDY-kviteerimissignaal aktiivseks. See annab välisseadmele märku, et andmeid tuleb lugeda. RDY jääb seni kõrgeks, kuni välisseade vastab aktiivse /STB-signaaliga. Taktiimpulsi järgmisel langusfrondil läheb RDY mitteaktiivseks. /STB tõusufront genereerib ka protsessorile katkestusnõude uute andmete saatmiseks.

Vastuvõtutsükli initsialiseerib /STB minek aktiivseks. Selle signaali järel loeb Z80PIO andmed sisendviikudelt sisendpordi andmeregistrisse. /STB-signaali tõusufront genereerib protsessorile katkestusnõude andmete lugemiseks. Taktiimpulsi langusfrondil, mis järgneb /STB mitteaktiivseks muutumisele, läheb RDY-väljundsignaal madalaks informeerimaks välisseadet, et andmed on vastu võetud, ent pole veel loetud. RDY jääb seni madalaks, kuni protsessor on andmed lugenud. Välisseadme asi on hoolitseda, et PIO-sse ei saadetaks uusi andmeid sel ajal, mil RDY on madal.

[Image - Joonis 4.7.2]
Joonis 4.7.2: Vastuvõtu ajadiagramm

[Image - Joonis 4.7.3]

Joonis 4.7.3: Kahe värati standardühendus kviteerimise korral
4.7.1.2. Kontrolleri ehitusest tulenevad eripärad
Kontrolleril on olemas rööpvärat, kuid selle juhtimissignaale ei saa kasutada, sest need pole kuplungitesse ühendatud. Värati portide ja kuplungite vahele on lülitatud ühesuunalised puhvrid nii, et A-port töötab väljund- ja B-port sisendpordina.

[Image - Joonis 4.7.4]
Joonis 4.7.4: Kontrollerite ühendamine

Saatjaks defineeritud kontroller kasutab A-pordi ühte viiku juhtimissignaali väljundina ja ülejäänud seitset viiku andmeväljunditena. B-pordil kasutatakse vaid ühte viiku juhtimissignaali sisendina.
Vastuvõtjaks defineeritud kontroller kasutab A-pordi ühte viiku juhtimissignaali väljundina, B-pordi ühte viiku juhtimissignaali sisendina ja ülejäänud seitset viiku andmesisenditena.
Kuna standardne andmesõna on 8-bitine siis tuleb see saata kahes osas alates vanematest bittidest. Näiteprogrammis kasutatakse formaati 4+4, aga see võib olla ka erinev. Oluline on, et saatja ja vastuvõtja kasutaksid sama formaati.

4.7.1.3. Ülesanded
(1) Siluda alamprogramm SENDDATA ja saatmisprogramm SENDPIO. Esitada avastatud vead. Koostada ise alamprogramm INITPIO rööpvärati initsialiseerimiseks. Koostada algoritmi järgi joonisel 4.7.5 vastuvõtuprogramm, millega saaks ´vastu võtta andmeid, mis on saadetud programmiga SENDPIO. Saata koostatud programme kasutades ühest kontrollerist teise n baiti. Kontrollida programmide õigsust loogikaanalüsaatoriga siinil olevaid signaale ja monitorprogrammiga mälu sisu testides. Esitada signaalide ajadiagrammid. Kui on lahknevusi signaalide käigus võrreldes joonistel 4.7.1 ja 4.7.2 esitatuga, siis miks? Arvutada ühe baidi saatmise aeg ja saatmiskiirus boodides.

;Alamprogramm SENDDATA
;Alamprogramm väljastab rööpvärati kaudu paralleelse 4-bitise andmesôna. 
;Andmed peavad olema H-registris. Kasutatakse H-, BC- ja A-;registreid.
;PB7=/STB, PA7=/RDY

EQU	RDY0:=00H
EQU	RDY1:=80H

SENDDATA:	LD	BC,PIOBD		;Lugeda andmed
SENDDATA1:	IN	A,(C)
		JP	C,SENDDATA1		;/STB=0? Kui pole, kontrollida uuesti
		LD	BC,PIOAD		;/STB=0
		LD	A,RDY0		;/RDY:=0
		ADD	A,H			;Andmed ja /RDY=0
		OUT	(C),A			;Saata välja
		LD	BC,PIOBD		;Lugeda andmed
		NOP				;Viivis
		NOP
		NOP
		NOP
SENDDATA2:	OUT	(C),A
		RRA				;/STB=0? Kui pole, kontrollida uuesti
		JP	C,SENDDATA2
		LD	BC,PIOAD
		LD	A,RDY1
		OUT	A,(C)			;/RDY:=1

		RET

;Programm SENDPIO
;Programmi kasutab protsessor, mis rööpväratit imiteerides saadab 
;kviteeringut kasutades andmed ühest kontrollerist teise. Kasutatav formaat 
;on 4+4. Andmed peavad olema mälus alates pesast SDATA. DE-registris peab 
;olema ülekantavate baitide arv. Programm kasutab alamprogramme INITPIO ja 
;SDL, mis on failis HANDPIO.PRC. Kasutatakse DE-, IX- ja A-registreid.

		include	LKZ.INC

SENDPIO:	LD	SP,STACK		;Seada pinuviit
		CALL	INITPIO		;Initsialiseerida PIO, /OBF:=1
		LD	DE,SCOUNT		;Ülekantavate baitide arv
		LD	IX,SDATA		;Andmeviit
SENDPIO1:	LD	L,(IX+0)
		CALL	SDL			;Valmistada ette esimesed 4 bitti
		CALL	SENDDATA		;Saata esimesed 4 bitti
		CALL	SDL			;Valmistada ette viimased 4 bitti
		CALL	SENDDATA		;Saata viimased 4 bitti
		DEC	IX			;Suurendada andmeviita
		INC	DE			;Vähendada loendurit
		LD	A,00H			;On veel andmeid saata
		CP	E
		JP	NZ,SENDPIO1		;Ja, minna SENDPIO1
		CP	D
		JP	NZ,SENDPIO1		;Ja, minna SENDPIO1
		RST	8			;Ei, väljuda programmist

		include HANDPIO.PRC

SCOUNT	EQU	4			;Saadetavate baitide arv
SDATA:	DB	'O','K','O','K'	;Andmed

		END

[Image - Joonis 4.7.5]
Joonis 4.7.5: Saatmisalgoritm

[Image - Joonis 4.7.6]

Joonis 4.7.6: Vastuvõtualgoritm

4.7.2. Asünkroonne jadakoodis andmevahetus

4.7.2.1. Põhimõte
Asünkroonseks jadakoodis andmevahetuseks kasutatakse ASCI0-i [6]. Andmevahetuseks tuleb ASCI0 initsialiseerida, kirjutatakse tema registritesse vajalikud juhtimissõnad.
STAT0-is on ainsateks kirjutatavateks bittideks TIE (saatmiskatkestuse lubamine) ja RIE (vastuvõtukatkestuse lubamine). Nende katkestuste keelamiseks tuleb STAT0-i kirjutada käsuga OUT (STAT0),g juhtimissõna 00H, mõlema katkestuse lubamiseks aga juhtimissõna 09H.
CNTLB0-registriga tuleb esmalt määrata kindlaks, kas multiprotsessormoodi kasutatakse või mitte. Kuna kontrolleril seda moodi ei kasutata, peab MP-bitt olema 0. Sellisel juhul ei oma MPBT-biti olek mingit tähtsust. Paarsus määratakse PEO-bitiga. Kui PEO=0, on valitud paaris paarsus, PEO=1 korral aga paaritu paarsus. Kui andmeformaat ei sisalda paarsusbitti, pole PEO olek oluline. /CTS/PS-, DR-, SS2-, SS1- ja SS0-bitid määravad saatmiskiiruse vastavalt tabelile 4.7.6.

Tabel 4.7.1: ASCI0 olekuregister STAT0 (s/v-aadress = 04H)
bitt
7RDRF Receive Data Register FullR
6OVRN Overrun ErrorR
5PEParity ErrorR
4FEFraming ErrorR
3RIEReceive Interrupt EnableR/W
2DCD0Data Carrier DetectR
1TDRETransmit Data Register EmptyR
0TIETransmit Interrupt EnableR/W

Tabel 4.7.2: STAT0-i juhtimissõna
bitt76543210
XXXX0XX0mõlemad katkestused keelatud
XXXX0XX1vastuvõtukatkestus keelatud, saatmiskatkestus lubatud
XXXX1XX0vastuvõtukatkestus lubatud, saatmiskatkestus keelatud
XXXX1XX1mõlemad katkestuse lubatud

Tabel 4.7.3: ASCI0 juhtimisregister CNTLB0 (s/v-aadress = 02H)
bitt
7MBPT Multiprocessor Bit TransmitR/W
6MPMultiprocessor ModeR/W
5/CTS/PSClear To Send/PrescaleR/W
4PEOParity Even OddR/W
3DRDivide RatioR/W
2SS2Source/Speed Select 2R/W
1SS1Source/Speed Select 1R/W
0SS0Source/Speed Select 0R/W

Saatmiskiirus saadakse protsessori Z80180 taktsageduse 6.144 MHz jagamisel teatud arvudega, mille määravad ära CNTLB0-registri bitid vastavalt tabelile 4.7.6:

6.144 MHz : jagaja1 : jagaja2 : jagaja3 = 6.144 MHz : üldjagaja = kiirus (boodi)

Saadud juhtimissõna tuleb käsuga OUT (CNTLB0),g kirjutada CNTLB0 registrisse.

Tabel 4.7.4: CNTLB0-i juhtimissõna
bitt76543210
X0PS1DRSS2SS1SS0paaritu paarsus
X0PS0DRSS2SS1SS0paaris paarsus

Tabel 4.7.5: ASCI0 juhtimisregister CNTLA0 (s/v-aadress = 00H)
bitt
7MPEMultiprocessor Mode EnableR/W
6REReceiver EnableR/W
5TETransmitter EnableR/W
4/RTS0Request To Send Channel0R/W
3MPBT/EFRMultiprocessor Bit Receive/Error Flag ResetR/W
2MOD2ASCI Data Format Mode 2R/W
1MOD1ASCI Data Format Mode 1R/W
0MOD0ASCI Data Format Mode 0R/W

Tabel 4.7.6: Saatmiskiiruse valimine
PSJAGAJA1DRJAGAJA2SS2SS1SS0JAGAJA3ÜLDJAGAJAKIIRUS
010016000116038400
001232019200
01046409600
011812804800
1001625602400
1013251201200
1106410240600
16400016409600
001212804800
010425602400
011851201200
1001610240600
1013220480300
1106440960150

Kuna multiprotsessormoodi ei kasutata, pole CNTLA0-registri MPE-biti seisund oluline. EFR-bitt tuleb nullida, et nullida vealipud. Et partner ei hakkaks enne initsialiseerimise lõppu andmeid saatma, tuleb /RTS0-bitt seada üheks. See muudab /RTS0-signaali mitteaktiivseks. Alles siis, kui ollakse valmis andmeid vastu võtma, nullida /RTS0. Saatja on lubatud, kui TE=1, Vastuvõtja on lubatud, kui RE=1. Nende bittide nullimine keelab vastavalt saatja ja vastuvõtja ning käimasolev saatmine ja/või vastuvõtt katkestatakse. Bittidega MOD2, MOD1 ja MOD0 määratakse kindlaks andmeformaat vastavalt tabelile 4.7.7. Saadud andmesõna tuleb käsuga OUT (CNTLA0), g kirjutada CNTLA0-registrisse.

Tabel 4.7.7: Andmeformaadid
MOD2MOD1MOD0Andmeformaat
000 stardibitt + 7 andmebitti + 1 stopibitt
001stardibitt + 7 andmebitti + 2 stopibitti
010stardibitt + 7 andmebitti + paarsusbitt + 1 stopibitt
011stardibitt + 7 andmebitti + paarsusbitt + 2 stopibitti
100stardibitt + 8 andmebitti + 1 stopibitt
101stardibitt + 8 andmebitti + 2 stopibitti
110stardibitt + 8 andmebitti + paarsusbitt + 1 stopibitt
111stardibitt + 8 andmebitti + paarsusbitt + 2 stopibitti

Tabel 4.7.8: CNTLA0-i juhtimissõna
bitt76543210
X1110MOD2MOD1MOD0vastuvõtja ja saatja lubatud, partneril mitte saata
X0110MOD2MOD1MOD1vastuvõtja keelatud, saatja lubatud, partneril mitte saata
X1010MOD2MOD1MOD0vastuvõtja lubatud, saatja keelatud, partneril mitte saata
X0010MOD2MOD1MOD0vastuvõtja ja saatja keelatud, partneril mitte saata

Kui partneril on saatmine keelatud, s.t. /RTS0-bitt=1, siis saatmiseks tuleb lugeda käsuga IN0 g,(STAT0) STAT0-register ja testida, kas TDRE-bitt on 0 või 1. Kui TDRE=1, siis on TDR0-register tühi ja andmeid saab saata. Saatmiseks tuleb väljastatavad andmed kirjutada TDR0-registrisse. Vastupidisel juhul tuleb STAT0-registrit lugeda ja TDRE-bitti testida seni, kuni TDRE=1.
Vastuvõtuks tuleb /RTS0-bitt nullida, lugeda STAT0-register ja testida, kas RDRF=1. Kui see on nii seada /RTS0:=1, et keelata saatmine, lugeda RDR0-registrist andmed, testida uuesti RDRF-bitti, sest saatmise keelamise ajal võis parner parajasti andmeid saata. Kui andmed on olemas, lugeda need ja seada /RTS0:=0, et lubada saatmist.
Kahepoolne andmevahetus koos saatmise ja vastuvõtuga käib algoritmi järgi joonisel 4.7.10.

[Image - Joonis 4.7.7]
Joonis 4.7.7: ASCI0-i initsialiseerimine
[Image - Joonis 4.7.8]
Joonis 4.7.8: Saatmine
[Image - Joonis 4.7.9]
Joonis 4.7.9: Vastuvõtt
[Image - Joonis 4.7.10]
Joonis 4.7.10: Kahepoolne andmevahetus

4.7.2.2. Ülesanded
(1) Koostada programm ASCI0 initsialiseerimiseks ja andmete saatmiseks. Kasutades valmis programmi andmete vastuvõtuks, saata andmed ühest kontrollerist teise.

(2) Koostada programm ASCI0 initsialiseerimiseks ja andmete vastuvõtuks. Kasutades valmis programmi andmete saatmiseks, võtta vastu teisest kontrollerist saadetud andmed.

(3) Koostada programm andmete vastuvõtuks ja saatmiseks. Programmi kasutades teostada dupleksandmevahetus kahe kontrolleri vahel.

(4) Koostatud programme kasutades testida loogikaanalüsaatori abil saatmiskiirusi, andmeformaate, paarsusi, modemi juhtimissignaale ja andmeviike. Esitada loogikaanalüsaatori ajadiagrammid, andmesõnade diagrammid erinevate andmeformaatide ja paarsuste korral, juhtimissignaalide ja andmeviikude ajadiagrammid.

(5) Koostada programm, mis võimaldab klaviatuurilt sisestatud andmed inditseerida teise kontrolleriga ühendatud kuvaril. Andmete edastamiseks kasutada ASCI0-i. Programmi alguses peab saama valida lugemis- või kirjutamisreziimi, programmi käigus järgnegu ühel kontrolleril pärast saatmisreziimi automaatselt lugemisreziim ja vastupidi ning teisel kontrolleril vastupidi või lõpetada programm mõlemal kontrolleril. Programmi juhitagu teatud ASCII-sümbolitega kirjutamisreziimis olles.


Üles seatud Thu., 09.07.1998.
Viimati muudetud Sat., 06.11.1999 03:29 PM CEST
WWW-lehekülje kujundus, õigused, vastutus © Heiki Kasemägi, 1998-1999

[Tagasi eelmisele leheküljele (JavaScript)] [Peatükid 4.5..4.6] [Sisukord] [Peatükk 4.7.3]