I-O enote

i_o_4_0.doc
1
Vključevanje računalnika v okolje
Računalnik se z okoljem povezuje preko vhodno-izhodnega podsistema, ki obdeluje oz.
upravlja vhodno-izhodne podatke.
Tako npr. vnašamo podatke iz okolja v računalnik preko tipkovnice, ki posreduje
zaporedje znakov, lahko jih sprejema modem kot zaporedje bitov z oddaljenega mesta,
itd.
Iz računalnika pa posredujemo podatke v okolje npr. preko tiskalnika, ki ga lahko
priključimo na zaporedna ali vzporedna vrata (port) računalnika, ki delujejo po različnih
standardih (RS-232, USB, Centronics, itd.).
Tipkovnica, modem, tiskalnik, itd. so vhodno-izhodne naprave (input-output device).
Naloga vhodno-izhodnih naprav je, da vhodne informacije iz okolja spremenijo v obliko,
ki jo razume računalnik, izhodne informacije pa v obliko, ki jo razume okolje in ga
pogosto predstavlja človek kot neposredni uporabnik računalnika, lahko pa so to stroji,
drugi računalniki, itd.
Najbolj preproste vhodne naprave so stikala, ki se lahko nahajajo v dveh stanjih:
vklopljeno/izklopljeno. Tema stanjema ustrezata logična nivoja 1 in 0.
Najbolj preproste izhodne naprave pa so svetlobni indikatorji kot lučke oz. LED diode,
ki signalizirajo izhod 1 oz. 0 s prižganim oz. ugasnjenim stanjem.
Vemo že, da vhodno-izhodnih naprav v splošnem ne moremo priključiti neposredno na
procesor in njegova vodila. Procesor namreč neprestano bere in izvršuje ukaze, ki se
nahajajo v pomnilniku, zato večino časa poteka živahna izmenjava vsebin med
procesorjem in pomnilnikom. Naslovno vodilo je tako večji del časa zasedeno z
naslavljanjem pomnilniških besed, podatkovno vodilo pa s prenosom pomnilniških vsebin.
Procesor naslavlja vhodno-izhodne enote precej manj pogosto kot pomnilnik, saj v
povprečju prebere in izvede kar nekaj ukazov, ki se nahajajo v pomnilniku, ki jim sledi
npr. enkratna naslovitev vhodno-izhodnih registrov. To je tudi razlog, da večino časa
vhodno-izhodna naprava ne komunicira aktivno s podatkovnimi vodili procesorja. Z njimi
se aktivno poveže za zelo kratek čas samo takrat, ko to predvideva program, ki se izvaja v
računalniku.
V/I naprave so
priključene v
računalniški sistem
preko V/I vmesnikov
2
i_o_4_0.doc
Povezava vhodno-izhodnih naprav ni mogoča neposredno na vodila CPU, ker vhodnoizhodne naprave niso prilagojene posameznim procesorjem in njihovim signalom
ampak so izdelane na osnovi določenih standardov za povezovanje, tako da so med seboj
zamenljive (kompatibilne) in uporabne v različnih okoljih. Tako npr. tiskalnika, diska, DVD
enote, itd. ne kupujemo glede na vrsto procesorja, ki imamo vgrajenega ampak glede na
vmesnik preko katerega bo naprava komunicirala z računalniškim sistemom).
Priključitev V/I naprav na procesorjeva vodila je tako možna le preko vhodno-izhodnih
vmesnikov (adapter, interface). Ta vezja omogočajo na eni strani povezavo s
procesorjem in njegovimi signali, na drugi strani pa z vhodno-izhodnimi napravami in
njihovimi signali. Na eni strani se V/I vmesniki časovno sinhronizacijo s procesorjem, ki
deluje z določenim taktom, na drugi strani pa z V/I napravo, ki zahteva drugačno
usklajevanje.
Zagotovo sta najbolj razširjena splošna vmesnika vzporedna vrata (parallel port) in
serijska vrata (serial port).
Za časovno opredeljevanje dogodkov se uporablja V/I vezje, ki opravlja vlogo časovnika
(timer) .
Vsem so znani tudi specializirani vmesniki, ki so dokaj kompleksni po svoji funkciji in
prilagojeni opravljanju določene naloge in upravljanju specifičnih naprav. Pravimo jim
krmilniki (controller) vhodno-izhodnih naprav.
Najbolj pogosto se srečamo npr. s krmilnikom diskov (disc controller), grafičnim
vmesnikom (graphics controller), krmilnikom prekinitev (interrupt controller), krmilnikom
neposrednega dostopa (DMA controller), itd..
Posamezni krmilniki lahko krmilijo:
• le eno napravo (npr. krmilnik zaslona - monitorja)
• več naprav (npr. krmilnik diska SCSI)
Vhodno-izhodni vmesniki
Procesor "vidi" vmesnik kot enega ali več registrov, od katerih ima vsak svoj naslov. V
nekatere registre lahko le vpisujemo, iz drugih lahko le beremo, lahko pa v registre tudi
vpisujemo in nato beremo.
Če se vhodno/izhodni vmesniki nahajajo v pomnilniškem naslovnem prostoru, procesor
ne loči med pomnilnikom in temi vmesniki, kar pomeni, da uporablja za komunikacijo z
njimi iste ukaze in iste signale kot za komunikacijo s pomnilnikom.
Če pa se vmesniki nahajajo v posebnem vhodno/izhodnem naslovnem prostoru, procesor
uporablja posebne ukaze za dostop do njihovih registrov (ukazi se ločijo od ukazov za
dostop do pomnilnika). Na osnovi teh posebnih ukazov procesorjeva krmilna enota
generira posebne signale za vpis ali branje iz tega naslovnega prostora.
i_o_4_0.doc
3
Registre, s katerimi se srečujemo v vmesnikih, delimo v tri večje skupine:
• krmilni registri (control registers)
Ti registri služijo za upravljanje (krmiljenje) nastavitev pogojev delovanja vmesnika.
Vse nastavitve, ki jih je mogoče spremeniti v vmesniku, so dosegljive le preko
vpisov posameznih bitov v teh registrih. To so torej vpisovalni registri.
•
statusni registri ali registri stanj (status registers)
V tej skupini registrov se nahajajo le bralni registri. Iz stanj posamezni bitov v teh
registrih lahko razberemo, v kakšnem stanju se nahaja vmesnik. Povedo nam, če so
informacije v vmesniku veljavne, če se je cikel pretvorbe podatkov že zaključil, če
lahko v vmesnik vpišemo podatek, itd.
•
podatkovni registri (data registers)
Nekateri od teh registrov so bralni, drugi vpisovalni, nekateri pa oboje. Registre iz
te skupine uporabimo za prenos podatkov preko vmesnika v okolico ali pa za
branje podatkov iz okolice.
Običajno je postopek za programsko uporabo vmesnika naslednji:
- Na začetku programa oz. pred uporabo vmesnika se izvede initializacija ali
začetna postavitev vmesnika. V tem delu programa vpiše procesor v krmilne
registre take vsebine (kombinacije bitov), da:
• omogoči delovanje vmesnika
• izbere želen način delovanja vmesnika
Te nastavitve lahko kasneje program tudi spreminja, če je to potrebno (npr.
sprememba režima delovanja vmesnika).
-
Branje statusnih registrov bolj ali manj pogosto, kar je odvisno od načina
delovanja vmesnika (prekinitve, otipavanje ali polling). Z branjem statusnega
registra procesor npr. ugotovi, kdaj lahko vpiše podatek v vmesnik ali pa ga lahko
iz njega prebere.
-
Tema fazama sledi branje oz. vpis podatka.
Postopek se lahko ponavlja, dokler program oz. procesor uporablja vmesnik.
initializacija vmesnika
Del diagrama poteka,
ki prikazuje
programsko uporabo
V/I vmesnika
branje statusnega registra,
vpis v krmilni register
vpis/branje podatkovnega registra
Opisan postopek je zelo splošen, konkretne aktivnosti pa so odvisne od zgradbe in
funkcije vmesnika.
i_o_4_0.doc
4
Dodajanje V/I vmesnika v mikroračunalnik
Ker predstavlja programski model V/I vmesnika določeno število registrov, moramo za
vgradnjo novega vmesnika v računalnik v naslovnem prostoru procesorja predvideti vsaj
tako velik ali večji logični naslovni prostor, ki bo pripadal izključno vmesniku in ki ga
bo procesor naslavljal, ko bo komuniciral z vmesnikom.
Celotno vezje vmesnika (vse registre) oz. celoten logični naslovni prostor, ki ga vmesnik
zaseda, izbere izbirni signal (chip select).
Izbirni signal generira dekodirno vezje (dekoder) na osnovi naslovnih signalov procesorja
z višjimi utežmi AL-AK - most significant bits in sinhronizacijskih signalov procesorja.
Posamezen register znotraj V/I vezja naslovi procesor preko določenega števila naslovnih
signalov z najmanjšo težo A0-AN-1 - least significant bits, ki jih priključimo na
vhodno/izhodni vmesnik. Število potrebnih naslovnih signalov N je odvisno od števila
registrov R v vmesniku, tako, da je: 2N ≥ R.
Poleg izbirnega signala in naslovnih signalov so na vmesnik povezani še signali
podatkovnega vodila za prenos podatkov v/iz procesorja in pa krmilni signali
procesorja.
naslovni
signali A0-AN-1
naslovni
signali AL-AK
vmesnik
dekoder
izbirni signal
vhodiizhodi
podatkovni
signali
krmilni
signali
Prenos podatkov preko vhodno-izhodnih enot v računalnik lahko poteka na tri
načine:
•
s cikličnim otipavanjem (scanning ali polling) vhodno-izhodnih vmesnikov
•
z uporabo prekinitev, ki jih povzročajo vhodno-izhodni vmesniki
•
z direktnim dostopom do pomnilnika (DMA), pri katerem namesto procesorja
naslavlja pomnilnik in krmili prenos podatkov iz/v vhodno-izhodni vmesnik
specialna DMA krmilna enota.
5
i_o_4_0.doc
Prekinitve in ciklično otipavanje ali polling
Vemo že, da procesor običajno izvaja nek osnovni program v zanki.
V okolici, s katero je računalnik povezan, prihaja do naključnih dogodkov, ki so lahko
zelo pomembni za program, ki ga izvaja računalnik. Če ti dogodki odločilno vplivajo na
potek izvajanja programa, jih mora procesor zabeležiti (npr. pritisk tipke na tipkovnici,
premik miške, itd.).
Pogosto, odvisno od aplikacije, zahtevamo, da je odziv procesorja na dogodek zadosti
hiter. To pomeni, da zahtevamo odziv, ki ima le tolikšno zakasnitev, da je sprejemljiva za
uporabnika oz. za proces. To je možno doseči na dva načina:
•
s cikličnim otipavanjem (preverjanjem), ki mu pravimo tudi polling
Kot že ime pove, gre zato, da program ciklično - zadosti pogosto "preverja" z
branjem preko podatkovnega vodila, če je prišlo do zunanjega dogodka, ki ga
posreduje vmesnik. Pojava dogodka ni mogoče vnaprej točno predvideti, ker se
pojavi naključno.
Z zadosti pogostim branjem statusnih in/ali podatkovnih registrov v vmesniku
lahko programsko zagotovimo, da se procesorju dogodek ne "izmuzne" in ga
program registrira še pravočasno. To pomeni, da zamuda pri registraciji dogodka
ne vpliva usodno na dogajanje v programu.
Pri cikličnem preverjanju polingu procesor
izmenoma in zadosti
pogosto preverja statusne
registre V/I enot, na
katerih pričakuje dogodke
Slabost takega načina delovanja je v dejstvu, da procesor porabi veliko svojega
časa za ciklično preverjanje stanj registrov, čeprav bi ta čas lahko veliko bolj
koristno izrabil za izvajanje drugih programov. Tej pomanjkljivosti se izogne drugi
način izvajanja programa z uporabo prekinitev.
•
z uporabo prekinitev procesorja
Ta način olajša procesorju spremljanje zunanjih dogodkov, ki se pojavljajo
naključno - nenapovedano.
Procesor lahko izvaja katerikoli program, ob koncu vsakega izvedenega ukaza, (pri
nekaterih procesorjih celo ob koncu vsakega urinega cikla) pa testira, če je kateri od
zunanjih vmesnikov ali katera od enot procesorja zahtevala prekinitev programa,
ki se trenutno izvaja. Zahteva za prekinitev se prenese procesorju preko
posebnih krmilnih signalov, ki jim pravimo prekinitveni signali.
6
i_o_4_0.doc
Prekinitve v računalniku (interrupts)
Osnovna lastnost prekinitev je, da se ob zahtevi za prekinitev računalniški sistem
odzove kar najhitreje.
Mehanizem delovanja prekinitev je zasnovan tako, da se prekine izvajanje programa, ki se
je trenutno izvajal, shrani se trenutno stanje procesorja, nakar se izvajanje programa za
kratek čas prenese v prekinitveni strežni program (inrterrupt service routine, interrupt
handler). Po zaključitvi prekinitvenega strežnega programa se normalno nadaljuje
izvajanje prekinjenega programa.
Naloga prekinitvenega strežnega programa je, da opravi specifično nalogo za enoto, ki
je zahtevala prekinitev (zabeleži dogodek, ki je sprožil prekinitveno zahtevo, npr.
zabeleži kodo pritisnjene tipke na tipkovnici).
tok programa, ki ga prekinemo
zahteva za prekinitev
vrnitev na mesto prekinitve
programa
tok prekinitvenega strežnega programa
ukaz za konec prekinitvenega strežnega programa
Prekinitveni strežni program je po svoji obliki zelo podoben podprogramu.
Prekinitveni strežni program je zaključena celota, ki se konča s posebnim ukazom za konec
prekinitvenega strežnega programa.
Pomembna razlika med uporabo podprogramov in prekinitev je v dejstvu, da podprogram
kliče programer na določenih mestih v programu, prekinitev pa se izvede kjerkoli med
tekom programa, torej nenapovedano – naključno, asinhrono (odvisno od zahteve za
prekinitev) glede na izvajanje programa, ki je prekinjen.
Izjema med temi prekinitvami so programske prekinitve (posebni ukazi CPU), ki pa se
pojavljajo sinhrono glede na program in se izvedejo na osnovi ukazov, ki zahtevajo
prekinitev v programu. Prekinitvene zahteve vključi v program že programer na vnaprej
določenih mestih, prav tako kot klic podprograma.
Tudi te prekinitve zahtevajo prekinitev programa, ki se trenutno izvaja in izvedbo
prekinitvenega strežnega programa.
i_o_4_0.doc
7
Delitev prekinitev glede na izvor
Glede na izvor prekinitvene zahteve delimo prekinitve na:
•
aparaturne - strojne (hardware interrupts)
Zahteva za te prekinitve pride od V/I enote zato, da bo procesor zanje izvedel
prekinitveni strežni program. Ta zabeleži nek dogodek, ki se je zgodil v okolici (npr.
pritisk tipke, sprejem znaka preko omrežja, itd.).
Hiter odziv je potreben, ker bi sicer zamudili aktualno informacijo, ki jo V/I enota
posreduje v določenem trenutku.
Pomembno je, da se informacija zabeleži oz. prenese v pomnilnik, od koder jo kasneje,
ko je za to predvideno v programu, pobere nek drug program in jo obdela. Tako
dosežemo, da je prekinitveni strežni program čim krajši.
Kratek prekinitveni strežni program tudi zagotavlja, da imajo tudi druge V/I enote
priložnost, da zahtevajo prekinitev (preko svoje prekinitvene zahteve), njihova
zahteva pa je sprejeta in obdelana kar najhitreje.
signal prekinitvene zahteve
CPU
•
zunanji
prekinitveni
vhod
zunanji dogodek
V/I
vmesnik
pasti (traps):
Značilno za te prekinitve je, da prihajajo iz procesorja samega - iz njegovih vezij zaradi
izvajanja programa. Te prekinitve se delijo v dve skupini:
o programske pasti oz. programske prekinitve:
zanje je značilno, da jih zahteva programer s posebnim ukazom. Veliko se
uporabljajo za klice sistemskih funkcij operacijskega sistema, uporabljajo pa jih
tudi razhroščevalniki (debugger) programov za prekinjanje programa, ki ga
testiramo.
o pogojne pasti
Do teh prekinitev lahko prihaja pri izpolnjevanju določenih pogojev tekom
izvajanja programov, kot npr. zaradi napak pri izvajanju posameznih ukazov
(npr. neprepoznan ukaz, napaka parnosti, deljenje z 0, prekoračitev obsega
računanja, itd.) Veliko jih uporablja tudi operacijski sistem npr. za prenos nove
strani v navideznem pomnilniku, dostop do zaščitenega pomnilniškega naslova,
itd.)
Pasti se izvedejo, čeprav je postavljena prekinitvena maska.
8
i_o_4_0.doc
Delitev prekinitev glede na prekinitveno masko
V registru stanj - pogojnem registru procesorja (condition code register, mask register) se
nahaja prekinitveni maskirni bit - prekinitvena maska (interrupt mask flag).
Procesor ob začetku izvajanja katerekoli prekinitve postavi masko, ob koncu
prekinitve pa jo briše.
Glede na vpliv, ki ga ima ta bit na sprejem prekinitvene zahteve, delimo prekinitve na:
•
maskirne - pogojne prekinitve (maskable interrupts)
Postavljen prekinitven maskirni bit blokira sprejem pogojnih - maskirnih prekinitev.
Ta mehanizem zagotovi, da procesor izvede prekinitev, ki se je začela izvajati od
začetka do konca, ne da bi jo prekinila druga, pogojna prekinitev.
Masko lahko postavi in kasneje briše tudi programer, če v katerem od delov
programa želi blokirati sprejem maskirnih prekinitvenih zahtev.
•
nemaskirne - brezpogojne prekinitve (nonmaskable interrupts)
Že ime pove, da teh prekinitev ni mogoče maskirati oz. onemogočiti. Izvedejo se
brezpogojno, kar pomeni, da imajo visoko prioriteto (višjo od maskirnih prekinitev) in
se uporabljajo le za izjemno pomembne prekinitve oz zunanje dogodke (npr. izpad
napajanja, napaka v parnosti pomnilnika, itd.).
Brezpogojna – nemaskirna prekinitev se lahko izvede kadarkoli, ker je ne zadrži
ničesar, zato se lahko gnezdi tudi znotraj maskirne prekinitve.
Potek izvajanja prekinitve
Če procesor sprejme prekinitveno zahtevo, se izvede prekinitev po naslednjem zaporedju:
• procesor samodejno postavi maskirni bit
• procesor prenese vrnitveni naslov na sklad (trenutno stanje PC), lahko pa tudi
druge registre v celoti ali le nekatere (predvsem stanje registra stanj v procesorju)
• procesor prebere naslov prekinitvenega strežnega programa v PC števec
• procesor izvede prekinitveni strežni program. Njegovo izvajanje se zaključi z
ukazom za vrnitev iz prekinitve.
Do tega trenutka mora enota, ki je zahtevala prekinitev, najkasneje umakniti
prekinitveno zahtevo, sicer se prekinitev ponovno izvede
• CPU prebere s sklada vrnitveni naslov, ki ga prenese v PC števec (in obnovi tudi
vsebine drugih registrov s sklada, če so bili shranjeni) ter se vrne v prekinjen
program
• procesor briše prekinitveno masko
• procesor nadaljuje z izvajanjem prekinjenega programa
Procesorji veliko uporabljajo prekinitve, saj zagotavljajo dobro odzivnost na zunanje
dogodke. Na ta način se izognemo zamudnemu in neučinkovitemu programskemu
otipavanju (polling) V/I vmesnikov.
9
i_o_4_0.doc
Prekinitve so nepogrešljive v vseh računalnikih, še zlasti pa v procesnih računalnikih
in realnočasovnih sistemih (real time system).
Za te sisteme je značilno, da mora biti odziv računalniškega sistema na dogodke v
okolju toliko hiter kot ga narekuje proces - torej nikoli daljši od vnaprej predvidenega
časa.
Kje CPU najde ustrezne prekinitvene strežne programe?
Različni procesorji imajo to različno določeno:
•
na nekih fiksnih naslovih (odvisno od vrste prekinitve), ki so vnaprej določeni z
zgradbo CPU in nespremenljivi
•
CPU dobi naslov posredno, preko vektorjev, to je rezerviranih naslovov s kazalci,
ki kažejo na začetne naslove prekinitvenih strežnih programov posameznih enot
•
številka enote, ki jo dobi CPU in je zahtevala prekinitev, določa odmik od
začetka tabele prekinitvenih vektorjev in tako izbere ustrezen vektor
•
pri pasteh lahko določa naslove prekinitvenih strežnih programov notranja tabela
pasti
•
itd.
Kdaj CPU reagira na zahtevo po prekinitvi?
Povedali smo že, da CPU običajno reagira na zahtevo po prekinitvi ob koncu vsakega
izvedenega ukaza.
Pri nekaterih procesorjih z vgrajenim cevovodom, kjer je v obdelavi več ukazov hkrati, pa
CPU reagira na zahtevo po prekinitvi kar med izvajanjem ukaza. Tak način je bolj zahteven,
saj mora procesor ob pojavu prekinitve shraniti, poleg vsebin registrov CPU, tudi stanja
vezij v vseh enotah v procesorju. To je potrebno, da se po vrnitvi iz prekinitve lahko
povrnejo v prvotno stanje in prekinjeni ukazi izvedejo do konca.
Npr. Pentium, ki ima že vgrajene paralelne cevovode, ob prekinitveni zahtevi izvede do
konca ukaze, ki se že nahajajo v izvršilni enoti, ostale ukaze pa zavrže in jih prevzame
znova po vrnitvi v program, ki je bil prekinjen.
Prioritete prekinitev
Ob koncu vsakega ukaza procesor preverja zahteve za prekinitev v zaporedju, ki je
odvisno od prioritet prekinitev.
Najvišjo prioriteto ima zunanja nemaskirna prekinitev, tej sledijo pasti in nato maskirne
prekinitve:
•
procesor najprej brezpogojno sprejme zunanjo nemaskirno prekinitveno zahtevo
i_o_4_0.doc
10
•
za njo preveri zahtevo za izvedbo katere od pasti in jo sprejme ne glede na stanje
maskirnega bita
• zahtevo za katerokoli maskirno prekinitev pa procesor sprejme le ob pogoju, da
maskirni bit ni postavljen.
Če ima procesor več maskirnih prekinitvenih notranjih ali zunanjih vhodov, so tudi ti
razvrščeni po prioritetah, kar upošteva procesor v primeru, če se več zahtev pojavi
hkrati.
Prioritete maskirnih prekinitev so lahko:
• fiksno določene s čvrsto ožičeno logiko v procesorju oz. mikrokrmilniku
• programsko nastavljive
• nastavljive z dodatnimi vezji - krmilniki prioritet oz. krmilniki prekinitev (priority
interrupt encoder - controller)
Če se že izvaja maskirna prekinitev, pa se pojavi še katera od maskirnih prekinitvenih
zahtev, se izvede prekinitev do konca, čeprav ima nova zahteva višjo prioriteto, šele za
njo procesor sprejme novo prekinitveno zahtevo.
Kako se izvede prekinitev, če sl več V/I enot deli isti prekinitveni vhod?
Procesorji imajo v splošnem malo zunanjih prekinitvenih vhodov, zato si jih morajo
V/I enote deliti.
Čeprav si več V/I enot deli isti prekinitveni vhod v procesor, vsaka V/I enota
zahteva, da CPU prav zanjo izvede specifičen prekinitveni strežni program, ki
streže samo tej enoti.
CPU lahko identificira enoto, ki je zahtevala prekinitev, na različne načine:
•
programsko s preverjanjem stanja enote preko vsebin njenih statusnih registrov
(polling) po zaporedju od enote do enote. Za zaporedje "spraševanja" se odloči
programer pri pisanju programa in tako določi prioritete posameznih
vhodno/izhodnih vmesnikov. Enoto z najvišjo prioriteto najprej preveri.
signal prekinitvene zahteve
CPU
zunanji dogodek 1
V/I
vmesnik
1
V/I
vmesnik
2
zunanji dogodek 2
En sam prekinitveni strežni program se v takem primeru veji na toliko delov, kolikor
je prekinitvenih zahtev oz. vhodno/izhodnih enot.
i_o_4_0.doc
11
•
strojno tako, da CPU odpošlje poseben krmilni signal (npr. ACK), ki je speljan
skozi vse V/I enote (marjetična veriga - daisy chain). Na ta signal se
vhodno/izhodna enota odzove z identifikacijo, to pa CPU uporabi za določitev
vektorja prekinitvenega strežnega programa, ki ustreza določeni V/I enoti.
S tem signalom CPU tudi potrdi sprejem prekinitvene zahteve.
S posebnim potrditvenim signalom
ACK (Acknowledge) procesor
potrdi sprejem prekinitvene
zahteve od V/I enot. Vse V/I enote
imajo signal ACK vezan zaporedno
v obliki marjetične verige.
V/I enota, ki je zahtevala prekinitev,
in je v tej verigi najbližje
procesorju, procesorju odpošlje po
podatkovnem vodilu številko
enote, oz. vektorja.
Pogosto je namesto marjetične verige vgrajen eden ali več kaskadno vezanih
krmilnikov prekinitev z vgrajenim enkoderjem prioritet.
Njegova naloga je, da:
o sprejema prekinitvene zahteve različnih V/I enot, ki so priključene nanj v
zaporedju glede na prioriteto
o razvrsti prekinitvene zahteve po prioritetah, če se pojavijo hkrati
o posreduje procesorju prekinitveno zahtevo
o ko procesor potrdi sprejem prekinitvene zahteve, mu preko podatkovnega
vodila posreduje številko enote z največjo prioriteto, ki zahteva prekinitev
oz. številko vektorja, ki pripada izbrani prekinitveni zahtevi
o umakne prekinitveno zahtevo procesorju
prekinitveni
signal prekinitvene krmilnik 1 prekinitvena
zahteve
zahteva V/I enote
INTR
CPU
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
Na sliki je prikazana uporaba
prekinitvenega krmilnika za razporejanje
prekinitvenih zahtev V/I enot.
Z vezavo več prekinitvenih krmilnikov v
dveh nivojih povečamo število priključenih
V/I enot - v tem primeru na 15.
vhodno-izhodne
enote
V/I 1
V/I 2
prekinitveni
krmilnik 2
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
V/I 15
12
i_o_4_0.doc
Konkreten primer
povezave V/I enot
preko prekinitvenega
krmilnika. Ura ima
najvišjo prioriteto,
tiskalnik pa najnižjo,
ker je tiskanje časovno
najmanj kritičen
proces.
Kako je poskrbljeno za umik prekinitvene zahteve?
Prekinitveno zahtevo (deaktiviranje signala) mora umakniti enota, ki je zahtevala
prekinitev oz. oddala prekinitveno zahtevo, najkasneje do zaključitve prekinitvenega
strežnega programa.
V/I enota lahko umakne prekinitveno zahtevo šele, ko ji CPU na določen način sporoči, da
izvaja zanjo prekinitveni strežni program – pravimo da potrdi sprejem prekinitvene
zahteve.
CPU to lahko izvede na dva načina, odvisno od zgradbe CPU in V/I enote:
• programsko z branjem določenih registrov ali/in vpisom v
določene registre vhodno-izhodnega vmesnika
•
strojno tako, da odpošlje potrditveni signal vhodno-lzhodnemu vmesniku
Kako bi nadomestili prekinitve, če nimamo možnosti uporabe zunanjih prekinitvenih
signalov?
Če ni možnosti uporabe zunanjih prekinitvenih signalov, se program oz programer
poslužuje pollinga, kar pomeni, da mora CPE pogosto brati stanje vhodno/izhodnih
enot, da bi zaznal zunanji naključni dogodek, ki sicer povzroči zunanjo prekinitev.
Čimbolj pogosto je spraševanje, tem boljši je odziv sistema, seveda pa procesor za to
spraševanje porabi veliko časa.
Polling je sprejemljiva rešitev le v primerih, če ima procesor na razpolago zadosti časa
za spraševanje, ker ne opravlja drugih nujnih opravil.
13
i_o_4_0.doc
Vzporedni in zaporedni prenos podatkov
Podatki se med dvema točkama lahko prenašajo vzporedno ali pa zaporedno.
Če je povezava namenjena zgolj dvema točkama, govorimo o povezavi točka v točko
(point to point).
Če ima povezava več odcepov za povezovanje več enot, ki medsebojno komunicirajo
preko te povezave, pa govorimo o vodilu (bus).
Pri vzporednem - paralelnem prenosu (parallel
data transmission) se med oddajnikom in
sprejemnikom prenaša istočasno-vzporedno več
bitov (na sliki npr. 8).
Za prenos vsakega bita je namenjena svoja prenosna
pot oz. žica.
V obliki vzporednih vodil je izvedena večina vodil v
notranjosti mikroračunalnika, npr. podatkovna in
naslovna vodila.
Vzporedno se prenašajo podatki npr. preko PCI, AGP, IDE vodil, navzven pa npr. tudi
preko uveljavljenega Centronics vmesnika.
Lastnosti vzporednega prenosa:
o večja kapaciteta prenosa
o zahtevnejša izvedba, saj mora logika zagotavljati sinhronizacijo vseh signalov
o vsi signali naj imajo pri prenosu tudi enako zakasnitev, zato morajo biti prenosne
poti enako dolge
o uporaben za prenose na krajše razdalje
Za zaporedni - serijski prenos (serial
data transmission) je značilno, da se
podatek razbije na posamezne bite, ki
se nato prenesejo v zaporedju, drug
za drugim.
Hitrost prenosa se meri v številu
prenešenih bitov v časovni enoti ene
sekunde npr. 1200 b/s (ali 1,2 kb/s ali
1200 bps - bits per second).
Enoto b/s imenujemo tudi baud, torej 1200 baudov.
Na oddajni strani se
izvede pretvorba
podatka, ki se nahaja
v registru v
vzporedni obliki, v
zaporedno obliko,
na sprejemni strani
pa spet nazaj v
vzporedno obliko
zapisa.
14
i_o_4_0.doc
Lastnosti zaporednega prenosa:
o v primerjavi z vzporednim prenosom ima manjšo kapaciteto prenosa
o enostavna povezava, saj zadošča ena sama prenosna pot (npr. eno optično vlakno,
dve žici, itd.)
o doseganje velikih prenosnih hitrosti
o prenos na večje razdalje
Spodnja slika prikazuje zaporedno električno povezavo po treh žicah med dvema
sistemoma.
Žica, ki je ozemljena, izenačuje potenciale obeh sistemov, ostali dve žici pa sta signala za
komunikacijo. Tx (Transmit) je izhod za oddajo signala, ki se povezuje z vhodom za
sprejem signala Rx (Receive) na drugem sistemu.
Z zaporednimi prenosi se srečujemo večinoma pri medsebojnem povezovanju naprav,
kot npr. povezave preko USB vodila, RS-232 vmesnika, Ethernet omrežna povezava.
Tudi znotraj računalnika se, sicer bolj poredko, srečamo z zaporednimi prenosi npr. pri
hitrih linkih za povezavo med procesorji v večprocesorskem sistemu. Znano je npr. tudi
I2C vodilo, ki povezuje procesor z vhodno-izhodnimi enotami in pomnilnimi vezji, vendar
ne v klasičnem smislu za izvajanje programa ampak le za medsebojno izmenjavo
podatkov.
Če komunikacijo med dvema točkama primerjamo na sočasnost komunikacije v obeh
smereh, ločimo tri vrste prenosov:
Enosmerni prenos (Simplex)
V tem primeru je prenosni kanal vedno
enosmeren. Uporablja se poredko, ker v obratni
smeri ni možno potrjevanje sprejema, sporočilo
napak, itd.
Primer takega prenosa zasledimo npr. v
računalniškem sistemu med tipkovnico in računalnikom, kjer tipkovnica pošilja kode
pritisnjenih tipk le v eno smer.
Ppolovični dvosmerni prenos (Half duplex)
En sam kanal je namenjen prenosu v eno in
drugo smer, toda ne istočasno. Lahko si ga
predstavljamo kot enopasovno cesto, po kateri se
izmenično odvija promet v obeh smereh.
15
i_o_4_0.doc
Polni dvosmerni prenos (Full duplex)
Podatki se prenašajo istočasno v obeh smereh
(kot promet na običajni dvopasovni cesti).
Na sliki, ki sledi, je prikazana še malce bolj nazorna primerjava teh treh načinov prenosov
med točkama A in B.
Glede na način usklajevanja zaporednega prenosa med sprejemnikom in oddajnikom
ločimo naslednja dva načina prenosov:
• asinhroni zaporedni prenos
• sinhroni zaporedni prenos
Asinhroni zaporedni prenos (asynchronous serial transmission)
Pri tem načinu prenosa gre za to, da se informacije pošilja in sprejema v neenakomernih
časovnih presledkih, znak za znakom.
Naslednja slika prikazuje oddajo enega znaka preko prenosne linije.
16
i_o_4_0.doc
Ko ni prenosa, govorimo o mirovnem stanju, ki traja poljubno dolgo in ga označuje
logično stanje 1 na izhodu oddajnika.
Prenos se začne s start bit-om, ko se stanje spremeni v logično 0.
Bitu, ki označuje začetek prenosa, sledijo podatkovni biti, ki jih je 5, 7 ali 8. Ti biti
predstavljajo kodo enega znaka, ki se prenaša (različni načini kodiranja, zato 5, 7 ali 8
bitov).
Po dogovoru se najprej odpošlje najmanj vreden podatkovni bit (LSB - Least
Significant Bit), nazadnje pa najbolj vreden bit (MSB - Most Significant Bit).
Prenos znaka se zaključi z bitom, ki označi konec prenosa, to je z enim, dvema ali enim in
pol stop bit-om, ki ima stanje nasprotno start bitu, torej logično 1.
Časovne rezine za oddajo posameznega bita so enako dolge in predstavljajo bitni
interval.
Start bit in stop bit sta namenjena usklajevanju prenosa med sprejemnikom in
oddajnikom, do katerega pride le ob začetku vsakega prenesenega znaka, zato
govorimo o asinhronem prenosu.
Seveda mora biti bitni interval sprejemnika približno enako dolg kot bitni interval
oddajnika, da je znak pravilno sprejet - pravimo, da sta hitrost oddaje in sprejema (bit
rate) enaki.
Sprejemnik bere bit sredi bitnega intervala, ko je bit najbolj zanesljivo veljaven. Če se
hitrost oddaje in hitrost sprejema ne ujemata, prihaja pri vsakem sprejetem bitu do
večjega razhajanja oz neusklajenosti hitrosti. Ta ima najmanj vpliva, če je branje bita na
sredini bitnega intervala, saj v takem primeru lahko pride do zamika med sprejemnikom in
oddajnikom za †1/2 bitnega intervala pri sprejemu 10 bitov, da se bo pojavila napaka pri
branju.
Med posameznimi znaki je poljubno dolgo mirovno stanje (podaljšano stanje stop bita),
zato čas trajanja prenosa celotnega bloka podatkov ni določen (v nasprotju s
sinhronim prenosom, ki je časovno opredeljen).
V mirovnem stanju sprejemnik in oddajnik nista sinhronizirana.
Prenos dveh dodatnih bitov zmanjšuje prepustnost prenosnega kanala, saj predstavljata
režijo - overhead (čas, ki ni izkoriščen za prenos podatka ampak za usklajevanje pri
prenosu).
Če npr. prenašamo 8 bitni podatek, je režija 20 %. V celoti za prenos 8 bitov podatka
prenesemo dejansko 10 bitov (vključno s start in enim stop bitom), od tega 2 bita nista
podatek, kar predstavlja 20 % režije.
Sinhroni serijski zaporedni prenos (synchronous serial transmission)
Pri tem načinu prenosa sta oddajnik in sprejemnik tekom celotnega prenosa podatkov
časovno usklajena - sinhronizirana.
Za sinhronizacijo se uporabljajo različne sinhronizacijske metode:
•
sinhronizacija s posebnim taktnim signalom (clock), ki povezuje oddajnik in
sprejemnik, kar pa je zaradi dodatne žice uporabno le pri prenosu na krajše razdalje
i_o_4_0.doc
17
•
informacija o taktu je med pošiljanjem pridružena podatku, sprejemnik jo pa spet
izloči in uporabi za usklajevanje prenosa
•
sprejemnik ima svoj lokalni takt, ki se sinhronizira (avtomatsko prilagaja) s taktom
oddajnika na principu digitalne fazne zanke (PLL - Phase Locked Loop), ki izrablja
prehode podatkovnega signala iz 0 v 1 in iz 1 v 0 skozi celoten čas prenosa.
Ko oddajnik nima podatkov namenjenih oddaji,
odpošilja določeno sekvenco stanj 0 in 1, tako da
se vzdržuje sinhronizacija med sprejemnikom in
oddajnikom (npr. koda 7E na sliki).
Podatki se pri sinhronem serijskem prenosu združujejo v enote (od nekaj 10 do največ
nekaj 100 ali nekaj 1000 zlogov), ki jim pravimo paketi.
Paketi imajo na začetku glavo (header), ki se nahaja pred podatki in običajno vsebuje
naslovno polje, na koncu pa je podatkom pridružen rep (tail, trailer), v katerem se
običajno nahaja kontrolna vsota (checksum) za preverjanje pravilnosti prenosa in
odkrivanje napak pri prenosu.
Danes se večinoma uporabljata dve glavni vrsti serijskih sinhronih protokolov:
• znakovno orientiran (character- oriented) in
• bitno orientiran (bit-oriented) sinhroni protokol.
Znakovno orientiran (character oriented) sinhroni protokol (npr. BISYNC Binary
Synchronous)
Ta način je primeren predvsem za prenose blokov, ki so sestavljeni iz 8-bitnih znakov kot
npr. ASCII datotek.
Uporablja standarden set krmilnih znakov in sekvenc (SYN, STX, ETX).
čas
SYN SYN STX
znaki za
sinhronizacijo
znak za
začetek
podatkovnega
okvira
---
vsebina
podatkovnega
okvira
ETX
SYN
znak za konec
podatkovnega
okvira
Za sinhronizacijo je na začetku vsakega bloka dodana skupina enega, dveh ali več
mirovnih sinhronizacijskih znakov SYN (0x16). Ti znaki imajo dvojno funkcijo:
i_o_4_0.doc
18
sprejemnik pri sprejemu teh znakov izvede bitno sinhronizacijo, nato pa še sinhronizacijo
okvira, ker pozna njihovo vsebino.
Začetek prenosa okvira podatkov označuje znak STX, konec pa znak ETX.
V primeru prenosa binarnih podatkov, ki lahko zajemajo vse heksadecimalne vrednosti
od 0x00 do 0xFF, pa se mora pred STX in ETX nahajati še poseben DLE znak (Data Link
Escape). DLE pa se vedno nahaja tudi pred vsako kodo v okviru, ki ima vsebino enako
kodi znaka DLE..
čas
SYN SYN DLE STX
znaki za
sinhronizacijo
znaka za
začetek
podatkovnega
okvira
---
DLE
DLE
vsebina
podatkovnega
okvira
ETX
SYN
SYN
znaka za
konec
podatkovnega
okvira
Po tem zaporedju, ko je oddajnik oddal okvir s podatki, prične oddajnik običajno oddajati
SYN znake, da se lahko vzdržuje sinhronizacija s sprejemnikom in da se prenosa dveh
blokov ločita med seboj.
Bitno orientirani (bit-oriented) sinhroni protokol (npr. High level Data Link ControlHDLC)
S to vrsto prenosa se izognemo potrebi po znakih STX in ETX za sinhronizacijo okvira kot
tudi dodatnim znakom DLE.
Za prenos binarnih podatkov je ta vrsta prenosa bolj učinkovita, zato se danes večinoma
uporablja, tako za prenos znakovnih blokov kot binarnih podatkovnih blokov.
Tudi ni potrebno, da je dolžina podatkovnega okvira mnogokratnik števila 8 oz.
dolžine zloga.
čas
01111111 01111111
linija v
mirovnem
stanju
01111110
oznaka za
začetek
podatkovnega
okvira
11011001111101101111100 -------------11
vsebina
podatkovnega
okvira
dodatni vrinjeni
biti 0
01111110
oznaka za
konec
podatkovnega
okvira
01111111 01111111
linija v
mirovnem
stanju
V zgornjem primeru bitno-orientiranega prenosa imajo mirovni zlogi obliko 0x7F (torej
01111111) in služijo za bitno sinhronizacijo, podatkovni okvir pa je na začetku in na koncu
zaključen s flag znakom 0x7E (torej 01111110), ki se uporablja za sinhronizacijo okvira.
Če oddajnik pri oddaji naleti na vsebino podatka, ki ima 5 zaporednih enic kot jih srečamo
npr. v znaku 0x7E, avtomatsko vrine dodatni bit 0 in se na ta način izogne možnosti, da
bi sprejemnik interpretiral vsebino kot sinhronizacijski znak.
Na sprejemni strani se tako dodane 0 spet avtomatsko izločijo.
19
i_o_4_0.doc
Zaključek:
Sinhroni prenos optimalno izkorišča prenosno linijo, saj ni presledkov med znaki v
paketu in ni dodatnih start in stop bitov.
Če je enota prenosa pri asinhronem prenosu posamezen znak, je enota prenosa pri
sinhronem prenosu paket.
Asinhroni protokol je primeren za prenos podatkov pri nižjih prenosnih hitrostih,
večinoma pa se srečujemo s sinhronimi prenosi.
Preverjanje pravilnosti prenosa informacij preko prenosnega medija ali pravilnosti
zapisa informacij v pomnilnik?
Za preverjanje pravilnosti prenosa informacij ali zapisa informacij v pomnilnik, na disk, itd.
se uporabljajo predvsem naslednji kontrolni mehanizmi:
•
preverjanje parnosti - paritete (parity check)
•
izračun kontrolne vsote (control checksum)
•
izračun kontrolne kode CRC (Cyclic Redundancy Check, Cyclic Redundancy
Code)
•
ECC (Error Checking and Correcting)
V vseh štirih primerih gre zato, da oddaji oz. zapisu podatkov priključimo še neko
redundantno kontrolno informacijo, ki omogoča odkrivanje nepravilnosti v zapisu.
Na sprejemni strani oz. pri branju podatkov ponovno izračunamo kontrolno informacijo po
enakem postopku kot na oddajni strani oz. pri zapisu podatkov. Sprejeto oz. prebrano in
izračunano kontrolno informacijo primerjamo med seboj. Če sta kontrolni informaciji
identični, ni prišlo do napake na poti med oddajo in sprejemom oz. med zapisom in
branjem podatkov .
Preverjanje parnosti -paritete (parity check)
Gotovo je preverjanje parnosti z dodatnimi parnostnimi - paritetnimi biti (parity bit) eden
od najbolj preprostih in največ uporabljanih načinov za odkrivanje pravilnosti prenosa in
zapisa informacij. Parnost, ki je lahko soda ali liha se določi s seštevanjem bitov po
modulu 2 (XOR funkcija).
Sodi parnostni bit določimo tako,
da nam vsota po modulu 2 (vsota
brez prenosa) vseh bitov, skupaj s
tem parnostnim bitom da vrednost
0 (sodo število enic).
Pri lihi parnosti pa dobimo vsoto
teh bitov 1 (liho število enic).
Na sliki je primer s sodo parnostjo.
20
i_o_4_0.doc
Ločimo:
• prečno parnost
• vzdolžno parnost
Prečna parnost doda parnostni bit vsaki besedi zapisani v pomnilniku (pri 8-bitni besedi
je to 9-ti bit).
Pri vzdolžni pariteti pa se parnostni bit izračuna za vsak bit (npr. za bit 0) skozi vse
zaporedne besede v določenem naslovnem področju oz. za blok besed, katerega
pravilnost preverjamo.
Tako dobljeno vsoto imenujemo tudi BCC (Block Sum Check Character).
Če je s prečno parnostjo mogoče odkriti napako le na enem bitu v besedi, pa je z
istočasnim preverjanjem prečne in vzdolžne parnosti (2D) mogoče odkriti napake na
dveh, treh ali celo štirih bitih, napake na posameznih bitih pa celo popraviti.
Kontrolna vsota (control checksum)
Kontrolna vsota se v praksi izračunava po različnih aritmetičnih in logičnih algoritmih za
nek blok podatkov.
Zelo enostaven je npr. izračun aritmetične vsote. Seštejemo npr. 8-bitne vsebine na vseh
naslovih tega bloka podatkov in tako dobimo neko n-bitno vsoto. Od tako dobljene vsote
odrežemo npr. spodnjih 16 bitov, ki predstavljajo kontrolno vsoto in jih priključimo
bloku podatkov.
Na sprejemni strani ponovimo postopek izračuna po sprejemu bloka podatkov in
primerjamo spodnji del vsote s sprejeto kontrolno vsoto.
CRC kontrolna koda - (CRC check - Cyclical Redundancy Check)
CRC kontrolna vsota predstavlja bolj zanesljiv, toda tudi bolj zapleten način za odkrivanje
napak v bloku podatkov. Srečujemo jo zelo pogosto (npr. pri zapisu na disk, disketo, pri
omrežnih prenosih, itd.).
Za CRC je značilna velika zmožnost odkrivanja napak, tudi na več bitih.
Pri CRC izračunu predstavlja celoten blok informacij nek polinom, ki ga delimo po modulu
2. Gre zato, da namesto običajnega odštevanja pri deljenju uporabljamo odštevanje po
modulu 2, kar pomeni XOR funkcijo na soležnih parih bitov z drugim polinomom, ki je 17biten, 33-biten ali tudi večbiten in je eden od standardnih polinomov. Imenujemo ga CRC
generator.
Ostanek, ki ostane po takem deljenju, je 16, 32 ali večbiten in predstavlja CRC kodo, ki
se priključi bloku podatkov. CRC koda je torej za en bit krajša od CRC generatorja.
Običajno imajo CRC kode dolžino 16 bitov za bloke velikosti do 4 kB, za večje bloke pa so
vsote 32-bitne.
i_o_4_0.doc
21
Deljenje po modulu 2 je zelo enostavno izvesti s čvrsto logiko z uporabo XOR vrat in
registrov. Izvajanje poteka veliko hitreje kot pri klasični aritmetiki. To je zelo pomembno,
saj je določanje CRC kontrolne vsote le kontrolni postopek, ki se mora izvršiti spotoma pri
branju oz. vpisu bloka podatkov.
Primer izračuna CRC kode za blok podatkov 1010001000001001 z uporabo polinoma
X7 + X4 + X3 + X1 + 1, ki ga predstavlja delitelj 10011011:
blok podatkov
(XOR)
CRC generator
CRC koda
1010001000001001 : 10011011 = 101111011 + 1101100
10011011
01110010
00000000
11100100
10011011
11111110
10011011
11001010
10011011
10100011
10011011
01110000
00000000
11100000
10011011
11110111
10011011
1101100 - ostanek predstavlja CRC kodo
Tako izračunana CRC se priključi bloku podatkov in odpošlje na repu bloka. Pri sprejemu se
iz bloka podatkov ponovno izračuna CRC koda in primerja s sprejeto. Če sta enaki, je blok
podatkov pravilen. (Običajno pa se izračuna CRC iz sprejetega bloka podatkov vključno s
sprejeto CRC. Tako dobljena CRC mora biti 0)
ECC (Error Checking and Correcting)
ECC je še boljši kontrolni postopek, ki poleg odkrivanje napak omogoča tudi popravljanje
napak. Da je to mogoče doseči, je število kontrolnih bitov precej povečano.
Napake se odkrivajo in popravljajo po določenem algoritmu sproti med prenosom
podatkov ("on fly"), zato je skupini vsakih 8-ih bitov dodano 5 kontrolnih bitov, pri skupini
16-ih bitov se število dodanih bitov poveča na 6 kontrolnih bitov, pri skupini 32-ih bitov
je ECC bitov 7 in pri skupini 64-ih bitov je dodano 8 kontrolnih bitov. Za skupino 128
bitov je potreben en bit več, torej 9 kontrolnih bitov.
Tak način odkrivanja in odpravljanja napak srečamo pri prenosih podatkov v
komunikacijskih napravah (npr. modemih, itd.), kjer je pogostost napak večja, pa tudi v
pomnilnikih, kjer je 8, 16, 32, 64- bitna pomnilniška beseda razširjena še z določenim
22
i_o_4_0.doc
številom bitov za kontrolno informacijo. Vezje, ki odkrije napako pri branju iz pomnilnika,
le te ne popravi v pomnilniku, ker je napaka lahko posledica motnje pri branju
informacije, ampak le popravi napako v podatku, ki ga uporabi.
Vzporedni vmesnik - vzporedna vrata - paralelni periferni adapter (parallel port)
Vzporedni vmesnik predstavlja najbolj univerzalni vmesnik za priključevanje različnih
vhodno-izhodnih naprav - od tipk, lučk, tiskalnikov, diskov, itd. čeprav je pri specialnih
napravah bolj smiselno uporabiti tudi specialne vmesnike.
Kaj lahko povemo splošnega za vzporedne vmesnike?
•
običajno lahko vsako od perifernih nožic uporabimo kot vhod ali kot izhod, kar
določimo pred uporabo z vpisom v krmilni (smerni) register. Eno od logičnih stanj
določi nožico in vezja v povezavi z njo kot vhod, vpis drugega logičnega stanja pa
kot izhod
•
če vezja uporabimo kot izhode, delujejo kot zapahi (latch), kar pomeni, da
procesor vanje vpiše vsebino, ki si jo zapomnijo in jo zadržijo na izhodih do
ponovnega vpisa.
Vsebino, ki jo nameravamo odposlati na izhode, vpišemo v podatkovni register
vmesnika.
•
če vezja uporabimo kot vhode, prenesejo vsebino iz vhodov (iz okolice) na
procesorjevo podatkovno vodilo le v trenutku, ko procesor naslavlja (bere)
podatkovni register
•
nekateri vhodi lahko pri izbranem nivoju ali prehodu signala povzročajo zahteve
po prekinitvi, kar je ugodno, da vmesnik obvesti procesor npr. o novih podatkih
na vhodih vmesnika. Po resetu so vse prekinitve onemogočene
•
ker imajo izhodi nizke izhodne toke, lahko nanje priključimo tranzistorje ali druge
ojačevalnike signalov, ki zmorejo krmiliti tudi večja bremena (npr. ventilatorje,
zvočne indikatorje-alarme, lučke, itd.)
Kako uporabimo paralelni vmesnik?
•
pred uporabo (običajno na začetku programa) vmesnik initializiramo, s čemer ga
pripravimo za konkretno uporabo. Pri tem postopku z vpisom v krmilni register
določimo nožice, ki bodo vhodi in nožice, ki bodo izhodi.
Preko podatkovnega registra vpišemo na izhode tudi začetno stanje
•
če naj vmesnik povzroča prekinitve, jih omogočimo, ko to želimo in po potrebi
onemogočimo. Poskrbimo tudi za določitev vektorja za prekinitve. V času izvajanja
prekinitvenega programa poskrbimo, da vmesnik umakne zahtevo po prekinitvi
•
po potrebi vpisujemo vsebine v podatkovni register ali jih iz njega beremo
23
Nadzor prenosa preko vzporednega vmesnika
Za nadzor prenosa med vzporednim
vmesnikom in napravo, ki je nanj priključena, je
lahko podatkovnim signalom dodan še posebni
signal, ki ima vlogo taktnega signala.
Po njem oddajnik sporoča sprejemniku, kdaj je
podatek veljaven oz. razpoložljiv (na sliki je to
signal "data is available").
Poleg tega pa lahko sprejemnik v obratni smeri
obvesti oddajnik s posebnim signalom, da je
podatke že sprejel in čaka na nove podatke ali
pa da še poteka sprejem podatkov (na sliki je to
signal "data has been used/not ready").
Slika prikazuje povezavo računalnika s
tiskalnikom preko vzporednih vrat - Centronics
vmesnika.
Signal Data Strobe (vloga takta) sporoča
tiskalniku, kdaj so podatki D0 - D7 veljavni, z
Acknowledge signalom pa tiskalnik potrjuje
sprejem podatkov.
S signalom Busy tiskalnik signalizira, da ni
pripravljen na sprejem ali pa sploh ni vključen signal služi za kontrolo pretoka podatkov.
Pogled na moški del 50-polnega Centronics
konektorja (stran s kontakti), ki se običajno
nahaja na kablu V/I naprave
Ženski del 50-polnega Centronics konektorja
(stran s kontakti), ki je običajno vgrajen v
računalnik
Slika predstavlja primer vzporednega
vmesnika Port1 v mikrokrmilniku
MC6803.
S smernim registrom, ki je krmilni
register in se nahaja na naslovu 0,
določimo način delovanja za
posamezen signal - logična 1 določa
izhod, logična 0 pa vhod.
Preko podatkovnega registra CPU
bere stanja vhodov in postavlja stanja
na izhode. (Več o uporabi glej v
pomoči simulatorja MC6803!)
i_o_4_0.doc
i_o_4_0.doc
24
Zaporedni komunikacijski vmesnik - zaporedna vrata
(Serial Communication Interface Adapter, Universal Asynchronous Receiver
Transmitter)
Za to vrsto vmesnikov lahko rečemo, da poenostavljajo prenos podatkov, saj zanj
zadostujeta že dve prenosni liniji.
Komunikacijski adapterji so namenjeni sinhronim ali asinhronim prenosom, nekateri pa
omogočajo oba načina komunikacije.
mikro
procesor
UART
vmesnik
Tx
Rx
oddaja
sprejem
RTS
CTS
Clock Rx
Clock Tx
DTR
krmilni
signali
DSR
GND
Kaj vsebuje tipičen UART?
•
Osnovo delovanja predstavljata sprejemnik za sprejem serijsko sprejetih bitov
in oddajnik za oddajo bitov drugega za drugim.
Sprejemnik in oddajnik sta neodvisna drug od drugega in lahko delujeta istočasno
- eden oddaja, drugi sprejema.
•
Hitrost prenosa, ki jo merimo v bitih na sekundo - baudih, določata takta signala
Clock Rx za sprejem bitov in Clock Tx za oddajo. Ta dva urina signala lahko
pripeljemo iz okolice ali pa uporabimo že kar vgrajeni vezji, ki generirata urina
signala in jima hitrost lahko programsko nastavimo.
Standardne hitrosti so 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600 in
115200 baudov (lahko izberemo tudi poljubno hitrost, vendar se morata hitrost
oddajnika in sprejemnika na drugi strani ujemati).
•
Poleg oddajnega in sprejemnega signala ima UART še nekaj krmilnih signalov
(npr. RTS, CTS, DTR, DSR, itd.), s katerimi se sporazumeva z napravo, na katero je
priključen (npr. z modemom) in z njo usklajuje čas, ko je možen prenos v eni ali
drugi smeri.
Kako potekata sprejem in oddaja znaka?
•
Pred uporabo vmesnika je treba vmesnik programsko initializirati.
Z vpisi v krmilne registre izberemo:
- izvor urinih signalov (notranji/zunanji)
- hitrost prenosa pri sprejemu in oddaji
- po izbiri omogočimo sprejem in/ali oddajo
25
•
i_o_4_0.doc
po izbiri omogočimo/onemočimo prekinitve pri sprejemu in oddaji
število podatkovnih bitov (5, 7, 8)
število stop bitov
kontrolo paritete z dodatnim bitom (soda, liha, brez)
Oddaja poteka preko podatkovnega registra, ki ga imenujemo oddajni register.
Ko je oddajni register prazen, lahko vanj programsko prenesemo kodo znaka, ki
jo želimo odposlati zunanji napravi preko zaporednega vmesnika.
Vsebina se pomakne v poseben pomikalni register (torej imamo dva registra double buffering), v katerem se avtomatsko dodajo še start bit in stop biti, pa
tudi parnostni bit, če je tako določeno.
V skladu s taktom ure oddajnika se nato prične oddaja bit za bitom.
Novo vsebino lahko vpišemo v oddajni register, čim je prazen. Če je oddajni
register prazen, lahko ugotovi program s pollingom statusnega registra, kjer se
prazno stanje zaznamuje, bolj enostavno in učinkovito pa je z uporabo prekinitve
pri oddaji.
•
Pri sprejemu znaka pa je zaporedje obrnjeno.
V pomikalnem registru se zbirajo biti, ki so prispeli po sprejemni liniji v taktu kot ga
določa ura sprejemnika.
Ko so vsi biti enega znaka zbrani, vključno s start bitom in stop biti, se vsebina
prepiše v sprejemni register.
Iz sprejemnega registra procesor lahko prebere vsebino znaka tako, da naslovi
sprejemni register. Časa za branje ima procesor na razpolago toliko kot traja
sprejem še enega znaka. Če se branje v tem času ne izvede, pride do napake.
Kdaj je sprejemni register poln lahko program ugotovi s pollingom statusnega
registra ali bolje preko prekinitve, ki jo sproži poln sprejemni register.
•
Do prekinitve v zaporednem vmesniku pride:
o ko je sprejemni register poln (zato, da prekinitveni strežni program lahko
prebere sprejet znak prej, preden pride nov znak, sicer bi prišlo do izgube
sprejetega znaka)
o ko je oddajni register prazen (zato, da prekinitveni strežni program lahko
vpiše nov znak takoj, ko je to možno in da oddaja naslednjega znaka poteka
nemoteno naprej brez zakasnitve, če pošiljamo več znakov zapored enega za
drugim)
V prekinitvenem strežnem programu, ki se nanaša na sprejem znaka, procesor
izvede samo branje statusnega registra in prebere kodo znaka iz sprejemnega
registra ter jo shrani v pomnilnik (znak obdela glavni program, ko pride čas za
obdelavo).
V prekinitvenem strežnem programu, ki je vezan na oddajo pa procesor prebere
stanje statusnega registra in nato prenese - vpiše naslednji znak iz pomnilnika v
oddajni register.
26
i_o_4_0.doc
Serijski vmesniki imajo na sprejemni in oddajni strani pogosto še medpomnilnike, ki
omogočajo shranjevanje več zaporednih znakov (npr. 8, 16, 32, 64, itd). V takem primeru
vpiše (ali prebere) program v vmesnik več zaporednih znakov, ki se potem avtomatsko
oddajo drug za drugim.
SCI - zaporedni asinhroni komunikacijski vmesnik v mikrokrmilniku MC6803
Na sliki je prikazan programski model
zaporednega komunikacijskega vmesnika
SCI v MC6803 in priključne nožice
signalov povezanih s komunikacijo
Več o uporabi SCI vmesnika glej v
pomoči simulatorja MC6803!
Opis poteka oddaje v MC 6803
Poenostavljen prikaz notranje zgradbe oddajnega dela SCI vmesnika
Hitrost oddaje (bit rate) in izvor urinega signala (notranji, ki izvira iz takta procesorja ali
zunanji, ki ga SCI enota sprejema preko priključne nožice P22) sta programsko nastavljiva
z vpisom v kontrolni register na naslovu $10.
V kontrolnem delu kontrolno - statusnega registra na naslovu $11 lahko program omogoči
oddajo (TE bit - Transmit Enable) in omogoči generiranje prekinitvene zahteve, ko je
prazen oddajni register (TIE bit - Transmit Interrupt Enable).
Znak lahko program prenese v oddajni register na naslovu $13 šele, ko je le ta prazen,
sicer nov znak prekrije prej vpisan znak in pride do izgube znakov.
i_o_4_0.doc
27
Ob izpraznitvi oddajnega registra se v statusnem delu kotrolno - statusnega registra
postavi bit (TDRE - Transmit Data Register Empty), ki signalizira to stanje in ga lahko
upošteva program. Istočasno pa SCI enota tudi povzroči prekinitveno zahtevo
procesorju, če je prekinitev pri oddaji omogočena s TIE bitom.
Ko procesor sprejme prekinitveno zahtevo, ki je maskirna, prevzame prekinitveni vektor,
ki pripada SCI enoti z zaporednih naslovov $fff0 in $fff1. Prekinitveni vektor kaže na
prekinitveni strežni program. Ta je skupen tako za oddajo kot za sprejem.
Prekinitveni strežni program, ki se nanaša na oddajo:
• prebere stanje statusnega registra, pri čemer se umakne prekinitvena zahteva in
briše bit TDRE
• vpiše nov znak v oddajni register.
Ko se izprazni tudi oddajni pomikalni register, v katerem prihaja do pretvorbe iz
vzporedne oblike zapisa bitov v zaporedno, se vanj avtomatsko prenese znak, ki čaka v
oddajnem registru. Če je oddaja omogočena, se prične oddaja znaka bit za bitom,
vključno s start bitom in stop bitom, ki sta se avtomatsko dodala.
Opis poteka sprejema v MC 6803
Poenostavljen prikaz notranje zgradbe sprejemnega dela SCI vmesnika
$0012
sprejemni
register
Tudi sprejem znaka je zelo podoben oddaji, le, da poteka v obratni smeri.
Pri SCI enoti je hitrost oddaje in sprejema enaka.
Do sprejema pride le, če v kontrolnem delu kontrolno - statusnega registra omogočimo
sprejem z bitom RE (Receive Enable).
V sprejemni pomikalni register se v skladu s taktom sprejemajo biti drug za drugim in
pretvarjajo v vzporedno obliko, iz katerega se po sprejemu stop bita prenese vsebina v
sprejemni register na naslovu $12, ki je programsko dostopen. Start in stop bit se
avtomatsko odstranita.
Sprejet znak v sprejemnem registru vpliva na stanje bitov RDRF (Receive Data Register
Full) in ORFE (Overrun Framing Error) v statusnem delu kontrolno - statusnega registra.
28
i_o_4_0.doc
Če smo prekinitev pri sprejemu znaka predhodno programsko omogočili s postavitvijo
bita RIE (Receive Interrupt Enable) v kontrolnem delu kontrolno - statusnega registra, pride
do prekinitvene zahteve procesorju.
Procesor prevzame naslov s prekinitvenega vektorja, ki se nahaja na naslovih $fff0 in
$fff1in izvede prekinitveni strežni program. V njem prebere sprejet znak iz sprejemnega
registra in tako pripravi prostor za sprejem novega znaka.
Branje iz sprejemnega registra je v vsakem primeru treba opraviti pred sprejemom
novega znaka, sicer nov znak prekrije staro vsebino in pride do izgube znaka - Overrun
Error, kar se zaznamuje v statusnem delu kontrolno - statusnega registra.
Bita RDRF (Receive Data Register Full) in ORFE (Overrun Framing Error) se brišeta in
prekinitvena zahteva se umakne, ko procesor prebere kontrolno statusni register in ko
prebere znak iz sprejemnega registra.
Usklajevanje pretoka podatkov med dvema napravama pri zaporednih prenosih
Pri pretoku podatkov ne prihaja do zapletov, če zmore sprejemna stran sproti obdelati
sprejete znake in če je vedno pripravljena na sprejem. Če pa to ni mogoče (zasičenje
sprejemnika), je treba poskrbeti za usklajevanje pretoka podatkov med oddajnikom in
sprejemnikom. To lahko dosežemo na dva načina:
•
usklajevanje s posebnimi dodatnimi signali (aparaturno usklajevanje)
•
usklajevanje s krmilnimi znaki (programsko usklajevanje)
Aparaturno usklajevanje poteka z eno dodatno usklajevalno linijo v vsaki smeri med
oddajnikom in sprejemnikom. Sprejemnik, po njej sporoča oddajniku: "počakaj" ali "lahko
oddajaš" (npr. request to send RTS). Na tak način se prenos začasno zaustavi za poljubno
dolgo.
Bolj preprosto pa je programsko usklajevanje brez dodatnih signalov z medsebojnim
pošiljanjem "usklajevalnih znakov Xon (lahko oddajaš) in Xoff (počakaj)".
Vloga navedenih krmilnih znakov je enaka vlogi logičnih stanj signala na usklajevalni liniji
pri aparaturnem usklajevanju.
Izvedba serijske komunikacije je odvisna tudi od izbranega linijskega vmesnika oz.
protokola (vmesnik za povezovanje z oddaljeno napravo preko medija). V uporabi je
precej vrst linijskih vmesnikov.
29
i_o_4_0.doc
Zaporedni linijski vmesnik RS-232C oz. EIA-232D/V.24 - napetostna zanka
RS-232C je že dolgo uveljavljen standard za zaporedno povezovanje dveh naprav preko
napetostne zanke oz napetostnih nivojev.
Signali so simetrični glede na GND.
Logični nivo 0 se nahaja med napetostima 3 V in 12 V, logična 1 pa med napetostnima
nivojema -3 V in -12 V.
Standard zagotavlja delovanje brez napak do razdalje 15 m.
Legenda signalov, ki se najbolj pogosto uporabljajo:
GND (ground) - signalna masa in ozemljitev
TxD (transmit data) - oddaja podatkov
RxD (receive data) - sprejem podatkov
RTS (request to send) - zahteva za pošiljanje podatkov
CTS (clear to send) - pripravljen za oddajo
Standardni priključek RS-232C
predstavlja DB-25 ali DB-9 polni
konektor.
Na sliki sta moški in ženski del 25polnega konektorja (pogled s strani
kontaktov) in moški ter ženski del 9polnega konektorja
30
i_o_4_0.doc
Zaporedni linijski vmesnik RS-422 - diferenčni vhodi
Za prenos na daljše razdalje in s povečano hitrostjo se uporablja standard RS-422A/V.11.
Za ta prenos je značilna uporaba posukanih parov žic - paric in diferenčnih oddajnikov
oz. sprejemnikov.
Vmesnik RS-422A/V.11
uporablja diferenčne
ojačevalnike
Diferenčni oddajnik oddaja dva signala enake velikosti in nasprotne polaritete tako pri
logičnem stanju 1 kot pri stanju 0.
Diferenčni sprejemnik sprejme le razliko signalov, zato se izločijo motnje, ki zaradi
posukanih žic v enaki meri vplivajo na oba oddana signala.
Hitrost prenosa je 1 Mbps na razdalji 10 m oz. 10 Kbps na razdalji 1 km, če nimamo linij
zaključenih s karakteristično impedanco.
Če pa linije zaključimo s karakteristično impedanco, v praksi je to z uporom od 50 :
do 200 :, odvisno od karakteristične impedance linije, lahko na razdalji 10 m prenašamo
z 10 Mbps in pri razdalji 1 km s hitrostjo 100 Kbps.
31
i_o_4_0.doc
Ničelni modem - modemski nadomestek (null-modem).
Če neposredno povežemo dva računalnika preko zaporednih vrat, računalnika pa
uporabljata za priključitev modema standard RS-232D, moramo uporabiti za povezavo
kabel "ničelni modem" (null modem).
Ničelni modem ni modem ampak kabel, ki emulira modem in tako poveže dva
računalnika med seboj, podobno kot bi ju povezali z modemsko povezavo, le da se
modem uporablja za prenos na večje razdalje.
Signali ničelnega modema, ki
povezujejo dva RS-232D konektorja,
so povezani "križno" - sprejemna
nožica z oddajno
32
i_o_4_0.doc
Analogno in digitalno multipleksiranje
Naprave lahko med seboj povezujemo tako, da sta dve napravi, ki medsebojno
komunicirata, povezani s svojo fizično povezavo.
Tak način povezovanja je drag.
Na oddajni strani lahko z multiplekserjem združimo več počasnih vezij oz. naprav na hitri
skupni prenosni medij, ki si ga vezja delijo.
Na sprejemni strani je treba signale spet razdružiti - ločiti med seboj, kar opravi
demultiplekser.
Kaj je multiplekser?
Multiplekser je vezje, ki zagotovi, da si isto fizično komunikacijsko povezavo
deli več uporabnikov.
Gre za vezje, ki ima več vhodov, na katere je priključenih več različnih signalov.
Multiplekserji so običajno izdelani s polprevodniškimi stikali v obliki integriranih vezij.
Če na vhod lahko priključimo analogni signal, ki ga prenaša multiplekser, govorimo o
analognem multiplekserju.
Multiplekserji, ki pa lahko multipleksirajo le digitalne signale, so digitalni multiplekserji.
Veliko uporabljamo dve vrsti multipleksiranja signalov:
•
časovni multipleks ((time division multiplexing)
•
frekvenčni multipleks (frequency division multiplexing)
33
i_o_4_0.doc
Pasovna širina
Ko govorimo o prenosu informacij preko prenosnega medija, se srečamo s pojmom
pasovna širina (bandwidth). Ta v bistvu predstavlja frekvenčno območje prenosnega
kanala. Določimo jo kot razliko med najvišjo in najnižjo frekvenco signala, ki ga lahko
prenese medij oz. kanal. Tako je maksimalna hitrost prenosa po kanalu odvisna od
razpoložljive pasovne širine.
Čim večja je pasovna širina tem večja je lahko hitrost prenosa.
Časovni multipleks (time division multiplexing)
Komunikacijska povezava je časovno razdeljena med uporabnike, naprave. Vsaki napravi
pripada povezava v času določene časovne rezine, preden se preklopi na naslednjo.
Vsak vhodni kanal zaseda celotno pasovno širino prenosnega kanala, toda ne stalno
ampak le za določen čas.
S časovnim multiplekserjem prenašamo na isti izhod in na isto žico različne
signale v različnih časih - signale časovno multipleksiramo.
Lahko povemo tudi drugače: več uporabnikov si deli skupni čas na istem
prenosnem mediju.
Pri časovnem multipleksu si lahko
predstavljamo, da je vsak vhod
povezan na krmiljeno stikalo, na
drugi strani pa so vsa stikala
povezana na skupni izhod.
V določenem trenutku je lahko
sklenjeno le eno stikalo, kar
zagotavlja dekoder, ki krmili
stikala. Katero stikalo je vklopljeno,
določa kombinacija krmilnih
signalov A0 in A1.
34
Frekvenčni multipleks (frequency division multiplexing)
Pasovna širina
prenosnega medija je
razdeljena v več
frekvenčnih pasov kanalov
Pri frekvenčnem multipleksu si več naprav deli pasovno širino skupnega
prenosnega medija, tako da vsaki napravi pripada določen frekvenčni pas.
Slika nazorno prikazuje, da se štirje
frekvenčni kanali, od katerih ima vsak
pasovno širino eno frekvenčno enoto,
združijo v enega, ki mora imeti pasovno
širino štiri frekvenčne enote.
Frekvenčni multipleks si lahko
predstavljamo kot združitev več kanalov
v enega samega.
i_o_4_0.doc
35
i_o_4_0.doc
Časovnik (timer)
V večini računalniških sistemov se nahaja tudi eden ali več vhodno-izhodni vmesnik, ki se
uporablja za časovno opredeljevanje dogodkov. Imenujemo ga časovnik (timer).
Osnova časovnika je eden ali več binarnih števcev, ki štejejo taktne impulze nekega
stabilnega izvora, pogosto kar takte urinega signala procesorja. Ker se takti ponavljajo
enakomerno, je število impulzov, ki jih števec prešteje, proporcionalno pretečenemu
času.
S časovnikom med drugim lahko merimo:
- čas za osveževanje dinamičnega RAM pomnilnika preko DMA
- čas za preklapljanje med opravili pri večopravilnem načinu delovanju računalnika
- čas, ki naj preteče med enim in drugim dogodkom
- čas, ko se procesor ne odziva na prekinitve in ga je po tem času potrebno
deblokirati
- čas za generiranje tonov različnih frekvenc namenjenih zvočniku
- trajanje periode, impulza, pavze nekega zunanjega signala
- sistemski čas, itd.
Namesto, da števec šteje taktne impulze, ga lahko uporabimo tudi za štetje poljubnih
dogodkov (sprememb nekega zunanjega signala), če omogoča priključitev na nek zunanji
signal. V takem primeru je uporabljen kot števec dogodkov in ne kot časovnik.
Spodnja slika prikazuje, kako lahko merimo čas:
•
programsko z uporabo notranje ure procesorja in z upoštevanjem časa izvajanja
posameznega ukaza
•
z uporabo časovnika, pri katerem aparaturno vgrajen števec šteje časovne enote
Slabosti uporabe programskih zakasnitev z upoštevanjem časa izvajanja posameznih
ukazov je več, zato se tak način uporablja le v izjemnih primerih:
• v času, ko program izvaja zakasnitev, procesor ne dela ničesar drugega
• v času izvajanja zakasnitve ne sme priti do prekinitve
36
•
i_o_4_0.doc
pri prenosi programa v mikroračunalnik z drugačnim taktom je potrebno modificirati
program
V naslednjem kratkem opisu se bomo pomudili pri razlagi časovnika kot ga srečamo v
mikrokontrolerju MC6803, saj omogoča razumevanje njegovega delovanja tudi
razumevanje in uporabo časovnikov v drugih mikrokontrolerjih in mikroračunalniških
sistemih.
Več o časovniku najdeš v pomoči MC6803!
Na spodnji sliki je prikazan programski model časovnika, ki ga sestavljajo štirje registri.
Osnovo časovnika v MC 6803 predstavlja 16-bitni prostotekoči števec (Free Running
Counter), ki se nahaja na dveh sosednjih naslovih $0009 in $000A.
Prostotekoči števec poganja pri MC 6803 kar takt procesorja, v splčošnem pa lahko na
časovnik priključimo signal iz poljubnega vira in zato lahko šteje kakršnekoli dogodke.
Ker je števec 16-biten, je maksimalna vrednost, do katere lahko števec prišteje, $FFFF. Ob
naslednjem taktu je stanje števca spet $0000.
Če je frekvenca ure npr. 1 MHz, traja ena perioda eno mikrosekundo. Čas, v katerem
preteče števec od začetnega do končnega stanja, je tako 65536 mikrosekund oz.
0,065536 sekunde.
37
i_o_4_0.doc
Prelivni način (overflow) delovanja časovnika
Za merjenje daljših časov razširimo število bitov števca iz 16 na poljubno število tako, da
programsko štejemo, kolikokrat je števec prešel stanje $FFFF (ob vsakem prelivu
povečamo stanje v neki lokaciji ali registru). Pravimo, da štejemo prelive (Overflow)
preko stanja $FFFF (podobno kot bi šteli dneve s prehodi ure preko poldneva). Na ta
način povečamo 16-bitni števec, ki je izdelan v časovniku v strojni obliki, z dodatnim
števcem, ki je realiziran programsko.
Z združitvijo stanj obeh števcev dobimo števec poljubne dolžine za merjenje poljubno
dolgih časov.
Ko se pojavi preliv, torej, ko števec preide stanje $FFFF, se to zaznamuje z bitom v
statusnem registru časovnika (naslov statusnega registra $0008 je nespremenljiv). S
pollingom tega bita v statusnem registru lahko ugotovimo, kdaj je prišlo do preliva in
programsko realiziran števec prelivov povečamo za 1.
Ker pa vemo, da polling predstavlja precejšnjo izgubo časa, je bolj ugodno, če ob
prehodu stanja $FFFF časovnik zahteva od procesorja prekinitev.
Da časovnik lahko zahteva prekinitev ob prelivu stanja preko $FFFF, moramo v krmilnem
registru časovnika predhodno (v initializaciji) omogočiti prekinitve.
Časovnik umakne prekinitveno zahtevo, ko procesor zaporedoma prebere stanje
statusnega registra in stanje prostotekočega števca.
38
i_o_4_0.doc
Spodnja slika nazorno prikazuje, kako s štetjem prelivov merimo čase, ki so daljši in
presegajo čas določen z obsegom, ki ga zmore prostotekoči števec s 16-imi biti.
Prostotekočega števca tudi ne postavljamo na začetno vrednost 0 iz dveh razlogov:
•
ker je pri MC 6803 števec skupen tako za časovnik kot taktni generator SCI enote
•
ker običajno istočasno ne merimo enega samega časa ampak časovno
opredeljujemo več dogodkov hkrati
V predstavljenem primeru je števec od začetka do konca merjenja štirikrat prešel
maksimalno vrednost $FFFF, zato je v tem času preteklo število taktov, ki je enako:
N = (3 * $FFFF ) + R1 + R2
Tudi sodoben
mikrokrmilnik MC
68HC11, ki se veliko
uporablja, ima
zgradbo zelo
podobno MC 6803,
le da ima vgrajen
A/D pretvornik, SPI
enoto za zaporedno
povezovanje ,
notranji ROM in
EEPROM ter precej
več portov.
39
i_o_4_0.doc
Primerjalni način (compare) delovanja časovnika
V ta namen ima časovnik vgrajen 16-bitni primerjalni register (Output Compare
Register) na naslovih $000B in $000C. Namen primerjalnega registra je, da vanj vpišemo
neko vnaprej določeno vrednost (podobno kot nastavimo alarm pri budilki).
V časovniku stalno poteka primerjava stanja prostotekočega števca in vrednosti v
primerjalnem registru. Ko se vsebini izenačita, se postavi ustrezen bit v statusnem
registru časovnika.
Če je omogočena prekinitev v primerjalnem načinu delovanja časovnika, odpošlje
časovnik ob postavitvi tega bita procesorju tudi prekinitveno zahtevo. Do prekinitve torej
pride ob vnaprej določenem času.
Primerjalni način omogoča, da procesor takrat izvede določen program oz aktivnost. Za
povezovanje z okolico je v časovnik že vgrajeno posebno vezje, ki omogoča, da se na
nožici P21 porta 2 avtomatsko spremeni nivo signala. Kakšno bo stanje na omenjenem
izhodu, vnaprej pred uporabo programsko določimo v krmilnem registru z vpisom
ustreznega bita.
Časovnik umakne prekinitveno zahtevo, ko procesor prebere stanje statusnega registra
in vpiše novo vrednost v primerjalni register.
Tak način delovanja časovnika torej omogoča procesorju izvajanje aktivnosti (programov)
ob vnaprej določenem času in odpošiljanje časovno kontroliranih signalov v okolico.
Z uporabo primerjalnega načina lahko generiramo signale z določeno periodo, pri katerih
je čas pavze in čas impulza poljubno nastavljiv.
40
i_o_4_0.doc
Na spodnji sliki je prikazan primer uporabe primerjalnega načina delovanja časovnika za:
•
generiranje impulza določene dolžine
•
generiranje periodičnega signala
41
i_o_4_0.doc
Prestrezni način (input capture) delovanja časovnika
Tretji, prestrezni način delovanja časovnika (Input Capture) pa je povezan s
prestrezanjem trenutnega stanja prostotekočega števca ob spremembi stanja
zunanjega signala na nožici P20 porta 2. Stanje prostotekočega števca se prestreže v
poseben 16-bitni prestrezni register, ki se nahaja na naslovih $000D in $000E.
Namen tega prestrezanja je, da se zabeleži točen čas spremembe signala, procesor pa
lahko nato z zakasnitvijo kadarkoli prebere shranjeno vrednost (vendar prej, preden se
prestreže nova vrednost).
Ta način delovanja spominja na uporabo ure v vlogi štoparice, kjer prvi zunanji dogodek
določa začetek merjenja, drugi dogodek pa konec merjenja.
V časovniku pride do prestrezanja ob prednji ali zadnji strmini signala P20, kar
programsko določimo pred uporabo s postavitvijo ustreznega bita v krmilnem registru.
Tako kot v prejšnjih dveh načinih delovanja časovnika, se tudi v prestreznem načinu
delovanja časovnika zaznamuje vpis v prestrezni register s postavitvijo ustreznega bita v
statusnem registru časovnika.
Če smo predhodno omogočili prekinitve v prestreznem načinu, se istočasno pojavi tudi
zahteva za prekinitev, ki povzroči, da se izvede ustrezen prekinitveni strežni program. V
njem procesor preveri stanje statusnega registra in prebere stanje prestreznega registra
terr ga shrani v pomnilnik za nadaljnjo obdelavo.
Časovnik ne umakne zahteve po prekinitvi, dokler procesor zaporedoma ne prebere
vsebine statusnega registra in vsebine prestreznega registra.
Ta način delovanja časovnika uporabljamo za merjenje trajanja dolžine periode,
impulza in pavze pri zunanjem signalu na nožici P20.
Čas med dvema dogodkoma izmerimo preprosto tako, da preberemo in si zapomnimo
stanje prostotekočega števca ob prvem dogodku, nato pa še stanje ob drugem dogodku
ter izračunamo razliko njunih stanj.
42
i_o_4_0.doc
Če poznamo še dolžino urine periode, lahko tako določimo absolutni čas, ki je pretekel
med enim in drugim dogodkom.
Na spodnji sliki je prikaz merjenja časa s prestrezanjem stanja prostotekočega števca:
•
v prvem primeru od pojava prve strmine signala do ponovitve iste strmine signala
•
v drugem primeru pa od prve do zadnje strmine signala, zato je po sprejeti prvi
strmini treba v krmilnem registru časovnika spremeniti aktivno strmino
Merjenje daljših časov je možno tudi v primerjalnem načinu tako, da kombiniramo
prelivni in primerjalni način, pa tudi v prestreznem načinu s kombinacijo prelivnega in
prestreznega načina.
Za vsakega od treh načinov delovanja je v mikrokontrolerju predviden poseben
prekinitveni vektor, zato so prekinitveni programi ločeni med seboj.
43
i_o_4_0.doc
Vključevanje računalnika v proces
Signali, s katerimi se računalnik povezuje z okoljem, se lahko nahajajo v digitalni ali
analogni obliki:
•
digitalne signale lahko procesor sprejema ali oddaja preko preprostega vmesnika
(npr. vzporednih vrat, zaporednih vrat)
•
neposreden sprejem analognih signalov pa ni mogoč, zato je treba pretvoriti
analogne signale v digitalne, kar opravi analogno-digitalni pretvornik (A/D
converter).
Pretvorbo v obratni smeri, torej iz digitalnih signalov v analogne signale pa izvede
digitalno-analogni pretvornik (D/A converter).
Eno od področij elektrotehnike, ki se najhitreje razvijajo, je gotovo področje senzorjev
(pravimo jim tudi tipala) in pretvornikov (transducer).
Pretvorniki so elementi, ki pretvorijo neko fizikalno neelektrično veličino, kot npr.
temperaturo, pospešek, magnetno polje, zvok, osvetljenost, pritisk, itd. v napetost
ali neko drugo električno veličino. Govorimo o temperaturnih pretvornikih, induktivnih,
Hallovih, kapacitivnih, optičnih pretvornikih.
Signale, ki nastanejo po pretvorbi, lahko uporabijo elektronska vezja, lahko jih pretvorimo
v digitalno obliko z A/D pretvorniki in nato shranimo v računalnik in jih v njem naprej
obdelujemo.
Pod obdelavo signalov razumemo npr. izračun povprečne vrednosti signala v določenem
časovnem območju, množenje signala z ustreznim faktorjem, ločitev koristnega signala od
motenj, linearizacijo signala, itd.
Če smo z uporabo senzorjev dobili podatke o različnih fizikalnih veličinah v realnem svetu,
pa z aktuatorji (aktivatorji, izvršilni členi), ki jih priključimo na izhodne vmesnike
računalnika, vplivamo na okolico računalnika oz. na razmere v realnem svetu.
Tako se lahko računalnik povezuje preko vmesnikov na različne aktuatorje:
• elektromehanska stikala kot so releji in kontaktorji (močnostna stikala)
• tranzistorska stikala
• tiristorji
• magnetni ventili, itd.
Z računalnikom lahko izvajamo:
• krmiljenje
• regulacijo
O krmiljenju govorimo, če vplivamo na neko dogajanje oz. proces preko aktuatorjev,
nimamo pa povratne informacije o učinku vpliva.
Pogosto pa krmilimo proces tako, da stalno merimo veličine, ki nastopajo v procesu in na
osnovi njihovih vrednosti in želene vrednosti vplivamo na proces - govorimo o povratni
44
i_o_4_0.doc
zvezi in regulaciji procesa. Na ta način zagotavljamo, da regulirane veličine ostanejo v
določenih, vnaprej predpisanih mejah.
Zamislimo si razmeroma preprost primer uravnavanja temperature v nekem prostoru. Če
želimo temperaturo uravnavati, jo moramo prav gotovo meriti. Za merjenje temperature
uporabimo temperaturni senzor. Ta daje električni signal, ki je proporcionalen temperaturi.
Temperatura v prostoru lahko od želene temperature odstopa veliko, malo ali pa je v
predpisanih mejah. Ko pride do odstopanja temperature, je treba vplivati na razmere v
prostoru z dodatnim ogrevanjem ali hlajenjem. Pri tem pa imamo različne možnosti.
Lahko imamo vgrajeno grelno telo, ki ga vklopimo, čim temperatura v prostoru pade pod
določen nivo in izklopimo, ko temperatura preseže določeno vrednost. Ko je grelno telo
vklopljeno, oddaja stalno enako moč. Gre torej za nezvezni regulator, pri katerem sta
možna le dva položaja: grelec je vklopljen ali pa izklopljen.
Opisano regulacijo temperature v prostoru bi lahko izboljšali tako, da bi grelcu dovajali
različno moč glede na razliko med želeno in trenutno temperaturo, torej glede na velikost
odstopanja. Čim večje bi bilo odstopanje od želene temperature tem večjo moč bi oddajal
grelec.
Govorimo o zveznem procesu regulacije, pri katerem izhod iz regulatorja lahko zavzame
katerokoli vrednost.
Če je regulacija izvedena z računalnikom, ki je digitalni stroj, se lahko zveznim
spremembam nastavitev zelo približamo, čeprav računalnik lahko operira le s končnim
številom diskretnih izhodnih stanj oz. vrednosti.
Čim večje je število izhodnih bitov, s katerimi vplivamo na proces, tem več različnih
stanj lahko zavzame izhod in tem bolj se približujemo zveznosti nastavitev.
Okolje, na katerega vplivamo, ponavadi zahteva analogne signale, medtem ko računalnik
preko svojega vmesnika lahko posreduje le digitalne. Rešitev predstavlja vmesnik D/A, ki
ga običajno priključimo direktno na procesorjeva vodila, eventualno za počasne pretvorbe
pa tudi na paralelni vmesnik.
Analogno-digitalni pretvorniki (A/D converter)
Računalniki zajemajo signale (pritisk, temperatura, napetost, pretok, hitrost), ki se v
realnem svetu nahajajo v analogni obliki, preko A/D pretvornikov, ki jih spreminjajo v
računalniku razumljivo obliko.
V uporabi so A/D pretvorniki, katerih pretvorba temelji na različnih principih, zato imajo
tudi različne lastnosti.
Nekateri pretvorniki imajo na vhodu tako imenovana "sample and hold vezja", katerih
naloga je, da iz analognega signala, ki se s časom spreminja vzamejo vzorec (sample) in
ga zamrznejo (hold) za čas pretvorbe.
45
i_o_4_0.doc
Integracijski pretvorniki povprečijo analogni signal skozi določeno časovno periodo (ki je
običajno mnogokratnik periode 50 Hz signala (n*20 ms), da se zmanjša vpliv napajalne
napetosti), zato so razmeroma počasni (do največ 500 000 pretvorb v sekundi.
Flash ali paralelni pretvorniki pa so najhitrejši (do več kot 107 pretvorb v sekundi in so
tudi najdražji, ne dosegajo pa velike ločljivosti (do 12 bitov).
Največjo ločljivost pa dosegajo pretvorniki, ki delujejo na principu štetja - strmine, s
čemer se približuje signalu, ki ga meri (do 24 bitov ali še več).
Slika prikazuje pretvorbo
analognega signala v digitalno
obliko z zadosti pogostim
vzorčenjem z določenim številom
bitov, da shranimo zadosti verno
sliko analognega signala v
digitalni obliki kot jo zahteva
naša aplikacija.
Pri pretvorbi digitalnega zapisa v
analogni signal D/A dobimo
stopničast signal, ki ga z dodatnimi
vezji še malce "popravimo".
Za vsak A/D so karakteristični predvsem naslednji podatki (parametri):
Območje vhodne napetosti (Input Range)
To je območje med minimalno in maksimalno napetostjo, ki jo pripeljemo na vhod A/D
pretvornika in jo pretvornik digitalizira.
Primeri območij: -10 mV do +10 mV, -200 mV do +200 mV, 0 V do 10 V.
Ločljivost (Resolution)
Izrazimo jo s številom korakov (ti pa odgovarjajo n-bitom), v katere se deli napetostno
območje.
Čim večjo ločljivost ima pretvornik, tem manjša je razlika med dvema sosednjima zaporednima vrednostima (korak).
46
i_o_4_0.doc
Primer: A/D pretvornik z 12-bitno ločljivostjo (resolucijo) izvrši pretvorbo celotnega
vhodnega napetostnega območja v 212 = 4096 korakih. Tako je pri napetostnem območju
0 do 10 V velikost enega koraka oz. ločljivost med dvema sosednjima vrednostma
0,25 mV.
Prepustnost (Throughput)
Ta podatek pove, kolikšna je največja frekvenca vzorčenja in prenosa podatkov iz A/D
pretvornika (npr. v računalnik). Čim dlje traja zajem signala in čas pretvorbe signala
(conversion time) tem manjša je prepustnost pretvornika (f=1/T).
Primer: Pretvornik, pri katerem trajata zajem signala in pretvorba 10 Ps, lahko v eni
sekundi opravi 100 000 vzorčenj, če si lahko sledijo pretvorbe takoj ena za drugo.
Linearnost (Linearity)
Idealni pretvornik z n-bitno ločljivostjo bi pretvoril vhodno območje v 2n enakih korakov.
V praksi pa ti koraki niso povsem enaki, kar pripelje do nelinearnosti izhoda v primerjavi z
vhodnim signalom.
Odmik (Offset)
Če je na vhod priključen signal 0 V, pa izhod ne kaže 0, govorimo o odmiku, ki predstavlja
sistemsko napako pretvornika.
Samokalibracija (Re-Calibration)
Pretvorniki niso absolutno točni. Poleg nelinearnosti vpliva na točnost sprememba
temperature in pa staranje elementov pretvornika, zato moramo upoštevati točnost
pretvorbe.
Nekateri A/D pretvorniki lahko občasno popravijo svoj odmik (offset) in lezenje ojačenja
(gain drift) tako, da izvedejo samokalibracijo. To pomeni, da se vhod za kratek čas poveže
na neko referenčno napetost, jo izmeri in na osnovi izmerjene vrednosti korigira svoje
nastavitve, ki so se spremenile zaradi spremembe temperature in staranja pretvornika.
Videli smo, da je točnost tako dobljenega digitalnega rezultata pretvorbe odvisna od
ločljivosti pretvornika, linearnosti, odmika in še drugih parametrov.
47
i_o_4_0.doc
Digitalno-analogni pretvorniki (D/A converter)
Tudi z D/A pretvorniki se pogosto srečamo, saj so sestavni del npr. zvočne kartice,
krmilijo računalniški monitor, napetostno krmiljene oscilatorje, programabilne regulatorje
napetosti, itd.
D/A pretvornik sestavljajo naslednje štiri enote:
• referenčna napetost
• set uporov
• set tranzistorskih stikal
• na izhodu je običajno še neko ojačevalno vezje, ki spremeni tok v napetost
Tudi pri D/A pretvornikih so pomembni predvsem naslednji podatki:
• ločljivost (resolution) izražena s številom bitov
• čas pretvorbe (settling time)
• točnost pretvorbe (acuracy)
• območje izhodne napetosti (output range)
• temperaturno območje delovanja (temperature range)
• itd.