AVR - kútik
Na rôznyh fórach sa často stretávam s otázkou, čím
sa vlastne odlišujú jednotlivé typy 8-bitových mikroprocesorov okrem veľkosti
a typu pamäte a typu púzdra. Pretože sa v poslednom čase zaoberám predovšetkým
AVR-rodinou firmy Atmel, pokúsim sa dať čiastočnú odpoveď na túto otázku
z pohľadu AVR-architektúry.
16-bitový výkon za cenu 8-bitového procesora?
Úvod do AVR
Hlavné charakteristiky AVR rodiny jednočipových
mikroradičov sú:
-
89 (AT90S1200) resp. 118 - 121 jednoslovových inštrukcií
-
veľká väčšina inštrukcií sa vykonáva len v jednom cykle
-
taktovacia frekvencia 0 - 12 MHz
-
šírka inštrukcie 16 bitov
-
8 - bitová dátova zbernica
-
512 - 64k slov pre integrovanú FLASH pamäť programu
-
32 General Purpose Register
-
3 úrovňový hw-zásobník resp. Stackpointer v SRAM
-
priame, nepriame a relatívne adresovanie
-
interný analógový komparátor
-
8-bitový čítač/časovač s programovateľným 10-bitovým preddeličom
-
16-bitový čítač/časovač s Capture Compare módom
-
1-3 PWM kanály
-
8-kanálový 10-bitový A/D prevodník
-
5-48 vstupno/výstupných liniek
-
watchdog časovač s interným RC oscilátorom
-
programovateľné poistky proti neoprávnenému vyčítaniu
-
napájanie 2,7-6 Voltov, spotreba 5,5 mA (ATmega103, 4MHz, 3V, 25C)
|
|
AVR architektúra
AVR rodina jednočipových mikroprocesorov firmy Atmel
je vyrobená High-Speed CMOS technológiou s FLASH pamäťou programu, ISP
a vyznačuje sa implementáciou RISC inštrukčného súboru. Oproti iným mikroprocesorom
so spoločnou zbernicou pre pamäť a dáta (von Neumannova architektúra) je
AVR-architektúra charakteristická použitím dvoch oddelených zberníc a pamäťových
oblastí pre program a dáta (Harvardská architektúra). Tým je možné nasadenie
adresovej a dátovej zbernice s rôznozu šírkou. AVR majú 8-bitovú zbernicu
pre dáta a 16-bitovú pre inštrukcie (program). Širšou zbernicou pre program
je možné prakticky skoro všetky inštrukcie implementovať ako jednoslovové
(16-bitový Opcode). Jednostupňová pipeline umožňuje, aby sa počas výkonu
inštrukcie nasledovná inštrukcia prenášala z pamäte. V porovnaní
s inými mikroprocesormi sa rozsah taktovacích frekvencií 0-12MHz javí pomerne
nízky. Ak sa však zohľadní, že kmitočet oscilátora sa vnútorne nedelí a
väčšina inštrukcií (až na skokové a Load/Store inštrukcie) sa vykoná
počas jedného taktovacieho impulzu - znamená to, výkon až 12 MIPS (Million
Instructions per Second)
Obr. 1 Porovnanie počtu potrebných
taktov na vykonanie dvoch inštrukcií pre známe typy procesorov.
Programové počítadlo (PC) je podľa AVR-typu a
teda aj veľkosti programovej pamäte široké 9-16 bitov a nachádza sa v I/O
priestore. Počas prerušenia alebo skoku do podprogramu sa jeho obsah odkladá
do zásobníka-stacku. AT90S1200 disponuje 3-úrovňovým HW-zásobníkom. Všetky
ostatné typy majú zásobník v SRAM a tento je adresovaný prostredníctvom
Stack-Pointera (SP). Stack pointer je široký 16 bitov a nachádza sa takisto
v I/O priestore.
Pamäť a registre
Programová pamäť AVR-rodiny je typu FLASH a je široká
16 bitov. Výrobca garantuje minimálne 1000 cyklov mazania/programovania.
Jednotlivé typy sa odlišujú veľkosťou pamäte
programu, ktorá sa pohybuje v rozsahu 512 x 16 bitov až 65536 x 16 bitov,
veľkosťou pamäte dát typu EEPROM (medzi 64 Byte - 2kByte) a veľkosťou SRAM
pamäte dát (medzi 158 Byte až 4kByte). Pre periférie je vyhradených 64
I/O pamäťových miest, ktoré sa dajú ovládať inštrukciou OUT. Alternatívne
je tento I/O priestor dostupný v dátovej pamäti na adresách $20 -$5F.
Jadro procesora pozostáva z ALU (Arithmetic Logic
Unit) ktorá je spojená priamo s 32 všeobecnými registrami (GPR, General
Purpose Unit). Tieto registre sú približne to, čo je pri iných mikroprocesoroch
akumulátor. Všetkých 32 registrov je mapovaných v adresovom poli pamäte
dát.
Ako ukazovateľ funguje u AT90S1200 posledný,
u ostatných typov posledné tri páre registrov. Vysoký počet univerzálnych
registrov vyplynul z požiadavky na generovanie efektívneho kódu HLL (High
Level Language) kompilátormi.
Aritmeticko-logická jednotka je schopná prevádzať
sčítanie, odčítanie, bitové posuny a logické operácie. Tak sa dá napríklad
sčítať obsah registrov R1 a R2 pri následnom uchovaní výsledku v
jednom z nich len jedným príkazom s dobou výkonu jeden takt!
Následne je uvedený príklad na demonštrovanie
efektivity kódu.
Príklad má vykonávať funkciu: A = ((A .and. 84h) + (B.eor.C).or.80h
AVR code |
CISC code |
EOR B,C |
MOV ACC,C |
ANDI A,#84h |
EOR ACC,B |
ADD A,B |
MOV TMP,ACC |
ORI B,#80h |
MOV ACC,A |
|
AND ACC,#84h |
|
ADD ACC,TMP |
|
OR ACC,#80h |
|
MOV A,ACC |
|
|
8 bytes |
12-16 bytes |
4 clocks |
48-96 clocks |
V závislosti na výsledku aritmeticko-logických
operácií nastavuje ALU príznaky v stavovom registri (SREG).
Prístup k dátam a teda aj k obsahu registrov je
možný prostredníctvom 5 rôznych spôsobov adresovania. Bližšie o tom nabudúce.
Vypracoval Marian Ďuriš. Dátum poslednej
aktualizácie 24.07.2001
Návrhy, pripomienky, komentáre
a otázky? Kontaktujte nás
PSH - mikro sa s projektom Komunikácia medzi
AVR a PDA s PalmOS prostredníctvom IrDA protokolu zúčastňnuje:
Návrat na začiatok stránky
Úvod