[Saidi indeks] [Sisukord]
 

 


5. Kontrolleri ja ülesannete võimalused mikroprotsessorsüsteemi ja assemblerkeele õpetamisel

Käesolevas töös praktikumiks esitatud ülesanded on erineva raskusastmega. Kui alapunktis on mitu ülesannet, siis on tavaliselt iga järgmine ülesanne eelmisest raskem. On ka alapunkte, mis koosnevad vaid kergetest või rasketest ülesannetest.
Ülesannete diferentseerimise tingib asjaolu, et praktikumi sooritajate tase ja algteadmised on erinevad. Juhendaja vajab ülesandeid nii neile üliõpilastele, kelle tase on nõrgem ja kes alles “Mikroprotsessorite” kursusel puutuvad kokku assemblerkeel ja mikroprotsessorsüsteemiga, kui ka neile, kellele kergemad ülesanded võivad tunduda ebahuvitavate ja võimetele allajäävatena. Igal juhul peavad juhendaja antud ülesanded tagama kõigile üliõpilastele ülevaate mikroprotsessorsüsteemist ja assemblerkeelest.

Käesoleva töö põhiosas antakse kontrolleri kirjeldus ja suhtlemine süsteemi komponentidega. Vaadeldakse protsessorit, asükroonset jadaväratit, rööpväratit, DAC-i ja ADC-d. Kirjeldustes tuuakse ära vajalikud aadressid ja andmed nende seadmete initsialiseerimiseks ning nendega suhtlemiseks. Mälude kirjelduses antakse mäluaadressivälja jaotus ROM-i ja RAM-i vahel ning muutmälu jaotus kasutaja- ja monitorprogrammi vahel. Eriti oluline on jälgida muutmälu jaotusest kinnipidamist, et kontroller saaks tõrgeteta töötada.
Protsessor Z80180 on heaks aluseks mikroprotsessorite tundmaõppimisel, et edaspidi oleks lihtsam aru saada 16-, 32- jne. bitiste, RISC- ja keeruliste signaalitöötlusprotsessorite ehitusest ning tööpõhimõttest. Tema eeliseks võrreldes nt. Intel 8080-ga on see, et mitmed sõlmed nagu ASCI, taimer, CSIO paiknevad kõik ühes kiibis. Algkäivitusel seatakse nad automaatselt kindlasse olekusse ega hakka segama kasutaja tegevust. Kasutajal pruugib vaid need sõlmed vastavalt vajadusele ümber programmeerida.
Esimeseks süsteemi koostisosi hõlmavaks ülesandeks on koostisosade testimine ja nende töökõlbulikkuses veendumine. Need ülesanded on valitud seepärast, et reaalselt kontrollivad arvutid algkäivitusel vähemalt muutmälu korrasolekut. Tihti tuleb personaalarvuti kasutajal kontrollida vastavate programmide abil mõne seadme korrasolekut ja parameetrid. Testimisel on eriti olulised muunduritega seotud ülesanded.
Analoog-digitaalmuunduri testimine on oluline seetõttu, et füüsikalises eksperimendis muudetakse üha enam andurilt saadav analoogsignaal diskreetseks signaaliks. Diskreetimisel piiratakse paratamatult infot. Seepärast tuleb õppida hindama, kui suur on muundamise täpsus, kas muundur on korras ja ei tekita lisavigu ning õppida neid kõrvaldama. Muunduri testimiseks koostatud ülesanne punktis 4.3.4. nõuabki sisendpinge ja andmesõna vahelise seose ning muundamise lineaarsuse kontrollimist. Tänu kümnele bitile võimaldab ADC +5-voldise toitepinge korral eristada 4.88-millivoldist sisendpinge muutust. See on praktikumi jaoks piisav.
Digitaal-analoogmuundur võimaldab diskreetseid andmeid uuesti või esmakordselt analoogkujule viia. Andmeteks võivad olla ADC-ga diskreeditud analoogsignaalid, mida töödeldakse mikroprotsessoris digitaalsel kujul ja viiakse uuesti analoogkujule. Andmed võivad olla ka programmiliselt genereeritud, nt. siinus- ja nelinurksignaalid, mida saab kasutada sagedusanalüüsiks, välisseadmete juhtimiseks jne. Signaali täpsus sõltub peale programmi ka muunduri omadustest. Viimaste kontrolliks ongi esitatud vastav testimisülesanne punktis 4.3.5.
Süsteemi koostisosade kirjeldused ja initsialiseerimised on esitatud selliselt, et kasutaja saaks ühest kohast kätte minimaalse süsteemi koostisosadega suhtlemiseks vajaliku info.

Kontrolleri juhtimiseks vajaliku tarkvara moodustavad kontrolleri püsimälus olev monitorprogramm ja personaalarvuti mälus olev silumiskeskkonna käivitav programm Z180. Silumiskeskkonna kirjeldus koos monitorprogrammi käskudega on punktis 3.2. Punktis 3.3 antakse järgmised põhireeglid assemblerprogrammi koostamiseks:

  1. kasutatavad arvud ja nende esitamine;
  2. käsu operandi struktuur;
  3. mälu reserveerimine assemblerkeeles kirjutatud programmis;
  4. märgendite kasutamine ja konstantide deklareerimine;
  5. failide linkimine assemblerprogrammiga;
  6. programmi käsurea struktuur;
  7. programmi lõpetamine.

Kasutaja puutub assemblerkeelega kokku kohe, kui ta asub käesolevas töös toodud ülesandeid täitma. Töö kergendamiseks antakse punktis 3.3.3. juhiseid programmi kirjutamiseks, transleerimiseks, kontrollerisse laadimiseks ja silumiskeskkonda sisenemiseks.
Monitorprogrammi käskude harjutamiseks on ülesanne (1) punktis 4.1.1. Selles antakse etapid, mida kasutaja peab silumiskeskkonnaga tutvumisel läbima, et kontrolleri programmvarustuse võimalusi täiel määral ära kasutada.
Punktis 4.1.2. antakse monitorprogrammi alamprogrammide kirjeldused, mida tudeng saab oma programmides kasutada. Nende alamprogrammidega tutvumiseks on harjutused punktis 4.1.2. Ülesanded algavad kergematega ja muutuvad järjest keerulisemaks.

Kontrolleri signaalide testimiseks on punktis 3.1. antud ülevaade loogikaanalüsaatorist ja tema käsitsemisest koos mõningate nõuannetega. Seejuures on oluline andmelugemise taktsageduse ja trigersõna seadmine. Kui analüsaatori andmelugemise taktsagedus on väiksem protsessori taktsagedusest, ei pruugi ajadiagrammid olla vastavuses reaalsete signaalidega, sest viimased muutuvad analüsaatori jaoks liiga kiiresti. Analüsaatori taktsagedus peaks olema vähemalt kahekordne protsessori taktsagedus. Trigersõna valimine on oluline seetõttu, et protsessoril on palju testitavaid siganaale. Kasutaja peab õppima leidma vajaliku kombinatsiooni, et analüsaator käivituks vajalikul hetkel.
Analüsaatori kasutamise näitlikustamiseks on lisas 2 esitatud ühe programmi ajadiagrammid. Punktis 4.2.1. on antud ajadiagrammi ühe lõigu kirjeldus. Selle järgi on koostatud programm, lisatud kommentaarid ja koostatud algoritm. Selle kõige harjutamiseks on ülesanded (2)...(5) samas punktis. Näiteprogrammis on valitud sellised käsud, et oleks esindatud võimalikult rohkem käsutüüpe. Ajadiagrammilt koostatakse käsutüüpide ajadiagrammid ja kontrollitakse nende vastavust protsessori kirjelduses [4] toodule. Selle harjutamiseks on ülesanne (1).
Punktis 4.2.1. on veel nõuded ja soovitused programmide silumiseks. Need on praktikas järele proovitud ja kehtivad reeglina ka kõrgkeeltes programmeerimisel.

Programmid MLT816, DIV8, BINTOBCD, BCDTOBIN, SENDDATA ja SENDPIO on esitatud eesmärgiga õpetada seost programmi ja algoritmi vahel. Algoritmid on õiged, ent nimetatud programmid on sihilikult muudetud algoritmile mittevastavateks. Muudetud on teostatavaid operatsioone, käske ära jäetud ja muudetud. Tudengi ülesandeks on algoritmi järgi programm siluda ja käima saada.

Aritmeetikatehetest vaadeldakse korrutamist ja jagamist, sest protsessoril vastavad käsud puuduvad, v.a. MLT ww. Esmalt aga antakse ülevaade arvude esitamisest kontrolleris, et oleks selge, millist arvkoodi kasutada. Negatiivsete ja positiivsete arvude teisendamise harjutamiseks on ülesanne (1) punktis 4.4.1.
Korrutamiseks on valitud algoritm vahetulemuse nihutamisega. Põhimõtteliselt pole programmi pikkuse ja täitmisaja suhtes olulist erinevust paremale nihutamisega võrreldes. Eeliseks on aga see, et vasemale nihutamisel formeeritakse esmalt korrutise vanemad bitid, paremale nihutamisel aga korrutise nooremad bitid. Kui signaalitöötluses on vaja korrutada murdarve, mille reaalosas on vähe kohti, murdosas aga palju ja korrutist tuleb murdosa nooremate bittide osas kärpida, siis võib lihtsalt tegurite nooremad bittid kõrvale jätta.
Korrutamise harjutamiseks tuleb siluda programm MLT816. See ülesanne on madalama raskusastmega. Kõrgema raskusastmega on harjutus (2), kus tuleb teha tehteid mitmebaidiste arvudega. See on heaks praktikaks pinumälu ja mälu kasutamisel. Ülesande (3) eesmärk on negatiivsete arvudega tehtavate tehete ja XOR-tehte harjutamine.
Jagamisülesanne (1) on kergem ja tema eesmärgiks on programmide silumisoskuse arendamine. Raskem ülesanne (2) nõuab algoritmi koostamist ja pinumälu ning lippude kasutamist teatud tingimuste salvestamiseks programmi mingi lõigu täitmise ajaks.
Murdarvude jagamine on esitatud aritmeetikatehetest keerulisim, sestap on mõlemad ülesanded kõrgema raskusastmega.

