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.
© Copyright 2024