Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
BME-MITFPGA labor
Digitális technika (VIMIAA02)Laboratórium 10
BUDAPESTI MŰSZAKI ÉS GAZDASÁGTUDOMÁNYI EGYETEMVILLAMOSMÉRNÖKI ÉS INFORMATIKAI KAR
MÉRÉSTECHNIKA ÉS INFORMÁCIÓS RENDSZEREK TANSZÉK
Fehér BélaRaikovich Tamás, Fejér Attila
BME MIT
BME-MITFPGA labor
Lab10: A GPIO Periféria használata
1. A GPIO periféria tulajdonságai2. A GPIO vonalak használata3. Az LCD kijelző ismertetése4. Az LCD kijelző illesztése a GPIO perifériához5. Az LCD kijelző elemi parancs- és adatátviteli ciklusai
„bit-banging” programozott megvalósítással6. Az LCD kijelző inicializálása, alapvető üzemmódjai7. Az LCD kijelző használata karaktersorozatok
megjelenítésére
BME-MITFPGA 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ő csatlakozó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-MITFPGA labor
Lab10: A GPIO PerifériaA GPIO általános célú be-/kimeneti perifériák 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-MITFPGA 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 mind a közös csatlakozón keresztül
• A GPIO rugalmassága lehetővé teszi a feladatok megoldását
BME-MITFPGA 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ó)
(az assemblerben ADO, CDO, BDO, DDO neveken)
– Adat bemeneti regiszter IN[7:0] (az assemblerben ADI, CDI, BDI, DDI neveken)
– Irányvezérlő regiszter DIR[7:0] (visszaolvasható)(az assemblerben ADR, CDR, BDR, DDR neveken)
BME-MITFPGA 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 bitenként állítható (A DIR regiszterekbe (ADR/CDR/BDR/DDR) írt értékkel)
BME-MITFPGA labor
Lab10: GPIO Periféria• A GPIO periféria utasítás szinten programozható
– Az utasítás végrehajtási sebesség (187,5 ns) korlátozza a jelek leggyorsabb változtatási sebességét
– 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-MITFPGA 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 a
külső jel é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-MITFPGA 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-MITFPGA 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 dokumentációja a
logsys.mit.bme.hu/document oldalon elérhető• A kijelző modul HW csatlakozó
felülete közvetlenül illeszkedik a LOGSYS Spartan-3E kártya „A” jelű bővítő csatlakozójára
BME-MITFPGA 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 vezérlés • E: Engedélyező, ütemező jel
BME-MITFPGA labor
Lab10_2a Feladat: Az LCD modul• Az LCD modul adatátviteli protokollja a megfelelő
időzítési adatokkal R/W = 0 WRITE R/W = 1 READ
BME-MITFPGA 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,
nagyimpedanciás állapot), 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-MITFPGA 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-MITFPGA labor
Lab10_2a 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-MITFPGA 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-MITFPGA labor
Lab10_2b Feladat: Az LCD modul• Karaktersorozat 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
Léptetés parancs kiadása
Szöveg kiírása
BME-MITFPGA labor
Lab10_2b Feladat: Az LCD modul• Karaktersorozat 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
• Használjuk a segédletben megadott lcd_init szubrutint!
BME-MITFPGA labor
Lab10_2b Feladat: Az LCD modul• Karaktersorozat 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-MITFPGA labor
Lab10_2b Feladat: Az LCD modul• Karaktersorozat 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-MITFPGA 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-MITFPGA 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áslefordítható és tesztelhető.
• Szerkesszük össze a teljes forráskódot és végezzünk teszt futtatást a kijelzővel.
BME-MITFPGA 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ásokhasználhatók:
BME-MITFPGA 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ásokhasználhatók:
BME-MITFPGA 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ásokhasználhatók: