Vestavné mikropočítačové systémy 2. Týden – jednočipové 8-mi bitové mikropočítače Atmel AVR
Rodiny procesorů Atmel AVR ATtiny malá pouzdra, chudá výbava, nízká spotřeba, cena od 20Kč ATmega univerzální jednočipové mikropočítače s pestrou škálou periferií, nabízí se v řadě variant lišících se navzájem velikostí pamětí a počtem pinů, cena cca 70150 Kč XMEGA nadstandardně vybavené jednočipové mikropočítač (DMA, event-systém, AWEX, RTC, IrCOM, crypto-engine, ADC/DAC, …), nemají je v každé samoobsluze, cena na www.digikey.com 70150 USD AVR32UC3 32-dvou bitové jednočipové mikropočítače, cena cca 170280 Kč AVR32AP 32-bitové procesory bez integrované paměti, cena cca 300500 Kč
8-mi bitové procesory Atmel pro speciální aplikace USB AVR víceméně ATmega s integrovaným řadičem sběrnice USB, cena >300 Kč CAN AVR víceméně ATmega s integrovaným řadičem sběrnice CAN, cena >180 Kč LCD AVR víceméně ATmega s integrovaným řadičem LCD displejů Lighting AVR (AT90PWM) jednočipové mikropočítače s vícekanálovým programovatelným generátorem PWM, řízení světelných zdrojů, motorů apod, cena cca 90 Kč Battery Management AVR jednočipové mikropočítače do aplikací napájených z akumulátorů s možností dobíjení, speciální periferie pro řízení nabíjení Automotive AVR výběr z předchozích rodin pro použití v automobilovém průmyslu AVR Z-Link marketingový trik, Boundle ATmega + AT86RF230 (ZigBee)
32 general purpose registers AVR – blokové schéma 32 general purpose registers Stack pointer SRAM Program counter Program FLASH Instruction register ALU Instruction decoder Status register I/O Interrupt unit Timers / counters Analog comparator ADC Watchdog timer USART SPI TWI E2PROM
CPU 32 univerzálních 8-mi bitových registrů r0 – r31 pro nepřímé adresování se hodnoty vybraných registrů interpretují jako 16-ti bitová adresa. Tyto páry se označují X, Y a Z (r26:r27 = X, r28:r29 = Y, r30:r31 = Z) PC (program counter) – adresa vykonávané instrukce SP (stack pointer) – ukazatel vrcholu zásobníku zásobník roste směrem k nižším adresám (rozdíl proti 8051) 16-ti bitový, implementován jako dvojice registrů (SPL a SPH) v I/O prostoru (rozdíl proti 8051, kde je 8-mi bitový) po resetu se musí inicializovat – obvykle na konec SRAM SREG (status register) – registr stavových příznaků výsledek aritmeticko logických operací – přenos, znaménko, nula, … zakázání / povolení přerušení
SREG – registr stavových příznaků 1 2 5 6 7 3 4 V S C – přenos (carry); Z – indikuje, že výsledek operace je 0 (zero); N – indikuje záporný (negative) výsledek; V – přenos v aritmetice dvojkového doplňku; S – znaménkový příznak, S = N V; H – příznak přetečení mezi nibbly (BCD aritmetika); T – bit, který je adresovatelný bitovými operacemi BLD a BST; I – globální příznak povolení přerušení.
Rozdělení paměti Architektura harvardského typu – oddělený paměťový prostor pro kód a pro data Obě typy pamětí jsou integrovány na čipu Programová paměť FLASH, zaručeno nejméně 10000 cyklů mazání/zápis organizována po slovech (16 bitů) je přístupná z programu pro čtení i zápis pomocí speciálních instrukcí volitelně lze rozdělit na aplikační sekci a bootovací sekci po resetu se PC nastaví na adresu 0 resp. na začátek bootovací sekce Datová paměť je typu SRAM register file I/O space prostor pro aplikační data E2PROM neumožňuje přímý přístup, pracuje se s ní jako s periferií COM – jedničkový doplněk (FF-x) NEG – dvojkový doplněk (0-x)
Rozdělení paměti (ATmega8) FLASH SRAM Register file $000 $0000 $0001 $001E $001F R0 R1 R30 R31 Application section $0020 I/O registers $0021 $00 $01 $3E $3F $005E $005F $0060 $0061 Application data Boot section $045E $FFF $045F
Adresování – přesuny dat Přesun dat mezi registry MOV Rd, Rr Rd Rr MOVW Rd+1:Rd, Rr+1:Rr Rd+1:Rd Rr+1:Rr, pro d,r sudé Nastavení registru konstantou LDI Rd, K Rd K, 16d31 CLR Rd Rd 0 SER Rd Rd $FF Přímé adresování LDS Rd, k Rd (k) STS k, Rd (k) Rd IN Rd, A Rd I/O(A) OUT A, Rd I/O(A) Rd Nepřímé adresování LD Rd, Rw Rd (Rw), Rw{X,Y,Z} ST Rw, Rd (Rw) Rd, Rw{X,Y,Z} LDD Rd, Rw+q Rd (Rw+q), Rw{Y,Z}, 0q63 STD Rw+q, Rd (Rw+q) Rd, Rw{Y,Z}, 0q63 instrukce LD a ST mohou vykonávat postinkrement nebo predekrement dvojregistru s adresou (Rw) Přístup do programové paměti LPM R0 (Z) LPM Rd, Z Rd (Z) LPM Rd, Z+ Rd (Z), Z Z + 1 SPM
ALU – aritmetické operace Sčítání, odčítání ADD Rd, Rr Rd Rd + Rr ADC Rd, Rr Rd Rd + Rr + C ADIW Rd+1:Rd, K Rd+1:Rd Rd+1:Rd + K, d{24,26,28,30}, 0 k63 SUB Rd, Rr Rd Rd – Rr SUBI Rd, K Rd Rd – K, 16d31 SBC Rd, Rr Rd Rd – Rr – C SBCI Rd, K Rd Rd – K – C, 16d31 SBIW Rd+1:Rd, K Rd+1:Rd Rd+1:Rd – K, d{24,26,28,30}, 0 k63 INC Rd Rd Rd + 1 DEC Rd Rd Rd – 1 Násobení MUL Rd, Rr R1:R0 Rd Rr (unsigned unsigned unsigned), 16d,r31 MULS Rd, Rr R1:R0 Rd Rr (signed signed signed), 16d,r31 MULSU Rd, Rr R1:R0 Rd Rr (signed signed unsigned), 16d,r23 FMUL Rd, Rr R1:R0 Rd Rr (unsigned unsigned unsigned), 16d,r23 FMULS Rd, Rr R1:R0 Rd Rr (signed signed signed), 16d,r23 FMULSU Rd, Rr R1:R0 Rd Rr (signed signed unsigned), 16d,r23 Porovnávání CP Rd, Rr Rd – Rr CPC Rd, Rr Rd – Rr - C CPI Rd, K Ed – K, 16d31 CPSE Rd, Rr if Rd = Rr then PC PC + 2 (or 3) ekse PC PC + 1 Některé typu nemají násobičku Není obdoba djnz
ALU – logické operace Bitové operace Rotace, posuny Jiné operace AND Rd, Rr Rd Rd Rr ANDI Rd, K Rd Rd K, 16d31 OR Rd, Rr Rd Rd Rr ORI Rd, K Rd Rd K, 16d31 EOR Rd, Rr Rd Rd Rr TST Rd Rd Rd Rd Rotace, posuny ROL Rd C Rd7 … Rd0 C ROR Rd C Rd7 … Rd0 C LSL Rd C Rd7 … Rd0 0 LSR Rd 0 Rd7 … Rd0 C ASR Rd Rd7 Rd7 … Rd0 C Jiné operace COM Rd Rd $FF – Rd NEG Rd Rd $00 – Rd SWAP Rd Rd7:4 Rd3:0, Rd3:0 Rd7:4 CBR Rd, K Rd Rd ($FF – K) , 16d31 SBR Rd, K Rd Rd K, 16d31 CBI A, b I/O(A)b 0 SBI A, b I/O(A)b 1 SBRC / SBRS Rr, b if Rrb = 0/1 then PC PC + 2 (or 3) else PC PC + 1 SBIC / SBIS A, b if I/O(A),b = 0/1 then PC PC + 2 (or 3) else PC PC + 1
ALU – status register Bity Nastavení shození příznaku Podmíněné skoky I (7) – globální zákaz / povolení přerušení T (6) – místo pro kopírování bitu instrukcemi BLD a BST H (5) – half-carry – signalizuje, že došlo k přetečení mezi 3. a 4. bitem (BCD aritmetika) S (4) – znaménko výsledku (S = N V) V (3) – přetečení v aritmetice dvojkového doplňku N (2) – indikuje záporný výsledek (kopíruje nejvýznamnější bit výsledku) Z (1) – indikuje nulový výsledek C (0) – signalizuje, že došlo k přetečení ze 7. bitu Nastavení shození příznaku BCLR / BSET s SREG(s) 0/1 CLI / SEI I 0/1 CLT / SET T 0/1 CLH / SEH H 0/1 CLS / SES S 0/1 CLV / SEV V 0/1 CLN / SEN N 0/1 CLZ / SEZ Z 0/1 CLC / SEC C 0/1 Podmíněné skoky BRBC / BRBS s, k if SREG(s) = 0/1 then PC PC + k + 1 else PC PC + 1 BRID / BRIE k if I = 0/1 then PC PC + k + 1 else PC PC + 1 BRTC / BRTS k if T = 0/1 then PC PC + k + 1 else PC PC + 1 BRHC / BRHS k if H = 0/1 then PC PC + k + 1 else PC PC + 1 BRGE / BRLT k if S = 0/1 then PC PC + k + 1 else PC PC + 1 BRVC / BRVS k if V = 0/1 then PC PC + k + 1 else PC PC + 1 BRPL / BRMI k if N = 0/1 then PC PC + k + 1 else PC PC + 1 BRNE / BREQ k if Z = 0/1 then PC PC + k + 1 else PC PC + 1 BRCC / BRCS k if C = 0/1 then PC PC + k + 1 else PC PC + 1 BRSH / BRLO k if C = 0/1 then PC PC + k + 1 else PC PC + 1 COM – jedničkový doplněk (FF-x) NEG – dvojkový doplněk (0-x)
Adresování – skoky, zásobník Skok na přímou adresu JMP k PC k RJMP k PC PC + k + 1, -2kd<2k IJMP PC Z Volán podprogramu CALL k (SP) PC + 2, SP SP – 2, PC k RCALL k (SP) PC + 1, SP SP – 2, PC PC + k + 1, -2kd<2k ICALL (SP) PC + 1, SP SP – 2, PC Z RET SP SP + 2, PC (SP) RETI SP SP + 2, PC (SP), I 1 Práce se zásobníkem PUSH Rr (SP) Rr, SP SP – 1 POP Rr Rr (SP), SP SP + 1