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 Digit labor 11., 2014.11. 23. (v1.0) BME MIT
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 Digit labor 11., 2014.11.23. (v1.0) 1
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 Digit labor 11., 2014.11.23. (v1.0) 2
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 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
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 Digit labor 11., 2014.11.23. (v1.0) 4
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 Digit labor 11., 2014.11.23. (v1.0) 5
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 Digit labor 11., 2014.11.23. (v1.0) 6
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 Digit labor 11., 2014.11.23. (v1.0) 7
Lab 11: MiniRISC processzor Vezérlő állapotgép Töréspont, ekkor a debug modul veszi át a vezérlést ~continue STATE_BREAK continue IR PMEM[PC] PC PC+1 break STATE_INIT PC 0, IE 0, IF 0 STATE_FETCH ~break IR PMEM[PC] PC PC+1 STATE_DECODE A processzor inicializálása Utasítás lehívás Utasítás dekódolás STATE_EX_XXX ~IE ~IRQ Utasítás végrehajtás Digit labor 11., 2014.11.23. (v1.0) IE & IRQ STATE_INT_REQ stack PC,Z,C,N,V,IE,IF PC 0x01, IE 0, IF 1 8 Megszakítás kiszolgálás
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 Visszatérés RTI utasítással (PC+flagek és IE=1) Digit labor 11., 2014.11.23. (v1.0) 9
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 irq állapotának vizsgálata a CPU állapota FETCH DECODE EXECUTE FETCH DECODE EXECUTE INT_REQ FETCH DECODE cpu2pmem_addr 0x15 0x16 0xAC 0xAD 0x01 0x02 pmem2cpu_data jmp 0xAC PMEM[0x16] PMEM[0xAC] PMEM[0xAD] PMEM[0x01] PMEM[0x02] Az utasítás beolvasása itt történik Az utasítás beolvasása itt történik Digit labor 11., 2014.11.23. (v1.0) 10
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 Digit labor 11., 2014.11.23. (v1.0) 11
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 Digit labor 11., 2014.11.23. (v1.0) 12
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! Digit labor 11., 2014.11.23. (v1.0) 13
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 Digit labor 11., 2014.11.23. (v1.0) 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 Digit labor 11., 2014.11.23. (v1.0) 15
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 2. bit 1. bit 0. bit TIE TPS2 TPS1 TPS0 - - TREP TEN W W W W 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 TEN TREP TOUT TPS[2:0] TIE / TIT Digit labor 11., 2014.11.23. (v1.0) Funkció Engedélyező bit (0: a működés tiltott, 1: a működés engedélyezett) Működési mód kiválasztása (0: egyszeri, 1: ismétlődéses) Időzítési periódus lejárt jelzőbit Az előosztás (PS) mértékét beállító bitek 0 : nincs előosztás 1 7 : 22 22 TTTTTT+11 előosztás (16, 64, 256, 1024, 4096, 16384 vagy 65536) Időzítő megszakítás engedélyezés és jelzés bitek 16
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: TT = TTTT + 11 PPPP TT CCCCCC TTTT = 11.. 222222, PPPP = 11, 1111, 6666666666 TT CCCCCC = 6666, 555555 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 Digit labor 11., 2014.11.23. (v1.0) 17
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 Digit labor 11., 2014.11.23. (v1.0) 18
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 Digit labor 11., 2014.11.23. (v1.0) 19
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) Digit labor 11., 2014.11.23. (v1.0) 20
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ű Digit labor 11., 2014.11.23. (v1.0) 21
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* 2 12 -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. Digit labor 11., 2014.11.23. (v1.0) 22
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 Digit labor 11., 2014.11.23. (v1.0) 23
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 Digit labor 11., 2014.11.23. (v1.0) 24
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 Digit labor 11., 2014.11.23. (v1.0) 25
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. Digit labor 11., 2014.11.23. (v1.0) 26
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 Digit labor 11., 2014.11.23. (v1.0) 27
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 Digit labor 11., 2014.11.23. (v1.0) 28
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 Digit labor 11., 2014.11.23. (v1.0) 29
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! Digit labor 11., 2014.11.23. (v1.0) 30