Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

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

Hasonló előadás


Az előadások a következő témára: "AVR ATmega128 mikrokontroller 1. mérés BME VIK - Mérés laboratórium 2."— Előadás másolata:

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

2 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

3 BME VIK - Mérés laboratórium 23 A mérés témái  ATmega128 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ó

4 BME VIK - Mérés laboratórium 24 ATmega128 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: –128K Flash (program) –4K EEPROM + 4K 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: avr128-leir2.pdf (+389 oldalas adatlap) Harvard-architektúra

5 BME VIK - Mérés laboratórium 25 ATmega128 mérőpanel Mérőpanel-specifikus: AVR_ExperimentBoard_v103.pdf

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

7 BME VIK - Mérés laboratórium 27 ATmega128 programozása AVR: Atmel RISC processzorcsalád, ATmega128: AVR processzor 128K 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, WinAVR) –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)

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

9 BME VIK - Mérés laboratórium 29 A mérés témái ATmega128 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ó

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

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

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

13 BME VIK - Mérés laboratórium 213 Assembly bevezető Assembly = „összeszerelés” Alacsonyszintű programozási nyelv Architektúrafüggő (pl. x86, 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)

14 BME VIK - Mérés laboratórium 214 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 mintát”: 1. Tölts egy regiszterbe et: ldi temp, 0b Add ki a kimenetre a regisztert: out PORTC, temp

15 BME VIK - Mérés laboratórium 215 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 temp PUSH SREG helyett IN temp, SREG PUSH temp További információ: avr128-leir2.pdf, „Regiszterek” fejezet

16 BME VIK - Mérés laboratórium 216 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) –Inicializálás RAM tetejére: –2 byte-os regiszter 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 ldi temp, LOW(RAMEND) out SPL, temp ldi temp, HIGH(RAMEND) out SPH, temp

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

18 BME VIK - Mérés laboratórium 218 ldi temp, 0xA5 ; out PORTC, temp ; LEDre írás AVR assembly - utasítások utasítás argumentumok Utasításkészlet: avr128-prog1.pdf + Instr_set.pdf + fejlesztőkörnyezet súgója SREG „hátulról előre”

19 BME VIK - Mérés laboratórium 219 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

20 BME VIK - Mérés laboratórium 220 AVR assembly – utasítások C jelleggel a+bADD a-bSUB a&bAND a|bOR a++INC a--DEC -aNEG a=0CLR …… Aritmetikai és logikai reg1=reg2MOV reg=17LDI reg=memLDS reg=*memLD mem=regSTS *mem=regST perifériárólIN perifériáraOUT verembePUSH verembőlPOP …… AdatmozgatóBitműveletek, egyebek a<<1LSL a>>1LSR, Ø C meg- felelő ROL, ROR státusz- bitek SEI, CLI, CLZ... Üres utasítás NOP ……

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

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

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

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

25 BME VIK - Mérés laboratórium 225 AVR assembly – direktívák, egyebek.include "m128def.inc" –az ATmega128 regisztereit és bitjeit specifikáló állomány beolvasása.def temp = r16 –az r16-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

26 BME VIK - Mérés laboratórium 226 A mérés témái ATmega128 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ó

27 BME VIK - Mérés laboratórium 227 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) stamp2.asm: –LCD kijelző –UART (soros kommunikáció) –memóriakezelés (EEPROM) SPI, PWM kimenet, …

28 BME VIK - Mérés laboratórium 228 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)

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

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

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

32 BME VIK - Mérés laboratórium 232 Megszakítások kezelése 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! 1.Megszakítási ugrótáblába (v. vektortábla) bejegyezzük megszakításkezelőnket 2.Megszakítások egyedi engedélyezése, pl. interrupt control regiszter + interrupt maszk: EICRB, EIMSK (gombok esetén) 3.SEI utasítást ki kell adnunk a megszakítások globális engedélyezéséhez 4.Megszakításkezelő rutinban a státuszregisztert és minden más használt regisztert el kell menteni, visszatéréskor pedig engedélyezni

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

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

35 BME VIK - Mérés laboratórium 235 Időzítés Időzítés, megszakítás használata nélkül: egymásba ágyazott ciklusok (16MHz-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 timer0-it.asm -ben számláló szükséges (prescaler: 1/1024)

36 BME VIK - Mérés laboratórium 236 Időzítés megszakítással ; ***** Timer 0 inicializálása ***** ; előosztás (prescaler) beállítása lditemp,0b ; ; FOC=0 ; ; WGM=10 (clear timer on compare match) ; ; COM=00 (kimenet tiltva) ; ; CS0=111 (CLK/1024) outTCCR0,temp ; Timer 0 TCCR0 regiszter ; compare regiszter beállítása lditemp,108 ; Hz/1024 = 108*100 outOCR0,temp ; Timer 0 OCR0 regiszter ; Timer 0 IT engedélyezése, többiek tiltása lditemp,0b ; ; Timer2,1 IT tiltva ; ; OCIE0=1 - match ; ; TOIE0=0 - overflow outTIMSK,temp ; Timer IT Mask regiszter sei; globális IT engedélyezve pontos baudrate érdekében dokumentáció segítségével össze kell tudni állítani + tudni, melyik bit mit jelent

37 BME VIK - Mérés laboratórium 237 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 stamp2.asm -ben sok olyan rutin, ami ötletet adhat a házihoz (LCD, UART, SW timer...)

38 BME VIK - Mérés laboratórium 238 A mérés témái ATmega128 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ó

39 BME VIK - Mérés laboratórium 239 Szimulációval egybekötött fejlesztés Kiindulási alap: avrblank1.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.


Letölteni ppt "AVR ATmega128 mikrokontroller 1. mérés BME VIK - Mérés laboratórium 2."

Hasonló előadás


Google Hirdetések