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 BME MIT BME-MIT Digit labor 10., 2014.11.17. (v1.0)
FPGA labor
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 BME-MIT Digit labor 10., 2014.11.17. (v1.0)
1
FPGA labor
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] BME-MIT Digit labor 10., 2014.11.17. (v1.0)
2
FPGA labor
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]
BME-MIT Digit labor 10., 2014.11.17. (v1.0)
3
FPGA labor
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 BME-MIT Digit labor 10., 2014.11.17. (v1.0)
4
FPGA labor
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ó)
BME-MIT Digit labor 10., 2014.11.17. (v1.0)
5
FPGA labor
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)
BME-MIT Digit labor 10., 2014.11.17. (v1.0)
6
FPGA labor
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ó BME-MIT Digit labor 10., 2014.11.17. (v1.0)
7
FPGA labor
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!!!!! BME-MIT Digit labor 10., 2014.11.17. (v1.0)
8
FPGA labor
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! BME-MIT Digit labor 10., 2014.11.17. (v1.0)
9
FPGA labor
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 BME-MIT Digit labor 10., 2014.11.17. (v1.0)
10
FPGA labor
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
BME-MIT Digit labor 10., 2014.11.17. (v1.0)
11
FPGA labor
Lab10_2a Feladat: Az LCD modul • Az LCD modul adatátviteli protokollja a megfelelő időzítési adatokkal (bal WRITE, jobb READ)
BME-MIT Digit labor 10., 2014.11.17. (v1.0)
12
FPGA labor
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 tAS idő eltelt, aktiválhatjuk az E engedélyező jelet • A jel minimum tPWEH ideig magas szintű, ezután kikapcsolhatjuk. Az adatvonalakat ekkor mintavételezi. • Ezután tDH idővel kikapcsolhatjuk az adatvonalak meghajtását (HiZ), tAH idővel kiadhatunk új vezérlő jeleket (RS, R/W), de az új ciklust csak a tCYC 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! BME-MIT Digit labor 10., 2014.11.17. (v1.0)
13
FPGA labor
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 tAS idő eltelt, aktiválhatjuk az E engedélyező jelet • Ezután maximum tDDR késleltetés után megjelenik az érvényes adat • Ha az E jel már minimum tPWEH ideig magas szintű, akkor mintavételezhetjük az adatvonalakat és ezután E kikapcsolható. • Ezután tDHR idővel az érvényes adat megszűnik, az adatvonalak meghajtása HiZ állapotú lesz. Hasonlóan tAH idő múlva kiadhatunk új vezérlő jeleket (RS, R/W), de az új ciklust csak a tCYC 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! BME-MIT Digit labor 10., 2014.11.17. (v1.0)
14
FPGA labor
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 BME-MIT Digit labor 10., 2014.11.17. (v1.0)
15
FPGA labor
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) BME-MIT Digit labor 10., 2014.11.17. (v1.0)
16
FPGA labor
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 LCD Inicializálás szubrutin, a programblokkok további szubrutinokat hívnak meg – Lekérdezéses perifériakezelés és Szövegkiírása programozott késleltetés/időzítés Léptetés parancs kiadása
BME-MIT Digit labor 10., 2014.11.17. (v1.0)
17
FPGA labor
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 BME-MIT Digit labor 10., 2014.11.17. (v1.0)
18
FPGA labor
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
BME-MIT Digit labor 10., 2014.11.17. (v1.0)
19
FPGA labor
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
BME-MIT Digit labor 10., 2014.11.17. (v1.0)
20
FPGA labor
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.
BME-MIT Digit labor 10., 2014.11.17. (v1.0)
21
FPGA labor
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! BME-MIT Digit labor 10., 2014.11.17. (v1.0)
22
FPGA labor
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:
BME-MIT Digit labor 10., 2014.11.17. (v1.0)
23
FPGA labor
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:
BME-MIT Digit labor 10., 2014.11.17. (v1.0)
24
FPGA labor
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:
BME-MIT Digit labor 10., 2014.11.17. (v1.0)
25
FPGA labor