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 11 Fehér Béla Raikovich Tamás, Fejér Attila BME MIT BME-MIT FPGA labor
Digit labor 11., 2014.11.23. (v1.0)
Lab11: A megszakításos perifériakezelés 1. A mikroprocesszorok megszakítási alrendszere 2. A MiniRISC processzor megszakításos perifériái 3. A TIMER időzítő egység programozása 4. A TIMER ISR megszakítás kiszolgáló rutin felépítése 5. A mikro szervó motor tulajdonságai 6. A mikro szervó motor vezérlése 7. A PWM pulzusszélesség modulált vezérlőjel programozott előállítása 8. A laborfeladatok programjainak elkészítése BME-MIT Digit labor 11., 2014.11.23. (v1.0)
1
FPGA labor
Lab11: A megszakításos perifériakezelés • A mikroprocesszorok megszakítási alrendszere • Feladata a program végrehajtáshoz kapcsolódó speciális események kezelése • Megszakítást okozhatnak SW vagy HW események • Mi csak a HW eseményekkel foglalkozunk, elsősorban a perifériakezeléshez kapcsolódóan – Ez a módszer külön egyedi HW részáramköröket kíván a processzorban, a rendszerben és a perifériában egyaránt BME-MIT Digit labor 11., 2014.11.23. (v1.0)
2
FPGA labor
Lab11: A megszakításos perifériakezelés • A perifériák lehetnek passzív vagy aktív perifériák – A passzív perifériák kezelése egyszerű, programozott működtetés • Parancs / adat kiadás és azonnali végrehajtás • A periféria mindig kész új működtetésre
– Az aktív perifériák nevükből eredően önálló működéssel rendelkezhetnek
BME-MIT
• Kimeneti periféria, ami a parancs végrehajtásához / adatátvitelhez extra időt igényel • Bemeneti periféria, ami tetszőleges időpontban adatot generálhat
Digit labor 11., 2014.11.23. (v1.0)
3
FPGA labor
Lab11: A megszakításos perifériakezelés • Az aktív perifériák kezelése • Programozott, lekérdezéses – Várakozás a feltétel/esemény megtörténésére – Programozott lekérdezés • Megszakításos eseményjelzés és kiszolgálás
BME-MIT Digit labor 11., 2014.11.23. (v1.0)
4
FPGA labor
Lab11: A megszakításos perifériakezelés • Programozott perifériakezelés: • Perifériakezelés várakozással: – A program működése a várakozási ponton áll, amíg az esemény nem történik meg, semmilyen hasznos egyéb utasítás végrehajtás, feladatvégzés nem történik • Perifériakezelés lekérdezéssel – A program a futása során periódikusan lekérdezi a periféria státuszregiszterét, ellenőrzi az esetleg kiszolgálási igényt, de közben más feladatot végez BME-MIT Digit labor 11., 2014.11.23. (v1.0)
5
FPGA labor
Lab11: A megszakításos perifériakezelés • Megszakításos perifériakezelés és kiszolgálás: • Lényege: A periféria rendelkezik jelzési lehetőséggel, amennyiben olyan esemény történik, ami a processzor részéről kiszolgálást igényel • Speciális hardver megoldás minden részegységben: – A processzor kiegészítése a programvégrehajtás, utasítássorrend tetszőleges idejű módosíthatóságára – A rendszer kiegészítése a megszakítás kérések és elfogadások kommunikációs igényeire – A perifériák kiegészítése a kapcsolódó funkciókkal BME-MIT Digit labor 11., 2014.11.23. (v1.0)
6
FPGA labor
Lab11: A megszakításos perifériakezelés • A MiniRISC processzor megszakítás alrendszere: • Egyszerű, egyszintű megszakításrendszer – Egyetlen megszakításkérés bemeneti vonal IRQ – Fix cím a megszakítás kiszolgáló rutin (ISR) részére • (RESET vektor 0x00 címen) • Megszakítás vektor 0x01 címen
– Extra utasítások: STI, CLI, RTI – Extra állapot az utasítás végrehajtásban • Aktív IRQ észlelése és elfogadása esetén • PC és flagek mentése a verembe, PC ← IT vektor, IE=0 BME-MIT Digit labor 11., 2014.11.23. (v1.0)
7
FPGA labor
Lab 11: MiniRISC processzor – Vezérlő állapotgép Töréspont, ekkor a debug modul veszi át a vezérlést
STATE_BREAK ~continue
PC←0, IE←0, IF←0
A processzor inicializálása
STATE_FETCH
Utasítás lehívás
STATE_INIT break
continue IR←PMEM[PC] PC←PC+1
~break IR←PMEM[PC] PC←PC+1
STATE_DECODE STATE_EX_XXX
Utasítás dekódolás
~IE | ~IRQ
Utasítás végrehajtás
IE & IRQ
STATE_INT_REQ stack←PC,Z,C,N,V,IE,IF PC←0x01, IE←0, IF←1
Megszakítás kiszolgálás
BME-MIT Digit labor 11., 2014.11.23. (v1.0)
8
FPGA labor
Lab11: A megszakításos perifériakezelés • Az ISR megszakítás kiszolgáló rutin – Aktiválása a külső/belső esemény hatására történik, nincs külön hívó utasítás (tetszőleges időpontban, bármely PC értéknél megtörténhet) – A PC‐be betöltődik a 0x01, a megszakításvektor értéke, ezen a címen egy ugró utasítás található – Az ISR felépítésében hasonló egy normál szubrutinhoz, szokásos perifériakezelési feladatokat végez – Valamikor a végrehajtás során olvassa a periféria státuszregiszterét és ezzel törli az IT kérést BME-MIT – Visszatérés RTI utasítással (PC+flagek és IE=1) Digit labor 11., 2014.11.23. (v1.0)
9
FPGA labor
Lab 11: MiniRISC processzor Interfészek (Programmemória interfész, IRQ elfogadás) • Programmemória interfész – Ugrás vagy szubrutinhívás esetén a programszámláló értéke módosul(hat) a végrehajtási (execute) fázisban – Megszakításkérés kiszolgálása esetén az INT_REQ állapotban a programszámlálóba betöltődik a megszakítás vektor (0x01) – A fenti két esetben a következő lehívási (fetch) fázisra éppen időben megjelenik az új cím a programmemória címbuszán clk irq
irq állapotának vizsgálata
a CPU állapota cpu2pmem_addr
FETCH 0x15
pmem2cpu_data jmp 0xAC
DECODE
EXECUTE
0x16 PMEM[0x16]
irq állapotának vizsgálata
FETCH 0xAC PMEM[0xAC]
Az utasítás beolvasása itt történik
DECODE
EXECUTE INT_REQ 0xAD PMEM[0xAD]
FETCH 0x01
DECODE 0x02
PMEM[0x01] PMEM[0x02]
Az utasítás beolvasása itt történik
BME-MIT Digit labor 11., 2014.11.23. (v1.0)
10
FPGA labor
Lab11: A megszakításos perifériakezelés Az ISR megszakítás kiszolgáló rutin komplexitása • A választott megoldások széles skálán mozognak • Minden szükséges feladatot elvégeznek az ISR‐ben – Előny: Nem igényel speciális programszervezést – Hátrány: Hosszú időt töltünk az ISR‐ben • Az ISR‐ben csak regisztráljuk az igényt – A bejegyzett kiszolgálási igényt valamikor el kell végeznünk, a többi feladat mellett. Jellemzően bonyolult rendszerek (OS, RTOS) esetén használják – Előny: Gyors IT reakcióidő, következő IT fogadható – Hátrány: Bonyolultabb szervezés BME-MIT Digit labor 11., 2014.11.23. (v1.0)
11
FPGA labor
Lab11: A megszakításos perifériakezelés • A MiniRISC megszakításos perifériái – TIMER időzítő egység – BT nyomógomb egység – USRT soros kommunikációs egység – PS/2 PC billentyűzet/egér interfész egység – VGA kijelző egység – DMA vezérlő egység • Ezeknél az eszközöknél lehet fontos az események gyors észlelése és kiszolgálása
BME-MIT Digit labor 11., 2014.11.23. (v1.0)
12
FPGA labor
Lab11: A megszakításos perifériakezelés • A MiniRISC megszakításrendszere egyszerű, egyszintű, a processzor egyetlen IRQ bemenettel rendelkezik • Hardver megoldás: Független IRQ kérések VAGY kapcsolata, nincs prioritás megkülönböztetés – assign irq = tmr_irq | btn_irq | usrt_irq | vga_irq | kb_irq | dma_irq ; • Forrás azonosítás? – Szoftverben, az ISR rutin elején – Ha több eszközt is használunk megszakítással, akkor a prioritást magunk szabhatjuk meg! BME-MIT Digit labor 11., 2014.11.23. (v1.0)
13
FPGA labor
Lab11: A megszakításos perifériakezelés • Az ISR kialakítása több IT forrás esetén: – A belépés után az általunk választott prioritás sorrendjében beolvassuk a státuszregisztereket – Teszteljük, aktív‐e a periféria IRQ bitje? – Ha igen, kiszolgáljuk a kérést és RTI – A normál program végrehajtási szintre visszalépve a még aktív korábbi IRQ kérések újabb megszakítást okoznak – A fentiek szerint elkezdjük/folytatjuk a még aktív kérések kiszolgálását BME-MIT Digit labor 11., 2014.11.23. (v1.0)
FPGA labor
14
Lab 11: A TIMER periféria 8 bites TIMER programozói interfész • Felépítés: előosztó és egy 8 bites lefele számláló – A számláló az előosztó által meghatározott ütemben számlál • Számláló kezdőállapot regiszter (TR) – BASEADDR + 0x00, csak írható – A számláló kezdőállapota az időzítés mértékét határozza meg 7. bit
6. bit
5. bit
4. Bit
3. bit
2. bit
1. bit
0. bit
TR7
TR6
TR5
TR4
TR3
TR2
TR1
TR0
W
W
W
W
W
W
W
W
• Számláló regiszter (TM) – BASEADDR + 0x00, csak olvasható – Az időzítő számlálójának aktuális értéke 7. bit
6. bit
5. bit
4. bit
3. bit
2. bit
1. bit
0. bit
TM7
TM6
TM5
TM4
TM3
TM2
TM1
TM0
R
R
R
R
R
R
R
R
BME-MIT Digit labor 11., 2014.11.23. (v1.0)
15
FPGA labor
Lab 11: A TIMER periféria 8 bites TIMER programozói interfész • Parancs regiszter (TC): BASEADDR + 0x01, csak írható 7. bit
6. bit
5. bit
4. bit
3. bit
TIE
TPS2
TPS1
TPS0
W
W
W
W
2. bit
1. bit
0. bit
‐
‐
TREP
TEN
n.a.
n.a.
W
W
• Státusz regiszter (TS): BASEADDR + 0x01, csak olvasható 7. bit
6. bit
5. bit
4. Bit
3. bit
2. bit
1. bit
0. bit
TIT
TPS2
TPS1
TPS0
0
TOUT
TREP
TEN
R
R
R
R
R
R
R
R
Bit
Funkció
TEN
Engedélyező bit (0: a működés tiltott, 1: a működés engedélyezett)
TREP
Működési mód kiválasztása (0: egyszeri, 1: ismétlődéses)
TOUT
Időzítési periódus lejárt jelzőbit
TPS[2:0]
Az előosztás (PS) mértékét beállító bitek 0 : nincs előosztás 1 – 7 : · előosztás (16, 64, 256, 1024, 4096, 16384 vagy 65536)
TIE / TIT
Időzítő megszakítás engedélyezés és jelzés bitek
BME-MIT Digit labor 11., 2014.11.23. (v1.0)
16
FPGA labor
Lab11: A TIMER periféria • A TIMER periféria felprogramozása – A kívánt időzítési értékek alapján a szükséges paraméterek kiszámítása:
– – – –
Beállítható időzítések: ~100ns – ~1s tartományban Minden tartományban 0,5% relatív pontosság Parancsbitek az előző dia szerint Biztonsági okokból felprogramozás után azonnal egy státusz olvasás, az esetleg aktív TOUT törlésére
BME-MIT Digit labor 11., 2014.11.23. (v1.0)
17
FPGA labor
Lab11: A TIMER periféria • A TIMER periféria ISR rutinja – Ha csak a TIMER képes IRQ kérésre – Belépés után feladatok ellátása – IRQ kérés törlése és visszatérés RTI‐vel
BME-MIT Digit labor 11., 2014.11.23. (v1.0)
18
FPGA labor
Lab11: A mikro szervó motor • A mikro szervó motor • Paraméterek: – Működési tápfeszültség: 3,7V ‐ 6V, mi 3,3V‐ról használjuk – Kis méret – Kis nyomaték – Kis energiaigény – Mi csak demonstrációs célra használjuk
BME-MIT Digit labor 11., 2014.11.23. (v1.0)
19
FPGA labor
Lab11: A mikro szervó motor • A mikro szervó motor • Vezérlés: Impulzusszélességgel – A vezérlő áramkör periódikus vezérlőjelet vár, 50 – 100 Hz (10 – 20 ms) ismétlődési periódussal – Ezen belül a pozícióvezérlést egy 1ms – 2ms közötti impulzusszélesség szabja meg (1,5ms → KÖZÉPÁLLÁS)
BME-MIT Digit labor 11., 2014.11.23. (v1.0)
20
FPGA labor
Lab11: A mikro szervó motor • A vezérlőjelek időfüggvénye generálható • Programozott időzítéssel – A processzort teljesen lefoglalná • TIMER alapú lekérdezéses időzítéssel – Bonyolult programszervezés, az időzítések betartására • Megszakításos időzítéssel – Az adott feladatra a legkedvezőbb megoldás – A főprogram részéről minimális adminisztrációt igényel – A periódikus jelek beállítása egy megfelelően megválasztott időzítés felbontás alapján egyszerű BME-MIT Digit labor 11., 2014.11.23. (v1.0)
21
FPGA labor
Lab11: A mikro szervó motor • A javasolt időzítési beállítások: – Legyen a időfelbontás „finomsága” 4 us – Így az 1ms – 2 ms pulzusszélesség átfogás 256 lépésben adható meg (illeszkedik a 8 bithez) – A teljes periódus legyen ennél 8x hosszabb, azaz ~16ms • Pontosan 4us* 212‐re állítjuk
• Az időzítő 4us időkvantumait 12 hasznos biten számoljuk, 0‐tól – 4095‐ig. • Ez a 4096 időegység a teljes periódus. Ennek első 1/8‐a a vezérlési időtartam. BME-MIT Digit labor 11., 2014.11.23. (v1.0)
22
FPGA labor
Lab11: A mikro szervó motor • A vezérlési időtartam használata – A MINIMUM érték 1 ms, azaz 256 db 4us időegység – A MAXIMUM érték 2ms, azaz 512 db 4us időegység – Ezt a vezérlési időtartamot hasonlítjuk össze minden 4us‐os megszakítási időpontban a teljes periódust mérő 0‐4095‐ig számoló aktuális perióduson belüli idővel. – Ha ez kisebb, a kimenet 1 – Ha ez már nagyobb, a kimenet 0 lesz. – Ezt adjuk a mikro szervóra BME-MIT Digit labor 11., 2014.11.23. (v1.0)
23
FPGA labor
Lab11_1 feladat: A vezérlési paraméterek • A mikro szervó motor a LOGSYS Spartan3E FPGA kártya A bővítő csatlakozójára csatlakozik, egy 1x3 pontos toldó tüskesorral • Csatlakoztatás a mikro szervó vezetékeinek színkódja alapján: – Sárga : GPIO_C[1], Piros: +3,3V, Barna: GND – Ügyeljünk a csatlakoztatásra! SÁRGA PIROS BARNA
BME-MIT Digit labor 11., 2014.11.23. (v1.0)
24
FPGA labor
Lab11_1 feladat: A vezérlési paraméterek • Fontos feladat a mikro szervó motor vezérlését biztosító vezérlőjel kimenet felkonfigurálása a GPIO_C port 1, bitjére • Alapértéke 0, használati módja: állandó kimenet
BME-MIT Digit labor 11., 2014.11.23. (v1.0)
25
FPGA labor
Lab11_2 feladat: A TIMER ISR rutin • A vezérlés a TIMER ISR rutinban történik – Először az aktuális pozíció értéket hasonlítjuk a perióduson belüli aktuális időhöz – A pozíció értéket a főprogram olvassa be az SW perifériáról (8 bit), MINIMUM = 0, KÖZÉP = 127/128, MAXIMUM = 255) – Ezt kiegészíti egy 1ms értékű (16 biten 256) ofszet – Ennek képzése: {r13,r12} = {0000_0001_SW[7:0]} – A teljes lehetséges értéktartomány: 256 – 511 – Ezt komparáljuk a 0‐4095‐ig futó periódusidő számlálóval, és így egy 1ms és 2ms közötti pulzust kaphatunk. BME-MIT Digit labor 11., 2014.11.23. (v1.0)
26
FPGA labor
Lab11_2 feladat: A TIMER ISR rutin • Az előzően felsorolt műveletek a TIMER ISR rutinban történnek • A jelet a GPIO_C[1] lábon adjuk ki • Ellenőrizzük a teljes periódust • Az ISR végén töröljük a TOUT flaget és RTI‐vel visszatérünk BME-MIT Digit labor 11., 2014.11.23. (v1.0)
27
FPGA labor
Lab11_2a feladat: Mikro szervó használata • Az elkészített TIMER ISR rutin használatával teszteljük a mikro szervó motor adott időzítési feltételek melletti működési paramétereit • Inicializálás után a TIMER elindítja az időzítést és 4 us múlva majd megszakítást kér • Ezalatt a főprogram (más fontos dolga nem lévén) beolvasgatja a SW[7:0] értékét, ami a pozíció adat lesz a következő IRQ érvényre jutásakor • A program ezt az egy funkciót hajtja végre
BME-MIT Digit labor 11., 2014.11.23. (v1.0)
28
FPGA labor
Lab11_2b feladat: Mikro szervó használata • Az előbbi program kiegészítése, oly módon, hogy a főprogramban, szoftveres időzítést használva a mikro szervó motort fokozatosan végig vezéreljük a MIN → MAX vagy a MAX → MIN irányban a teljes mozgási tartományban • A visszatérés a számláló átfordulása miatt a legnagyobb sebességgel fog történni • A szoftveres időzítés számlálója legyen 16 bites, a pozíció számláló értéke 8 bites • Az elfordulási sebességeket a számlálók inkrementálási értékével szabályozhatjuk BME-MIT Digit labor 11., 2014.11.23. (v1.0)
29
FPGA labor
Lab11_1 feladat: Feladatok értékelése
A feladatok elvégzése után az eredmények a Labor_11 eredmények lapon összegezzük!
BME-MIT Digit labor 11., 2014.11.23. (v1.0)
30
FPGA labor