BUDAPESTI MŰSZAKI ÉS GAZDASÁGTUDOMÁNYI EGYETEM VILLAMOSMÉRNÖKI ÉS INFORMATIKAI KAR MÉRÉSTECHNIKA ÉS INFORMÁCIÓS RENDSZEREK TANSZÉK Digitális technika (VIMIAA01) Laboratórium 10 Fehér Béla Raikovich Tamás, Fejér Attila Digit labor 10., 2014.11.17. (v1.0) BME MIT
Lab10: A GPIO Periféria használata 1. A GPIO periféria tulajdonságai 2. A GPIO vonalak használata 3. Az LCD kijelző ismertetése 4. Az LCD kijelző illesztése a GPIO perifériához 5. Az LCD kijelző elemi parancs- és adatátviteli ciklusai bit-banging programozott megvalósítással 6. Az LCD kijelző inicializálása, alapvető üzemmódjai 7. Az LCD kijelző használata karaktersorozatok megjelenítésére Digit labor 10., 2014.11.17. (v1.0) 1
Lab10: A GPIO Periféria A GPIO általános célú be-/kimeneti periféria A mikroprocesszorok gyakran rendelkeznek ilyen tetszőlegesen használható GPIO interfészekkel Ez a funkció többnyire másodlagos kialakítású A mikroprocesszor valamelyik speciális interfészének kivezetését rendelték az adott lábhoz Ha azt nem használjuk, akkor lehet GPIO interfészként is használni a (maradék) lábat/lábakat A MiniRISC esetén például Az A bővítő csatalakozón: Az elsődleges interfész: VGA kimenet, PS/2 bemenet A másodlagos interfész: GPIO_A[7:0], GPIO_C[4:0] A B bővítő csatlakozón: Az elsődleges interfész: GPIO_B[7:0], GPIO_D[4:0] Digit labor 10., 2014.11.17. (v1.0) 2
Lab10: A GPIO Periféria A GPIO általános célú be-/kimeneti periféria kivezetései (elérhetősége) Fizikailag az A és B bővítő csatlakozókon jelennek meg, a rendszer tápfeszültségekkel együtt Ez az általános felület, a processzor így ismeri A csatlakozó: GPIO_A[7:0], GPIO_C[4:0] B csatlakozó: GPIO_B[7:0], GPIO_D[4:0] Digit labor 10., 2014.11.17. (v1.0) 3
Lab10: A GPIO Periféria A GPIO használatához a külső egységek ehhez a fizikai és elektromos szabványhoz illeszkednek. A laborban a következő külső modulokat/eszközöket fogjuk használni: LCD modul Hőmérsékletmérő modul Mikroszervo motor 3 eltérő egység, 3 eltérő jelkiosztás és interfész ill. funkció vezérlési követelmény De a GPIO rugalmassága lehetővé teszi a feladatok megoldását Digit labor 10., 2014.11.17. (v1.0) 4
Lab10: GPIO Periféria A GPIO periféria használata 3 regiszteren keresztül történik: Adat kimeneti regiszter OUT[7:0] (visszaolvasható) Adat bemeneti regiszter IN[7:0] Irányvezérlő regiszter DIR[7:0] (visszaolvasható) Digit labor 10., 2014.11.17. (v1.0) 5
Lab10: GPIO Periféria A GPIO periféria használata: Párhuzamos módban, együtt vezérelve a 8 bitet Függetlenül, bitenként megadva és használva az egyes jeleket bemenetként/kimenetként A GPIO perifériában az adatvonalak átviteli iránya (bemenet/kimenet) programból, dinamikusan állítható (A DIR regiszterbe írt értékkel) Digit labor 10., 2014.11.17. (v1.0) 6
Lab10: GPIO Periféria A GPIO periféria utasítás szinten programozható A MiniRISC Load/Store működési elve miatt ezért 2 utasításonként adható ki új érték/változtatható a GPIO láb értéke (2*187,5ns = 375ns) A GPIO lábakon tetszés szerinti protokoll/időzítési szekvencia lejátszható (maximum a fenti sebességgel) Ezt hívjuk bit-banging módnak, azaz a processzor a program által vezérelve, a megfelelő időzítéssel, dinamikusan változtatja a lábakon megjelenő kimeneti értékeket, illetve mintavételezi és beolvassa a bemeneti értékeket. Az időzítés persze nem mindig pontos, kisebb ingadozás, jitter felléphet, bár gondos programozással ez jól kézben tartható Digit labor 10., 2014.11.17. (v1.0) 7
Lab10: GPIO Periféria A GPIO periféria specialitása Az INPUT mindig a GPIO lábon lévő értéket mintavételezi Ha ez egy bemenet akkor annak a a jelnek az értékét adja meg Ha nincs jel csatlakoztatva, vagy nem aktív, akkor az R lehúzó ellenállás egy rezisztív (gyenge) 0 szintet ad Ha kimenetként használjuk, az INPUT akkor is a GPIO lábat mintavételezi Aktív, engedélyezett kimenetnél IN == OUT De kikapcsolt kimenetnél ez nem feltétlenül igaz!!!!! Digit labor 10., 2014.11.17. (v1.0) 8
Lab10_1 Feladat: GPIO Periféria Készítsünk programot, amelyben a GPIO lábak említett tulajdonságát statikusan, a MiniRISC IDE környezetben lépésenkénti végrehajtást használva demonstrálhatjuk A program használja valamelyik GPIO perifériát Figyelem: A GPIO_C[4:3] és a GPIO_D[4:3] lábak csak bemeneti funkciót biztosítanak, tehát a feladat szempontjából nem használhatók A vizsgált kimenetet 0-ba állítva, majd a DIR regiszterrel letiltva (kikapcsolva) az IN regiszter 1 értéket mutat A szimulátor nem hiteles! Digit labor 10., 2014.11.17. (v1.0) 9
Lab10_2 Feladat: Az LCD modul Beágyazott rendszerekben gyakori periféria a karakteres megjelenítést biztosító LCD kijelző A LOGSYS LCD modul egy egyszerű, 2 soros, 8 karakteres szöveges megjelenítést biztosító modul A modul felhasználói útmutatója és HW dokumentációja a logsys.mit.bme.hu/documents oldalon elérhető A kijelző modul HW csatlakozó felülete közvetlenül illeszkedik a LOGSYS Spartan-3E kártya A bővítőcsatlakozójára Digit labor 10., 2014.11.17. (v1.0) 10
Lab10_2 Feladat: Az LCD modul Az LCD modul az A csatlakozó mindkét GPIO periféria portját használja: GPIO_A[7:0] 8 bites parancskódok és adatok GPIO_C[4:0] a vezérlőjelek kiadásához, és az átviteli ciklusok ütemezéséhez 3 jel RS: Parancs/adat reg. kiválasztás R/W: Olvasás/írás irányvezérlés E: Engedélyező, ütemező jel Digit labor 10., 2014.11.17. (v1.0) 11
Lab10_2a Feladat: Az LCD modul Az LCD modul adatátviteli protokollja a megfelelő időzítési adatokkal (bal WRITE, jobb READ) Digit labor 10., 2014.11.17. (v1.0) 12
Lab10_2a Feladat: Az LCD modul Az LCD modul parancs/adatátviteli protokoll előírásainak értelmezése a parancs/adat kivitelhez Indításkor beállítjuk az RS, R/W=0 vezérlőjeleket (E = 0 ezalatt) Ezután engedélyezhetjük az adatvonalak meghajtását és kiadhatjuk az új parancs/adat értékét Ha t AS idő eltelt, aktiválhatjuk az E engedélyező jelet A jel minimum t PWEH ideig magas szintű, ezután kikapcsolhatjuk. Az adatvonalakat ekkor mintavételezi. Ezután t DH idővel kikapcsolhatjuk az adatvonalak meghajtását (HiZ), t AH idővel kiadhatunk új vezérlő jeleket (RS, R/W), de az új ciklust csak a t CYC idő eltelte után indíthatjuk el! Összefoglalva: minden minimum korlátos időadatnak és az értelemszerű jelváltozási sorrendnek is teljesülnie kell! Digit labor 10., 2014.11.17. (v1.0) 13
Lab10_2a Feladat: Az LCD modul Az LCD modul parancs/adatátviteli protokoll előírásainak értelmezése a státusz/adat beolvasáshoz Indításkor beállítjuk az RS, R/W=1 vezérlőjeleket (E = 0 ezalatt) Az adatvonalak alapállapota bemenet Ha t AS idő eltelt, aktiválhatjuk az E engedélyező jelet Ezután maximum t DDR késleltetés után megjelenik az érvényes adat Ha az E jel már minimum t PWEH ideig magas szintű, akkor mintavételezhetjük az adatvonalakat és ezután E kikapcsolható. Ezután t DHR idővel az érvényes adat megszűnik, az adatvonalak meghajtása HiZ állapotú lesz. Hasonlóan t AH idő múlva kiadhatunk új vezérlő jeleket (RS, R/W), de az új ciklust csak a t CYC idő eltelte után indíthatjuk el! Összefoglalva: minden minimum korlátos időadatnak és az értelemszerű jelváltozási sorrendnek is teljesülnie kell! Digit labor 10., 2014.11.17. (v1.0) 14
Lab10_2 a Feladat: Az LCD modul Az LCD modul parancs/adatátviteli protokoll előírásainak időbeli lefolyását a MiniRISC GPIO perifériájának megfelelő ütemezésű programozásával biztosítjuk Mivel az utasítás végrehajtási idő, a leggyorsabb jelváltási idő és a szükséges adatmozgatási adminisztráció együttes paraméterei az LCD modul időzítésénél hosszabb időket eredményeznek, a minimum időzítések szinte automatikusan teljesülnek. A jelváltások helyes sorrendjére, az adatvonalak vezérlési állapotára kell odafigyelnünk. A parancsok végrehajtási idejét a foglaltság jelzőbit lekérdezéses ellenőrzésével (Busy Flag) várhatjuk ki Digit labor 10., 2014.11.17. (v1.0) 15
Lab10_2a Feladat: Az LCD modul Az eddigiek alapján készítsük el a két adatátviteli programrészletet, amely a parancsok és adatok kiküldését végrehajtja. Mindkét átviteli mód a végrehajtás előtt várakozzon a foglaltság jelzés törlésére! Tehát 3 szubrutin készül! lcd_wait : Olvasás státusz/utasítás regiszterből parancs kiadása, 7. bit tesztelése (BF), várakozás, amíg nem 0 lcd_sendcmd : lcd_wait meghívása, visszatérés után írás utasításregiszterbe vezérlés beállítása (RS = 0), majd a parancs kiadása és érvényesítése az E jellel. Utána lezárás, adatkimenetek kikapcsolása lcd_senddata : ugyanaz az utasítássorozat, mint az lcd_sendcmd, csak az adatregiszterrel (RS = 1) Digit labor 10., 2014.11.17. (v1.0) 16
Lab10_2b Feladat: Az LCD modul Karakter sorozat megjelenítése az LCD modulon A főprogram általános felépítése: Minden programblokk egy-egy szubrutin, a programblokkok további szubrutinokat hívnak meg Lekérdezéses perifériakezelés és programozott késleltetés/időzítés LCD Inicializálás Szövegkiírása Léptetés parancs kiadása Digit labor 10., 2014.11.17. (v1.0) 17
Lab10_2b Feladat: Az LCD modul Karakter sorozat megjelenítése az LCD modulon Az inicializálás feladatai: Várakozás, amíg BF=1 (15 ms) FUNCTION SET parancs (N 2 soros mód, F ON) DISPLAY OFF kiadása DISPLAY CLEAR kiadása ENTRY MODE SET kiadása (I/D inkrement, SH OFF) DISPLAY ON kiadása Minden parancs után várakozás BF=0-ra Digit labor 10., 2014.11.17. (v1.0) 18
Lab10_2b Feladat: Az LCD modul Karakter sorozat megjelenítése az LCD modulon Az inicializálás parancssorozat szubrutinja: A GPIO_A és GPIO_C interfészek felprogramozása Az LCD modul alapbeállítási parancsok kiadása az lcd_sendcmd szubrutin többszörös meghívásával Digit labor 10., 2014.11.17. (v1.0) 19
Lab10_2b Feladat: Az LCD modul Karakter sorozat megjelenítése az LCD modulon A kiíró programrészlet szubrutinja: A null-karaktervégű sztring, mutató az r8 regiszterben A karakterek kiírása az lcd_senddata szubrutinnal Digit labor 10., 2014.11.17. (v1.0) 20
Lab10_2b Feladat: Az LCD modul A kijelző képernyő időzített léptetéséhez 500ms hosszú szoftveres időzítő szubrutin A programozott várakozás a szokásos 24 bites szoftveres számlálóval A 3 db 8 bites regiszter {r10, r9, r8} törlése és 24 bites inkrementálása ciklusonként 25-el. Digit labor 10., 2014.11.17. (v1.0) 21
Lab10_2b Feladat: Az LCD modul Ha elkészültek a saját készítésű adatátviteli és várakozó szubrutinok lcd_sendcmd lcd_senddata lcd_wait akkor a karaktersorozatot megjelenítő alkalmazás lefordítható és tesztelhető. Szerkesszük össze a teljes forráskódot és végezzünk teszt futtatást a kijelzővel. A tapasztalatokat a Labor 10 Eredmények kérdőíven jegyezzük fel! Digit labor 10., 2014.11.17. (v1.0) 22
Lab10_2a feladat: Az LCD modul rutinjai Amennyiben nem készültek el a saját készítésű adatátviteli szubrutinok, az alábbi megoldások használhatók: Digit labor 10., 2014.11.17. (v1.0) 23
Lab10_2a feladat: Az LCD modul rutinjai Amennyiben nem készültek el a saját készítésű adatátviteli szubrutinok, az alábbi megoldások használhatók: Digit labor 10., 2014.11.17. (v1.0) 24
Lab10_2a feladat: Az LCD modul rutinjai Amennyiben nem készültek el a saját készítésű adatátviteli szubrutinok, az alábbi megoldások használhatók: Digit labor 10., 2014.11.17. (v1.0) 25