BME VIK Mrs laboratrium 2 1 mrs AVR

BME VIK - Mérés laboratórium 2 1. mérés AVR ATmega 128 mikrokontroller BME VIK - Mérés laboratórium 2

A mérés célja • Mikrokontrolleres környezet megismerése • Jobb rálátás arra, mi zajlik a magasszintű programozási nyelvek „hátterében” • Beágyazott alkalmazásfejlesztés módszereinek elsajátítása BME VIK - Mérés laboratórium 2 2

A mérés témái Ø ATmega 128 hardver ismertető • Assembly bevezető • Beágyazott specialitások – I/O portok kezelése – Megszakítások – Időzítés – Amikről nem beszélünk… De tudni kell! • Fejlesztőkörnyezet, szimuláció BME VIK - Mérés laboratórium 2 3

ATmega 128 hardver ismertető • CPU: – 16 MHz (11 MHz a laborban használt paneleken) – 133 RISC jellegű utasítás – Általában 1 utasítás/ciklus, ha nem ugrás • Mem: – 128 K Flash (program) Harvard-architektúra – 4 K EEPROM + 4 K belső SRAM (adat) – 32 regiszter, 16 felsőnek kitüntetett szerep, 3 páros regiszter • Perifériák: (mérőpanel-specifikus) – LED, nyomógomb, kapcsoló, LCD, potméter, fényérzékelő, hőmérséklet-szenzor, UART, … – Perifériakezelés: I/O reg. tartomány és memóriába ágyazott – Sok I/O láb; némely kimenet alkalmas LED-ek közvetlen meghajtására, beépítése pl. FPGA-khoz képest könnyű További paraméterek: avr 128 -leir 2. pdf BME VIK - Mérés laboratórium 2 (+389 oldalas adatlap) 4

ATmega 128 mérőpanel Mérőpanel-specifikus: AVR_Experiment. Board_v 103. pdf BME VIK - Mérés laboratórium 2 5

AVR blokkvázlat BME VIK - Mérés laboratórium 2 6

ATmega 128 programozása • AVR: Atmel RISC processzorcsalád, ATmega 128: AVR processzor 128 K flash memóriával („Advanced Virtual RISC”) • Fejlesztőkörnyezet: AVRStudio – Assembly és C nyelv támogatott (utóbbi nem beépített: AVR-GCC, Win. AVR) – Hardverben történő felprogramozás (ISP, In System Programming) és debug (JTAG-ICE, In Circuit Emulation) – Jó minőségű szimulációs felület (mikrokontroller + integrált perifériák) – kész hardver nélkül is elkezdhető a programozás Házi feladatot mindenki ellenőrizze otthon! (azokat a részeket, amiket lehet) BME VIK - Mérés laboratórium 2 7

AVRStudio IDE (IDE: Integrated Development Environment) Használata: avrst-haszn 1. pdf + mérés 2. része BME VIK - Mérés laboratórium 2 8

A mérés témái • ATmega 128 hardver ismertető Ø Assembly bevezető • Beágyazott specialitások – I/O portok kezelése – Megszakítások – Időzítés – Amikről nem beszélünk… De tudni kell! • Fejlesztőkörnyezet, szimuláció BME VIK - Mérés laboratórium 2 9

Assembly kitérő (x 86) – mekkora kód? BME VIK - Mérés laboratórium 2 10

Assembly kitérő (x 86) – ekkora! S equ 0 E 5 h ; like original org 100 h ; mov al, 13 h ; int 10 h ; lds bx, [bx] ; M: cmp [bx], cl ; adc [bx], ah ; imul bx, byte S ; mov cl, [bx] ; add cl, [bx+di] ; add cl, [bx-321] ; add cl, [bx+si+63]; dec bx ; in al, 60 h ; dec al ; jnz M ; ret ; assumes: ah=0 bx=0 cl>0 di=0 FFFEh si=0100 h (2) (2) bx=20 CDh ds=9 FFFh (2) (3) (2) (4) (3) (1) (2) (2) (1) if ([bx] < cl) [bx]++ (first pass increases) pseudorandom generator: bx = S*bx-1 (works if S%4==1) we don't decrease bx yet cl = ([bx+1]+[bx-320]+[bx+320]) & 0 FFh standard ESC check Lefordítva gépi kódra: 32 byte (Forrás: http: //www. pouet. net/prod. php? which=28913) BME VIK - Mérés laboratórium 2 11