BCD- ja binaarkoodi teineteiseks teisendamise ülesanded (1) ja (3) on madalama raskusastmega, sest need nõuavad vaid programmide silumist ja algoritmi koostamist. (2),(4) ja (5) on kõrgema raskusastmega, eriti (5), kus tuleb kasutada lisaks ASCII-koodi. Samas on see praktiline ülesanne BCD-arvude inditseerimiseks kuvaril.
Gray koodi teisendamisülesanded on madalama raskusastmega, taandudes XOR-tehte algoritmi koostamisele ja kasutamisele.

Kerged on ka mälu indekseerimise ülesanded, sest kasutajale on esitatud vastavad algoritmid. Samas on mälu indekseerimisel suur praktiline tähendus eelkõige andmetöötluses aga ka mikroprotsessorsüsteemis üldse. Tihti tuleb sisendandmed paigutada mällu teatud struktuuri järgi, nt. tabelitesse, mis on sageli mitmeleheküljelised. Selliseks rakenduseks võiks olla erinevates spektraalpiirkondades ühest ja samast objektist salvestatud kujutiste digitaliseerimine ja salvestamine mällu. Üks mälulehekülg vastab ühele kindlale spektraalpiirkonnale, rea- ja veeruindeksid määravad piksli asukoha kujutises ja elemendi väärtus piksli väärtuse vastavas spektraalpiirkonnas.
Kontrolleri muutmälu puuduseks on see, et seda ei saa füüsiliselt lehekülgedeks jagada, sestap tuleb seda teha programmiliselt.

Kontrolleri eripäraks on see, et koostamisel pole PIO kviteerimis- ja katkestussignaale ei protsessori ega sisend-väljundkuplungitega ühendatud. Portide viikudel olevad puhvrid on lisaks ühesuunalised. Värati juhtimissignaalide mitteühendatus on mõneti kasulik, sest see annab põhjuse kviteerimismeetodi programmiliseks korraldamiseks. Kui kõiki PIO viike oleksid kasutatud, muudaks see värati initsialiseerimise ja temaga suhtlemise aeglasemaks ja keerulisemaks.
Punktis 4.7.1. antakse ülevaade Z80PIO kviteerimisreziimist, millesse tuleb kontrolleri ehituse tõttu teha korrektiive. Ülesannete eesmärgiks on koostada reaalselt toimuva andmevahetuse ajadiagrammid. Lihtsustamiseks on antud andmevahetuse algoritmid ja mõned programmid, ent viimased vajavad silumist, et neid reaalseks andmevahetuseks kasutada.

Asünkroonne jadavärat võimaldab tänu MAX-liidesele suhtlemist arvutiga ja andmevahetust pika liiniga mõnekümne meetri kaugusele. Punktis 4.7.2. antakse juhiseid ja nõuandeid ASCI0-i initsialiseerimiseks ja temaga suhtlemiseks. Ülesanded on kasvava raskusastmega. Eriti keeruline on ülesanne (5), sest see hõlmab ka monitorprogrammi alamprogramme andmete sisestamiseks klaviatuurilt ja inditseerimiseks kuvaril. Samas õpetab see ülesanne, kuidas lihtsate vahenditega teostada reaalajas toimuvat andmevahetust, mis on sarnane talk-programmile, kuid ei vaja Windowsi ega Unix-it. Sellist andmevahetust saab teostada ka arvuti COM-pordi kaudu, kui kirjutada programm kõrgkeeles ja kasutada selles COM-pordi otseseks juhtimiseks assmblerkeelt.

Kontrolleri puhvrite ühesuunalisus takistab I2C-protokolli täielikku rakendamist, sest SDA-liin peaks olema kahesuunaline. Reaalselt saab aga ühe liini kaudu andmeid saata, teise kaudu aga vastu võtta. I2C tähtsus seisneb selles, et seda protokolli kasutavad paljud seadmed, eriti mälud. Igaüks võib ise takti- ja andmesignaali abil kombineerida oma rakendustele sobiva protokolli. Eriti mugav on asjaolu, et I2C-d saab teostada ka arvuti COM- ja LPT-portide kaudu. Tänu sellele saab I2C-d kasutavad seadmed ühendada nimetatud portidega ja koostada programm kõrgkeeles, lisades portidega suhtlemiseks assemblerkeelsed lõigud.


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

[Tagasi eelmisele leheküljele (JavaScript)] [Peatükk 4.7.3] [Sisukord] [6. peatükk]