![]() |
![]() |
---|
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:
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.
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
Joonis 4.7.6: Vastuvõtualgoritm
bitt | |||
---|---|---|---|
7 | RDRF | Receive Data Register Full | R |
6 | OVRN | Overrun Error | R |
5 | PE | Parity Error | R |
4 | FE | Framing Error | R |
3 | RIE | Receive Interrupt Enable | R/W |
2 | DCD0 | Data Carrier Detect | R |
1 | TDRE | Transmit Data Register Empty | R |
0 | TIE | Transmit Interrupt Enable | R/W |
bitt | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|---|
X | X | X | X | 0 | X | X | 0 | mõlemad katkestused keelatud | |
X | X | X | X | 0 | X | X | 1 | vastuvõtukatkestus keelatud, saatmiskatkestus lubatud | |
X | X | X | X | 1 | X | X | 0 | vastuvõtukatkestus lubatud, saatmiskatkestus keelatud | |
X | X | X | X | 1 | X | X | 1 | mõlemad katkestuse lubatud |
bitt | |||
---|---|---|---|
7 | MBPT | Multiprocessor Bit Transmit | R/W |
6 | MP | Multiprocessor Mode | R/W |
5 | /CTS/PS | Clear To Send/Prescale | R/W |
4 | PEO | Parity Even Odd | R/W |
3 | DR | Divide Ratio | R/W |
2 | SS2 | Source/Speed Select 2 | R/W |
1 | SS1 | Source/Speed Select 1 | R/W |
0 | SS0 | Source/Speed Select 0 | R/W |
Saatmiskiirus saadakse protsessori Z80180 taktsageduse 6.144 MHz jagamisel teatud arvudega, mille määravad ära CNTLB0-registri bitid vastavalt tabelile 4.7.6:
Saadud juhtimissõna tuleb käsuga OUT (CNTLB0),g kirjutada CNTLB0 registrisse.
bitt | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|---|
X | 0 | PS | 1 | DR | SS2 | SS1 | SS0 | paaritu paarsus | |
X | 0 | PS | 0 | DR | SS2 | SS1 | SS0 | paaris paarsus |
bitt | |||
---|---|---|---|
7 | MPE | Multiprocessor Mode Enable | R/W |
6 | RE | Receiver Enable | R/W |
5 | TE | Transmitter Enable | R/W |
4 | /RTS0 | Request To Send Channel0 | R/W |
3 | MPBT/EFR | Multiprocessor Bit Receive/Error Flag Reset | R/W |
2 | MOD2 | ASCI Data Format Mode 2 | R/W |
1 | MOD1 | ASCI Data Format Mode 1 | R/W |
0 | MOD0 | ASCI Data Format Mode 0 | R/W |
PS | JAGAJA1 | DR | JAGAJA2 | SS2 | SS1 | SS0 | JAGAJA3 | ÜLDJAGAJA | KIIRUS |
---|---|---|---|---|---|---|---|---|---|
0 | 10 | 0 | 16 | 0 | 0 | 0 | 1 | 160 | 38400 |
0 | 0 | 1 | 2 | 320 | 19200 | ||||
0 | 1 | 0 | 4 | 640 | 9600 | ||||
0 | 1 | 1 | 8 | 1280 | 4800 | ||||
1 | 0 | 0 | 16 | 2560 | 2400 | ||||
1 | 0 | 1 | 32 | 5120 | 1200 | ||||
1 | 1 | 0 | 64 | 10240 | 600 | ||||
1 | 64 | 0 | 0 | 0 | 1 | 640 | 9600 | ||
0 | 0 | 1 | 2 | 1280 | 4800 | ||||
0 | 1 | 0 | 4 | 2560 | 2400 | ||||
0 | 1 | 1 | 8 | 5120 | 1200 | ||||
1 | 0 | 0 | 16 | 10240 | 600 | ||||
1 | 0 | 1 | 32 | 20480 | 300 | ||||
1 | 1 | 0 | 64 | 40960 | 150 |
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.
MOD2 | MOD1 | MOD0 | Andmeformaat |
---|---|---|---|
0 | 0 | 0 | stardibitt + 7 andmebitti + 1 stopibitt |
0 | 0 | 1 | stardibitt + 7 andmebitti + 2 stopibitti |
0 | 1 | 0 | stardibitt + 7 andmebitti + paarsusbitt + 1 stopibitt |
0 | 1 | 1 | stardibitt + 7 andmebitti + paarsusbitt + 2 stopibitti |
1 | 0 | 0 | stardibitt + 8 andmebitti + 1 stopibitt |
1 | 0 | 1 | stardibitt + 8 andmebitti + 2 stopibitti |
1 | 1 | 0 | stardibitt + 8 andmebitti + paarsusbitt + 1 stopibitt |
1 | 1 | 1 | stardibitt + 8 andmebitti + paarsusbitt + 2 stopibitti |
bitt | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|---|
X | 1 | 1 | 1 | 0 | MOD2 | MOD1 | MOD0 | vastuvõtja ja saatja lubatud, partneril mitte saata | |
X | 0 | 1 | 1 | 0 | MOD2 | MOD1 | MOD1 | vastuvõtja keelatud, saatja lubatud, partneril mitte saata | |
X | 1 | 0 | 1 | 0 | MOD2 | MOD1 | MOD0 | vastuvõtja lubatud, saatja keelatud, partneril mitte saata | |
X | 0 | 0 | 1 | 0 | MOD2 | MOD1 | MOD0 | vastuvõ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.
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.
![]() |
![]() |
![]() |
![]() |
---|