Assembly kitérő (x 86) – C fordítás menete C nyelvű forráskód Előfeldolgozó (preprocessor) C forrás (makrók stb. behelyettesítve: #define; #include…) Fordító (compiler) gcc –E prog. c Assembly kód (architektúra-függő, optimalizált) Assembler Tárgykód (Object code) gcc –S prog. c Könyvtári függvények (libraries) Linker Futtatható állomány (. com, . exe, ELF…) BME VIK - Mérés laboratórium 2 12

Assembly bevezető • • Assembly = „összeszerelés” Alacsonyszintű programozási nyelv Architektúrafüggő (pl. x 86, PPC, AVR…) C nyelv és gépi kód között – tömör és jól kiszámítható lefutású • Alkalmazás: főként kis beágyazott rendszerek (pl. PIC, AVR) • Nagyobb projektek: asm fejlesztés drága, rugalmatlan; C fordítók jól optimalizálnak • Főként számításintenzív feladatokra, ott is ritkán (matematikai, grafikai) + reverse engineering (pl. programok feltörése) BME VIK - Mérés laboratórium 2 13

AVR assembly - regiszterek • RISC utasításkészlet, load/store architektúra: egyszerű memóriamanipulációk a regiszterkészlet segítségével • Regiszterkészlet: – – kiemelt fontosságú, 32 db 8 bites adat szinte minden művelet rajtuk keresztül zajlik 16 fölöttiek használhatók közvetlen műveletekhez Utolsó 3 pár kettősregiszterként (16 bit) is szolgál Pl: „rakj a LED-re 0011 mintát”: 1. Tölts egy regiszterbe 0011 -et: ldi temp, 0 b 0011 2. Add ki a kimenetre a regisztert: out PORTC, temp BME VIK - Mérés laboratórium 2 14

AVR assembly – speciális regiszterek • Státuszregiszter (SREG) - flagek – Carry, Zero, Global Interrupt Enable/Disable… – Néhány utasítás automatikusan átbillentheti értéküket (aritmetikaiak), mások az értékük alapján adnak lehetőséget elágazásra – lásd az utasításkészletben – buta megoldás: I/O címtartományban, emiatt interruptkezelő rutin elején státuszmentés: PUSH SREG helyett PUSH temp IN temp, SREG PUSH temp További információ: avr 128 -leir 2. pdf, „Regiszterek” fejezet BME VIK - Mérés laboratórium 2 15

AVR assembly – speciális regiszterek • Veremmutató (SP, Stack pointer) – Szubrutinok visszatérési címeinek és megszakításkezelő rutin környezeti változóinak átmeneti tárolására (push, pop) temp, LOW(RAMEND) – Inicializálás RAM tetejére: ldi out SPL, temp ldi temp, HIGH(RAMEND) – 2 byte-os regiszter out SPH, temp • Utasításszámláló (PC, Program Counter) – Aktuális utasítás címe – CALL és megszakítás hatására verembe mentődik; RET és RETI innen tölti vissza a szubrutin ill. megszakításkezelő rutin végén BME VIK - Mérés laboratórium 2 16

AVR assembly - utasítások utasítás (mnemonic) argumentumok (operandusok) ldi temp, 0 x. A 5 10100101 out PORTC, temp ; ; LEDre írás megjegyzés (nagyon fontos!) Utasítás-család pl: load, load immediate, load direct from SRAM… LD, LDI, LDS… BME VIK - Mérés laboratórium 2 17

AVR assembly - utasítások utasítás argumentumok ldi temp, 0 x. A 5 ; 10100101 out PORTC, temp ; LEDre írás „hátulról előre” SREG Utasításkészlet: avr 128 -prog 1. pdf + Instr_set. pdf + fejlesztőkörnyezet súgója BME VIK - Mérés laboratórium 2 18

AVR assembly - utasítástípusok • • aritmetikai és logikai utasítások elágazások és ugrások adatmozgató bitmódosító, bittesztelő utasítások BME VIK - Mérés laboratórium 2 19

AVR assembly – utasítások C jelleggel Aritmetikai Adatmozgató és logikai reg 1=reg 2 MOV Bitműveletek, egyebek a+b ADD reg=17 LDI a<<1 LSL a-b SUB reg=mem LDS a>>1 LSR, a&b AND reg=*mem LD a|b OR mem=reg STS Ø C meg- ROL, felelő ROR a++ INC *mem=reg ST a-- DEC perifériáról IN -a NEG perifériára OUT a=0 CLR verembe PUSH … … veremből POP … … BME VIK - Mérés laboratórium 2 státuszbitek SEI, CLZ. . . Üres utasítás NOP … … 20

AVR assembly - ugróutasítások • JMP: feltétel nélküli ugrás Végtelen ciklus pl. : M_LOOP: …utasítások… jmp M_LOOP • • Hasonló C konstrukció: while (1) {. . . utasítások. . . } CALL, RET: szubrutinhívás és visszatérés (PC bekerül a verembe) RETI: visszatérés interruptból Szubrutin: M_LOOP: … CALL FV … FV: …utasítások… RET void fv() { …utasítások… return; } void main () {… fv(); } BME VIK - Mérés laboratórium 2 21

AVR assembly – feltételes elágazások • egyenlőségvizsgálat M_LOOP: CPSE a, b JMP L 2 L 1: … JMP M_LOOP L 2: … JMP M_LOOP ; compare, if (a==b) { ; skip if eq. (L 1) } else { ; a == b (L 2) } ; a != b A CPSE utasítás a „JMP L 2”-t átugorja, ha a két operandus egyenlő - így pont L 1 -re érkezik. Az összetettebb feltételekhez rajzoljunk folyamatábrát, különben a mérésvezető sem fogja tudni követni! BME VIK - Mérés laboratórium 2 22

AVR assembly – feltételes elágazások • switch / case M_LOOP: . . CP ch, 65 BREQ L 1 CP ch, 66 BREQ L 2. . . JMP VEGE L 1: … JMP VEGE L 2: … (JMP VEGE) VEGE: . . . switch (ch) { ; compare->Zero. F case 'A': (L 1) ; branch if eq. break; case 'B': (L 2) break; . . . } (VEGE) Figyelem! A BREQ maximálisan 64 byte távolságra alkalmazható! (Távolabbra pl. közbeiktatott JMP-vel. ) BME VIK - Mérés laboratórium 2 23

AVR assembly – for ciklus • több byte-os ciklusszámlálójú for ciklus: LDI temp 0, 0 x 20 ; belső változó for (int a=0; LDI temp 1, 0 x 4 E ; külső változó i<20000; i++) LOOP: {. . . DEC temp 0 }; BRNE LOOP ; branch if !=0 DEC temp 1 BRNE LOOP Megoldható 2 byte-os utasításokkal is (pl. SBIW vagy ADIW). BME VIK - Mérés laboratórium 2 24

AVR assembly – direktívák, egyebek. include "m 128 def. inc" – az ATmega 128 regisztereit és bitjeit specifikáló állomány beolvasása . def temp = r 16 – az r 16 -os regiszterre a továbbiakban temp-ként is hivatkozhatunk . equ tconst = 100 – konstans érték definiálása . org $0046 – az ezt a sort követő utasítás kezdőcíme a memóriában (pl. interrupt-táblának hely fenntartása a program elején) M_LOOP: – címke ugróutasítások, elágazások számára BME VIK - Mérés laboratórium 2 25

A mérés témái • ATmega 128 hardver ismertető • Assembly bevezető Ø Beágyazott specialitások ØI/O portok kezelése ØMegszakítások ØIdőzítés ØAmikről nem beszélünk… De tudni kell! • Fejlesztőkörnyezet, szimuláció BME VIK - Mérés laboratórium 2 26

Beágyazott specialitások • I/O portok kezelése: – LED, gomb, kapcsoló • Megszakítások kezelése • Időzítés + házi feladathoz (nem lesz róluk részletesen szó): • pergésmentesítés (gombok) • A/D konverzió (fény- és hőmérséklet-érzékelő, potméter) • stamp 2. asm: – LCD kijelző – UART (soros kommunikáció) – memóriakezelés (EEPROM) • SPI, PWM kimenet, … BME VIK - Mérés laboratórium 2 27

I/O portok kezelése • Portonként 3 I/O regiszter, bitenként szabályozható • DDRx: irány (1: ki, 0: be) • PORTx: – DDR=ki esetén ide írjuk a kimeneti adatot – DDR=be esetén itt szabályozzuk a bemeneti felhúzó ellenállást/lebegést • PINx: a kimeneti port aktuális értéke – DDR=ki esetén 1 órajel késéssel PORTx – DDR=be esetén a bemeneti adat • IN, OUT utasítással (kivéve: kapcsolók, ezekre LDS, STS – memóriába ágyazott) BME VIK - Mérés laboratórium 2 28

I/O portok kezelése irány DDRx értéke DDRx kimeneti érték / bemenet felhúzása PORTx értéke PORTx (ki/)bemeneti érték PINx BME VIK - Mérés laboratórium 2 29

I/O portok kezelése • LED-ek bekapcsolása: ldi temp, 0 xff ; 8 bites LED kimenet out DDRC, temp out PORTC, temp ; LED-ek bekapcsolása • Kapcsolók beolvasása: ldi sts lds temp, 0 x. FF PORTG, temp, 0 x. EB DDRG, temp, PING ; ; nem tri-state csak a kapcsoló-biteket olvassuk bemenet kapcsolók allapotanak beolvasasa LDS/STS csak a kapcsolóknál kell, többi IN/OUT. A SW 2 PING 4. bitjére van kötve a 2. helyett. A nyomógombok nem pergésmentesítettek! BME VIK - Mérés laboratórium 2 30

I/O portok kezelése - további infók • bekötések az AVR_Experiment. Board_v 103. pdf alapján • minta-programváz fejlécében a lényegesebb regiszterek felsorolva • avr 128 -leir 2. pdf-ben a portok kezelése részletesebben • excel állomány a lábkiosztással • (+ m 128 def. inc-ben megtalálhatóak az I/O műveletekre definiált regiszterek) BME VIK - Mérés laboratórium 2 31

Megszakítások kezelése • • 1. 2. 3. 4. Egyszintű, egyszerű interruptrendszer Beérkező interrupt törli a globális megszakításengedélyező flaget, interruptból visszatérés (RETI) engedélyezi – nem kell még egyszer törölni / engedélyezni a rutinon belül! Megszakítási ugrótáblába (v. vektortábla) bejegyezzük megszakításkezelőnket Megszakítások egyedi engedélyezése, pl. interrupt control regiszter + interrupt maszk: EICRB, EIMSK (gombok esetén) SEI utasítást ki kell adnunk a megszakítások globális engedélyezéséhez Megszakításkezelő rutinban a státuszregisztert és minden más használt regisztert el kell menteni, visszatéréskor pedig engedélyezni BME VIK - Mérés laboratórium 2 32

Megszakítási vektortábla. org $0000 ; Define start of Code segment jmp RESET ; Reset Handler, jmp is 2 word instruction reti ; INT 0 nop reti ; INT 1 ; will nop reti ; INT 2 nop Handler on $0002, dummy Handler, if INTn used, 'reti' and 'nop' be replaced by 'jmp INTn_Handler_Address' Handler . . . reti ; Timer 1 Compare Match B Handler nop reti ; Timer 1 Overflow Handler nop reti nop jmp TIMER_IT; Timer 0 Compare Match Handler reti ; Timer 0 Overflow Handler nop. org $0046 ; MAIN program. . . BME VIK - Mérés laboratórium 2 33

Megszakításkezelő rutin TIMER_IT: ; nem kell CLI ; elmentjük a státusz és az átmeneti regiszert push temp SREG mentése arra az esetre, ha in temp, SREG az összehasonlítás és az azt követő push temp elágazás között futna le az IT rutin <. . . IT-kezelés. . . > ; visszaállítjuk a státusz és az átmeneti regiszert pop temp out SREG, temp pop temp ; nem kell SEI reti ; visszatérünk BME VIK - Mérés laboratórium 2 34

Időzítés • Időzítés, megszakítás használata nélkül: • egymásba ágyazott ciklusok (16 MHz-es órajel miatt a 8 bit kevés a számlálóhoz) • timer counter folyamatos lekérdezése (itt is kell saját számláló) – egyszerűbb őket megvalósítani, debugolni – csúnya megoldások, alkalmatlanok pontos időzítésre • Időzítő megszakítás használata • időzítő prescaler (előosztó) értékét be kell állítani, hogy ne túl sűrűn érkezzen IT • engedélyezni az időzítő megszakítást • mintapélda a timer 0 -it. asm-ben • számláló szükséges (prescaler: 1/1024) BME VIK - Mérés laboratórium 2 35

Időzítés megszakítással ; ***** Timer 0 inicializálása ***** dokumentáció segítségével ; előosztás (prescaler) beállítása össze kell tudni állítani ldi temp, 0 b 00001111 + tudni, melyik bit mit jelent ; 0. . . . ; FOC=0 ; . 0. . 1. . . ; WGM=10 (clear timer on compare match) ; . . 00. . ; COM=00 (kimenet tiltva) ; . . . 111 ; CS 0=111 (CLK/1024) out TCCR 0, temp ; Timer 0 TCCR 0 regiszter pontos baudrate érdekében ; compare regiszter beállítása ldi temp, 108 ; 11059200 Hz/1024 = 108*100 out OCR 0, temp ; Timer 0 OCR 0 regiszter ; Timer 0 IT engedélyezése, többiek tiltása ldi temp, 0 b 00000010 ; 000000. . ; Timer 2, 1 IT tiltva ; . . . 1. ; OCIE 0=1 - match ; . . . . 0 ; TOIE 0=0 - overflow out TIMSK, temp ; Timer IT Mask regiszter sei ; globális IT engedélyezve BME VIK - Mérés laboratórium 2 36

További tudnivalók. . . • Kommentezés nélküli assembly kód nem fogadható el, még akkor se, ha tökéletes! • A házi feladathoz áttekintő folyamatábrát kell készíteni • Általában van benne megszakításkezelés • A házi feladat komplexitása miatt a leszimulálható részek működőképessége otthon ellenőrzendő (egyszerű IT is szimulálható!) • Közösen írt HF: a másik által írt részt is értsd és tudd bővíteni, ha szükséges; kiadásnál egyeztetni, hogy ki melyik részt csinálja • stamp 2. asm-ben sok olyan rutin, ami ötletet adhat a házihoz (LCD, UART, SW timer. . . ) BME VIK - Mérés laboratórium 2 37

A mérés témái • ATmega 128 hardver ismertető • Assembly bevezető • Beágyazott specialitások – I/O portok kezelése – Megszakítások – Időzítés – Amikről nem beszélünk… De tudni kell! Ø Fejlesztőkörnyezet, szimuláció BME VIK - Mérés laboratórium 2 38

Szimulációval egybekötött fejlesztés Kiindulási alap: avrblank 1. asm 1. feladat: LED-ek kigyújtása számlálóval 2. feladat: LED-ek vezérlése kapcsolóval 3. feladat: Kapcsolók sorbarendezése Minden lépésben ellenőrizni a várt működést szimulációval. BME VIK - Mérés laboratórium 2 39
- Slides: 39