´ Ustav radioelektroniky Vysok´ e uˇ cen´ı technick´ e v Brnˇ e
Programov´ an´ı mikrokontrol´ er˚ u Mikroprocesorov´ a technika a embedded syst´ emy Pˇredn´ aˇska 3
doc. Ing. Tom´ aˇs Fr´ yza, Ph.D. ˇr´ıjen 2012
Obsah pˇredn´ aˇsky
Typy adresov´ an´ı Registrov´ e, pˇr´ım´ e, nepˇr´ım´ e, bezprostˇredn´ı Vˇ etven´ı programu Programov´ yˇ c´ıtaˇ c Vol´ an´ı podprogramu, z´ asobn´ık Obsluha pˇreruˇsen´ı Extern´ı poˇzadavek na pˇreruˇsen´ı Vnitˇrn´ı struktura a vyuˇ zit´ı z´ akladn´ıch perif´ eri´ı Vstupnˇ e/v´ ystupn´ı port Pˇr´ım´ e pˇripojen´ı, maticov´ e, pomoc´ı pomocn´ ych obvod˚ u ˇ Casovaˇ c/ˇ c´ıtaˇ c Uk´ azka programu v JSA a v jazyce C pro ATmega16 Obsluha pˇreruˇsen´ı
Obsah pˇredn´ aˇsky
Typy adresov´ an´ı Registrov´ e, pˇr´ım´ e, nepˇr´ım´ e, bezprostˇredn´ı Vˇ etven´ı programu Programov´ yˇ c´ıtaˇ c Vol´ an´ı podprogramu, z´ asobn´ık Obsluha pˇreruˇsen´ı Extern´ı poˇzadavek na pˇreruˇsen´ı Vnitˇrn´ı struktura a vyuˇ zit´ı z´ akladn´ıch perif´ eri´ı Vstupnˇ e/v´ ystupn´ı port Pˇr´ım´ e pˇripojen´ı, maticov´ e, pomoc´ı pomocn´ ych obvod˚ u ˇ Casovaˇ c/ˇ c´ıtaˇ c Uk´ azka programu v JSA a v jazyce C pro ATmega16 Obsluha pˇreruˇsen´ı
Typy adresov´ an´ı I
I
Proces adresov´ an´ı zpˇr´ıstupˇ nuje data z programov´ e a datov´ e pamˇ eti, pˇr´ıp. ze I/O jednotky. Terminologie: I I
I
pˇr´ım´ e adresov´ an´ı – adresa je souˇ c´ ast´ı instrukce. Pˇr´ımo lze adresovat pracovn´ı registry, ˇr´ıdic´ı (I/O) registry, datovou i programovou pamˇ et’, nepˇr´ım´ e adresov´ an´ı – adresa nen´ı souˇ c´ ast´ı instrukce. Adresa je uloˇzena v nˇ ekter´ em z ukazatel˚ u. Vyuˇz´ıv´ a se k opakovan´ emu pˇr´ıstupu k jedn´ e nebo k posloupnosti nˇ ekolika pamˇ et’ov´ ych bunˇ ek.
Mikroprocesorov´ e syst´ emy umoˇzn ˇuj´ı celou ˇradu zp˚ usob˚ u adresov´ an´ı operand˚ u. Z´ akladn´ı zp˚ usoby jsou: (1) registrov´ e adresov´ an´ı: zdrojem informace (operand) je registr(y). Napˇr.: MOV Rd, Rr. Obecné pracovní registry
15
10 9 8
OP kód
r
4 3
Rd
0
Rr
R0 R1
R25 R26 (XL) R27 (XH) R28 (YL) R29 (YH) R30 (ZL) R31 (ZH)
0x00
Obecné pracovní registry 15
9 8
OP kód
4 3
Rd
0
OP
0x1F
Obr´ azek: Adresov´ an´ı dvou (ADD Rd, Rr) a jednoho (DEC Rd) registru.
R0 R1
R25 R26 (XL) R27 (XH) R28 (YL) R29 (YH) R30 (ZL) R31 (ZH)
0x00
0x1F
Typy adresov´ an´ı, pokraˇ cov´ an´ı I
Z´ akladn´ı zp˚ usoby adresov´ an´ı, pokraˇ cov´ an´ı: (2) pˇr´ım´ e adresov´ an´ı: operandy jsou pˇr´ımo urˇ ceny konkr´ etn´ı adresou. Napˇr.: CALL k, (3) nepˇr´ım´ e adresov´ an´ı: adresa operandu je uloˇzena v tzv. ukazateli, napˇr. registrov´ y p´ ar X, Y nebo Z (X – R26:R27; Y – R28:R29; Z – R30:R31). Napˇr. instrukce: IJMP, ST X, Rr. Obecné pracovní registry 15
12 11
OP
8 7
K
4 3
Rd
0
K
R0 R1
R25 R26 (XL) R27 (XH) R28 (YL) R29 (YH) R30 (ZL) R31 (ZH)
0x00
0x1F
Obr´ azek: Bezprostˇredn´ı adresov´ an´ı 8bitov´ e konstanty (LDI Rd, K).
I
Z´ akladn´ı zp˚ usoby adresov´ an´ı, dokonˇ cen´ı: (4) bezprostˇredn´ı adresov´ an´ı: hodnota operandu je pˇr´ımo obsaˇzena v instrukci. Napˇr.: LDI Rd, K.
I
V´ıcebitov´ e procesory (DSP, . . .) obsahuj´ı dalˇs´ı typick´ e zp˚ usoby adresov´ an´ı operand˚ u. R˚ uzn´ e zp˚ usoby adresov´ an´ı zvyˇsuj´ı moˇznosti mikroprocesor˚ u.
Obsah pˇredn´ aˇsky
Typy adresov´ an´ı Registrov´ e, pˇr´ım´ e, nepˇr´ım´ e, bezprostˇredn´ı Vˇ etven´ı programu Programov´ yˇ c´ıtaˇ c Vol´ an´ı podprogramu, z´ asobn´ık Obsluha pˇreruˇsen´ı Extern´ı poˇzadavek na pˇreruˇsen´ı Vnitˇrn´ı struktura a vyuˇ zit´ı z´ akladn´ıch perif´ eri´ı Vstupnˇ e/v´ ystupn´ı port Pˇr´ım´ e pˇripojen´ı, maticov´ e, pomoc´ı pomocn´ ych obvod˚ u ˇ Casovaˇ c/ˇ c´ıtaˇ c Uk´ azka programu v JSA a v jazyce C pro ATmega16 Obsluha pˇreruˇsen´ı
Vˇ etven´ı programu
program. pamˇet’
datov´ a pamˇet’
program. ˇc´ıtaˇc
kontroln´ı registry
ukazatel na z´ asobn´ık
R0
adresn´ı sbˇernice, 16 bit˚ u
instrukˇcn´ı dekod´er ˇr´ıdic´ı sign´ aly
datov´ a sbˇernice, 8 bit˚ u
instrukˇcn´ı registr
R1
I
Podle von Neumannovy koncepce procesoru jsou instrukce vykon´ av´ any sekvenˇ cnˇ e, tj. tak jak jsou uloˇzeny v programov´ e pamˇ eti.
I
Adresu instrukce, kter´ a se bude vykon´ avat specifikuje programov´ yˇ c´ıtaˇ c (PC – Program Counter).
I
Pˇri startu syst´ emu je hodnota PC vynulov´ ana. D´ ale je zpravidla pouze inkrementov´ ana.
I
Pˇri podm´ınk´ ach, nepodm´ınˇ en´ ych skoc´ıch, vol´ an´ı podprogramu, obsluze pˇreruˇsen´ı doch´ az´ı ke skokov´ e zmˇ enˇ e hodnoty PC.
R31
ALU
stavov´y registr
Obr´ azek: Pozice programov´ eho ˇ c´ıtaˇ ce v j´ adˇre AVR.
Programov´ yˇ c´ıtaˇ c u AVR
15
14
13
−
−
−
PC7
PC6
7
6
12
11
10
9
8
PC12 PC11 PC10 PC9
PC8
PCH
PC5
PC4
PC3
PC2
PC1
PC0
PCL
5
4
3
2
1
0
Obr´ azek: Struktura programov´ eho ˇ c´ıtaˇ ce v AVR – registrov´ y p´ ar PCH:L.
I
Program Counter (PC) je u ATmega16 13bitov´ y (PC12:PC0), tj. m˚ uˇze adresovat celkem 213 =8 k slov (instrukc´ı).
I
PC je ukazatel na m´ısto v programov´ e pamˇ eti, tj. obsahuje adresu pr´ avˇ e vykon´ avan´ e instrukce.
I
K hodnot´ am PC nelze pˇr´ımo pˇristupovat (ˇ c´ıst, zapisovat), protoˇze tento ˇ c´ıtaˇ c nelze adresovat!! Zmˇ enu hodnoty prov´ ad´ıme pouze nepˇr´ımo vykonan´ ymi instrukcemi.
Podm´ınˇ en´ e skoky v programu I
Podm´ınˇ en´ y skok je reakc´ı na vyhodnocen´ı podm´ınky – TRUE/FALSE.
I
JSA umoˇzn ˇuje vyuˇzit´ı jen jednoduch´ ych podm´ınek. Dvˇ e kategorie instrukc´ı podm´ınˇ en´ ych skok˚ u:
I
Obr´ azek: Obecn´ a podm´ınka.
(1) pˇreskoˇ c n´ asleduj´ıc´ı instrukci (anglicky: Skip if . . .), CPSE Rd, Rr – pˇreskoˇ c, je-li Rd=Rr (ComPare, Skip if Equal), SBIC P, b – pˇreskoˇ c, je-li bit ”b” v I/O registru ”P” nulov´ y (Skip if Bit Is Cleared), SBIS P, b – pˇreskoˇ c, je-li bit ”b” v I/O registru ”P” nastaven (Skip if Bit Is Set), ...
(2) Skoˇ c na n´ avˇ eˇst´ı (anglicky: Branch if . . .); houfnˇ e se k tomu vyuˇz´ıvaj´ı pˇr´ıznakov´ e bity ze stavov´ eho registru, BREQ k – skoˇ c na n´ avˇ eˇst´ı ”k”, je-li Z=1 (BRench if EQual), BRNE k – skoˇ c na ”k”, je-li Z=0 (BRench if Not Equal), BRVS k – skoˇ c na ”k”, je-li V=1 (BRench if V is Set), V-overflow, BRVC k – skoˇ c na ”k”, je-li V=0 (BRench if V is Cleared), BRIE k – skoˇ c na ”k”, je-li I=1 (BRench if I is Enable), I-interrupt, BRID k – skoˇ c na ”k”, je-li I=0 (BRench if I is Disable), ...
Nepodm´ınˇ en´ e skoky v programu
I
I
Instrukce pro nepodm´ınˇ en´ e skoky pˇr´ımo zmˇ en´ı hodnotu v programov´ em ˇ c´ıtaˇ ci (PC) a t´ım se realizuje skok v programu. (Nen´ı uvaˇzov´ ana ˇz´ adna podm´ınka). Troj´ı typ instrukc´ı pro nepodm´ınˇ en´ y skok u AVR: (1) relativn´ı skok – RJMP k (Relative JuMP). Pozn.: M˚ uˇze skoˇ cit na adresu v rozsahu −2K ≤ k ≥ 2K (⇒ instrukce je 16bitov´ a, protoˇze obsahuje 12bitovou adresu), (2) nepˇr´ım´ y skok – IJMP (Indirect JuMP) – nepˇr´ım´ y skok na adresu v registrov´ em p´ aru ”Z”. Tj. registrov´ y p´ ar R31:30 je v tomto pˇr´ıpadˇ e zdrojem adresy, (3) pˇr´ım´ y skok – JMP k (direct JuMP). Pozn.: M˚ uˇze skoˇ cit na adresu v rozsahu 0 ≤ k ≥ 4M (⇒ instrukce je 32bitov´ a, protoˇze obsahuje 22bitovou adresu; plat´ı pro syst´ emy s 22bitov´ ym PC).
Ot´ azka Jak´ y je rozd´ıl mezi instrukcemi RJMP a JMP? (Obsazenost pamˇ eti, rychlost v´ ykonu.)
V´ yznam podprogramu, vol´ an´ı podprogramu
I
I
Podprogram je ˇ c´ ast k´ odu, kter´ a se ˇ casto opakuje; do strojov´ eho jazyka se pˇreloˇz´ı jen jednou. Spouˇst´ı se zaps´ an´ım adresy prvn´ı instrukce do programov´ eho ˇ c´ıtaˇ ce, tj. ”sk´ aˇ ce” se na nˇ ej. Troj´ı typ instrukc´ı pro vol´ an´ı podprogramu u AVR: (1) relativn´ı vol´ an´ı – RCALL k (Relative subroutine CALL). Pozn.: M˚ uˇze skoˇ cit na adresu v rozsahu −2K ≤ k ≥ 2K (⇒ instrukce je 16bitov´ a, protoˇze obsahuje 12bitovou adresu), (2) nepˇr´ım´ e vol´ an´ı – ICALL (Indirect CALL) – nepˇr´ım´ e vol´ an´ı podprogramu; adresa vˇzdy uloˇzena v ukazateli ”Z”, (3) pˇr´ım´ e vol´ an´ı – CALL k (direct subroutine CALL). Pozn.: M˚ uˇze skoˇ cit na adresu v rozsahu 0 ≤ k ≥ 4M (⇒ instrukce je 32bitov´ a, protoˇze obsahuje 22bitovou adresu; plat´ı pro syst´ emy s 22bitov´ ym PC).
I
Na rozd´ıl od (ne)podm´ınˇ en´ eho skoku dojde po ukonˇ cen´ı podprogramu k n´ avrat na instrukci n´ asleduj´ıc´ı po skoku do podprogramu!
Ot´ azka Jak ˇr´ıdic´ı jednotka pozn´ a, kam se vr´ atit??
Funkce z´ asobn´ıku k uloˇ zen´ı n´ avratov´ e adresy
Obr´ azek: Vnoˇren´ e vol´ an´ı dvou podprogram˚ u.
I
N´ avratov´ a adresa mus´ı b´ yt uloˇzena pˇred skokem do podprogramu do tzv. z´ asobn´ıku (anglicky: Stack). N´ avratov´ a adresa je adresa instrukce n´ asleduj´ıc´ı po instrukci volaj´ıc´ı podprogram.
I
N´ avrat z podprogramu (vyzvednut´ı n´ avratov´ e adresy ze z´ asobn´ıku a jej´ı zaps´ an´ı do PC) zajiˇst’uje instrukce RET (subroutine RETurn).
Z´ asobn´ık, ukazatel na z´ asobn´ık
I
I
Z´ asobn´ık je ˇ c´ ast pamˇ eti SRAM (m˚ uˇze t´ eˇz slouˇzit k z´ alohov´ an´ı obsahu pracovn´ıch registr˚ u). Mikrokontrol´ ery, kter´ e nemaj´ı intern´ı pamˇ et’ RAM maj´ı hardwarov´ y z´ asobn´ık s omezenou velikost´ı (napˇr. tˇri pozice u ATtiny11). Zapisovat/ˇ c´ıst lze ze z´ asobn´ıku pouze do/z jedin´ e pozice. Tu ud´ av´ a tzv. ukazatel na z´ asobn´ık (anglicky: SP – Stack Pointer). I
Ukazatel je 16bitov´ a hodnota uloˇzen´ a v registrov´ em p´ aru SPH:SPL. (Patˇr´ı mezi I/O registry.) 15
14
13
12
11
10
9
8
SP15 SP14 SP13 SP12 SP11 SP10
SP9
SP8
SPH
SP7
SP6
SP5
SP4
SP3
SP2
SP1
SP0
SPL
7
6
5
4
3
2
1
0
Obr´ azek: Struktura ukazatele na z´ asobn´ık u AVR – registrov´ y p´ ar SPH:L.
Ukazatel na z´ asobn´ık
program. pamˇet’
datov´ a pamˇet’
program. ˇc´ıtaˇc
kontroln´ı registry
ukazatel na z´ asobn´ık
R0
adresn´ı sbˇernice, 16 bit˚ u
instrukˇcn´ı dekod´er ˇr´ıdic´ı sign´ aly
datov´ a sbˇernice, 8 bit˚ u
instrukˇcn´ı registr
R1
R31
ALU
stavov´y registr
Obr´ azek: Pozice ukazatele na z´ asobn´ık v j´ adˇre AVR.
Ukazatel na z´ asobn´ık
I
I
I
1 2 3 4 5
Hodnota ukazatele na z´ asobn´ık mus´ı b´ yt inicializov´ ana (tzv. definice z´ asobn´ıku). Definice se prov´ ad´ı jedenkr´ at a to hned na zaˇ c´ atku programu. Ukazatel se napln´ı adresou posledn´ı pamˇ et’ov´ e buˇ nky pamˇ et’ov´ eho segmentu urˇ cen´ eho pro z´ asobn´ık (z´ asobn´ık se z d˚ uvodu eliminace nechtˇ en´ eho pˇreps´ an´ı dat um´ıst’uje na konec pamˇ eti RAM). (Konstanta RAMEND obsahuje adresu posledn´ı buˇ nky pamˇ eti SRAM – je definov´ ana v souboru *.inc.)
s t a c k _ d e f inition : LDI R16 , LOW ( RAMEND ) OUT SPL , R16 LDI R16 , HIGH ( RAMEND ) OUT SPH , R16
Ot´ azka Co je to RAMEND?
; ; ; ; ;
definice z´ a sobn´ ı ku na konec pamˇ e ti SRAM do R16 uloˇ z niˇ zˇ s´ ı byte posledn´ ı adresy SRAM SPL ( niˇ zˇ s´ ı byte Stack Pointeru ) = R16 R16 = vyˇ sˇ s´ ı byte posledn´ ı adresy SRAM SPH ( vyˇ sˇ s´ ı byte Stack Pointeru ) = R16
ˇ ast v´ C´ ypisu definiˇ cn´ıho souboru m16def.inc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
; ***** S p e c i f y D e v i c e .device ATmega16 ; ***** I /O R e g i s t e r D e f i n i t i o n s .equ SREG =$ 3f .equ SPH =$ 3e .equ SPL =$ 3d .equ OCR0 =$ 3c .equ GICR =$ 3b ; New name f o r GIMSK ... ; ***** B i t D e f i n i t i o n s ; GIMSK .equ .equ .equ .equ .equ ... .equ ...
/ GICR INT1 INT0 INT2 IVSEL IVCE
=7 =6 =5 =1 =0
RAMEND =$ 45F
Proces z´ apisu do z´ asobn´ıku
I
I
Z´ asobn´ık funguje jako LIFO syst´ em (Last In First Out – posledn´ı zaps´ an, prvn´ı ˇ cten). F´ aze z´ apisu 16bitov´ e adresy do 8bitov´ eho z´ asobn´ıku: (1) (2) (3) (4)
uloˇzen´ı niˇzˇs´ıho bytu adresy na pozici adresovanou SP, SP = SP - 1 (SP tak obsahuje adresu voln´ eho bytu, kam je moˇzn´ e d´ ale zapisovat), uloˇzen´ı vyˇsˇs´ıho bytu adresy na pozici adresovanou SP, SP = SP - 1 (po ukonˇ cen´ı procesu tedy SP vˇzdy obsahuje adresu voln´ eho bytu v z´ asobn´ıku).
Pˇr´ıklad Jak´ a data obsahuje z´ asobn´ık po vol´ an´ı dvou vnoˇren´ ych podprogram˚ u? Necht’ byly vol´ any z adres 0x0021 a 0x0028 instrukc´ı RCALL.
Proces ˇ cten´ı ze z´ asobn´ıku
I
F´ aze ˇ cten´ı adresy ze z´ asobn´ıku: (1) SP = SP + 1 (ukazatel tak obsahuje adresu posledn´ıho bytu uloˇzen´ eho v z´ asobn´ıku), (2) adresovan´ y vyˇsˇs´ı byte n´ avratov´ e adresy je pˇresunut do PC (nutnost maskov´ an´ı 3 nejv´ yznamnˇ ejˇs´ıch bit˚ u, protoˇze PC je pouze 13bitov´ y), (3) SP = SP + 1 (ukazatel adresuje pˇredposledn´ı uloˇzen´ e slovo), (4) adresovan´ y niˇzˇs´ı byte n´ avratov´ e adresy je pˇresunut do PC.
I
Uloˇzen´ e adresy ve Stacku z˚ ust´ avaj´ı, ale pˇri n´ asledn´ em vol´ an´ı podprogramu se pˇrep´ıˇs´ı nov´ ymi daty.
Pˇr´ıklad Jak´ a data obsahuje ukazatel na z´ asobn´ık a programov´ yˇ c´ıtaˇ c po n´ avratu ze dvou vnoˇren´ ych podprogram˚ u?
Z´ aloha pracovn´ıch registr˚ u do z´ asobn´ıku; instrukce PUSH, POP
I
Kromˇ e z´ alohy n´ avratov´ e adresy pˇri vol´ an´ı podprogramu, nebo pˇreruˇsen´ı, lze z´ asobn´ık vyuˇz´ıt tak´ e jako doˇ casn´ e odkladiˇstˇ e obsahu pracovn´ıch registr˚ u.
I
Pouˇzit´ı napˇr. pˇri vol´ an´ı podprogramu – z´ aloha potˇrebn´ ych reg.; na konci podprogramu hodnoty znovu naˇ c´ıst ze z´ asobn´ıku. F´ aze uloˇzen´ı obsahu 8bitov´ eho registru do z´ asobn´ıku – PUSH Rr, kde r = 0, 1, . . . , 31:
I
(1) uloˇzen´ı obsahu registru Rr na adresu definovanou SP, (2) SP = SP - 1. I
F´ aze naˇ cten´ı 8bitov´ e hodnoty ze z´ asobn´ıku do registru – POP Rd, kde d = 0, 1, . . . , 31: (1) SP = SP + 1, (2) naˇ cten´ı slova z adresy SP do registru Rd.
I
Instrukce pro z´ alohu registr˚ u maj´ı vˇsechny mikrokontrol´ ery (mohou m´ıt jinou syntaxi, ˇ ci omezen´ y poˇ cet vyuˇziteln´ ych reg.).
Rozd´ıl mezi podprogramem a makrem
Pˇr´ıklad Jak´ e jsou z´ akladn´ı rozd´ıly mezi podprogramem a makrem?
Obsah pˇredn´ aˇsky
Typy adresov´ an´ı Registrov´ e, pˇr´ım´ e, nepˇr´ım´ e, bezprostˇredn´ı Vˇ etven´ı programu Programov´ yˇ c´ıtaˇ c Vol´ an´ı podprogramu, z´ asobn´ık Obsluha pˇreruˇsen´ı Extern´ı poˇzadavek na pˇreruˇsen´ı Vnitˇrn´ı struktura a vyuˇ zit´ı z´ akladn´ıch perif´ eri´ı Vstupnˇ e/v´ ystupn´ı port Pˇr´ım´ e pˇripojen´ı, maticov´ e, pomoc´ı pomocn´ ych obvod˚ u ˇ Casovaˇ c/ˇ c´ıtaˇ c Uk´ azka programu v JSA a v jazyce C pro ATmega16 Obsluha pˇreruˇsen´ı
Obsluha pˇreruˇsen´ı
I
Bˇ eh programu (hodnota PC) je tak´ e ovlivniteln´ y pomoc´ı tzv. pˇreruˇsen´ı (anglicky: Interrupt).
I
V pˇr´ıpadˇ e, ˇze mikroprocesor obdrˇz´ı ˇz´ adost o obsluhu povolen´ eho pˇreruˇsen´ı, mus´ı pˇreruˇsit vykon´ avanou ˇ cinnost (hlavn´ı program) a spustit obsluˇzn´ y program, kter´ y je urˇ cen v´ yhradnˇ e pro zdroj pˇreruˇsen´ı.
I
Kaˇzd´ y procesor obsahuje sadu moˇzn´ ych pˇreruˇsen´ı intern´ıch i extern´ıch; zdroje pˇreruˇsen´ı z´ avis´ı na hardwarov´ em vybaven´ı MCU.
I
Obsluha kaˇzd´ eho pˇreruˇsen´ı je ovl´ ad´ ana tzv. vektorem pˇreruˇsen´ı v programov´ e pamˇ eti; jedn´ a se o adresu od kter´ e se zaˇ cne vykon´ avat konkr´ etn´ı obsluha.
I
Kaˇzd´ e pˇreruˇsen´ı m´ a sv˚ uj povolovac´ı bit; nav´ıc existuje jeden glob´ aln´ı povolovac´ı bit (u AVR je to bit I ve stavov´ em registru).
I
Jednotliv´ e pˇreruˇsen´ı maj´ı r˚ uznou prioritu; niˇzˇs´ı adresa ⇔ vyˇsˇs´ı priorita (viz dalˇs´ı slajd).
Vektory pˇreruˇsen´ı mikrokontrol´ eru ATmega16 ˇ C.
Adresa
Zdroj pˇreruˇsen´ı
Popis pˇreruˇsen´ı
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0x0000 0x0002 0x0004 0x0006 0x0008 0x000A 0x000C 0x000E 0x0010 0x0012 0x0014 0x0016 0x0018 0x001A 0x001C 0x001E 0x0020 0x0022 0x0024 0x0026 0x0028
RESET INT0 INT1 TIMER2 COMP TIMER2 OVF TIMER1 CAPT TIMER1 COMPA TIMER1 COMPB TIMER1 OVF TIMER0 OVF SPI, STC USART, RXC USART, UDRE USART, TXC ADC EE RDY ANA COMP TWI INT2 TIMER0 COMP SPM RDY
Extern´ı reset, pˇripojen´ı nap´ ajen´ı. Extern´ı poˇzadavek na pˇreruˇsen´ı 0. Extern´ı poˇzadavek na pˇreruˇsen´ı 1. ˇ Casovaˇ c/ˇ c´ıtaˇ c 2 – shoda komparace. ˇ Casovaˇ c/ˇ c´ıtaˇ c 2 – pˇreteˇ cen´ı. ˇ Casovaˇ c/ˇ c´ıtaˇ c 1 – zachycen´ı. ˇ Casovaˇ c/ˇ c´ıtaˇ c 1 – shoda s kompar´ atorem A. ˇ Casovaˇ c/ˇ c´ıtaˇ c 1 – shoda s kompar´ atorem B. ˇ Casovaˇ c/ˇ c´ıtaˇ c 1 – pˇreteˇ cen´ı. ˇ Casovaˇ c/ˇ c´ıtaˇ c 0 – pˇreteˇ cen´ı. Dokonˇ cen´ı s´ eriov´ eho pˇrenosu SPI. USART – kompletn´ı pˇr´ıjem dat. USART – pr´ azdn´ y datov´ y registr. USART – kompletn´ı vysl´ an´ı dat. ADC – dokonˇ cen´ı A/D pˇrevodu. EEPROM – komunikace pˇripravena. Zmˇ ena v´ ystupu analogov´ eho kompar´ atoru. Ud´ alost na s´ eriov´ e sbˇ ernici I2C. Extern´ı poˇzadavek na pˇreruˇsen´ı 2. ˇ Casovaˇ c/ˇ c´ıtaˇ c 0 – shoda komparace. Uloˇzen´ı do programov´ e pamˇ eti pˇripraveno.
Vektory pˇreruˇsen´ı mikrokontrol´ eru ATtiny11
ˇ C.
Adresa
Zdroj pˇreruˇsen´ı
Popis pˇreruˇsen´ı
1 2 3 4 5
0x000 0x001 0x002 0x003 0x004
RESET INT0 I/O piny TIMER0 OVF ANA COMP
Extern´ı reset, pˇripojen´ı nap´ ajen´ı. Extern´ı poˇzadavek na pˇreruˇsen´ı 0. Zmˇ ena stavu I/O pinu. ˇ Casovaˇ c/ˇ c´ıtaˇ c 0 – pˇreteˇ cen´ı Zmˇ ena v´ ystupu analogov´ eho kompar´ atoru.
U ATmega16 je mezi jednotliv´ ymi vektory pˇreruˇsen´ı voln´ ych 32 bit˚ u (tj. dvˇ e pamˇ et’ov´ e pozice). U ATtiny11 jen 16 bit˚ u ⇒ pro samotnou obsluhu to nestaˇ c´ı. Pozn.: ATtiny11 neobsahuje datovou pamˇ et’, proto nen´ı moˇzn´ e definovat softwarov´ y z´ asobn´ık pro uloˇzen´ı n´ avratov´ ych adres. Obsahuje ale hardwarov´ y z´ asobn´ık, schopn´ y uchov´ an´ı 3 adres (ukazatel na z´ asobn´ık je 9bitov´ y @ 1kB Flash). I
Ot´ azka Proˇ c vektory pˇreruˇsen´ı u ATmega obsahuj´ı dvˇ e adresov´ e pozice a u ATtiny jen jednu?
Obsluha pˇreruˇsen´ı
I
Jednotliv´ e f´ aze obsluhy pˇreruˇsen´ı: (1) dokonˇ c´ı se v´ ykon pr´ avˇ e vykon´ avan´ e instrukce, (2) zak´ aˇze se obsluha pˇr´ıpadn´ ych n´ asleduj´ıc´ıch pˇreruˇsen´ı, (3) do z´ asobn´ıku se uloˇz´ı adresa n´ asleduj´ıc´ı instrukce v programov´ e pamˇ eti (z´ asobn´ık mus´ı b´ yt definov´ an), (4) podle zdroje pˇreruˇsen´ı se do PC naˇ cte vektor pˇreruˇsen´ı (napˇr.: PC=0x0002 pro INT0 u ATmega16), (5) vykon´ a se obsluha pˇreruˇsen´ı, tj. konkr´ etn´ı posloupnost instrukc´ı; do oblasti vektor˚ u pˇreruˇsen´ı se bˇ eˇznˇ e um´ıst’uj´ı pouze skoky na obsluˇznou funkci, (6) obsluha pˇreruˇsen´ı se ukonˇ c´ı instrukc´ı RETI (RETurn Interrupt); analogie s ukonˇ cen´ım podprogramu, (7) povol´ı se obsluha dalˇs´ıch pˇreruˇsen´ı, (8) do PC se naˇ cte uloˇzen´ a n´ avratov´ a adresa ze z´ asobn´ıku, (9) pokraˇ cuje se ve v´ ykonu hlavn´ıho programu.
Pˇr´ıklad obsluhy pˇreruˇsen´ı – extern´ı zdroj pˇreruˇsen´ı
Obr´ azek: Zdroje extern´ıho pˇreruˇsen´ı u mikrokontrol´ eru ATmega16.
Pˇr´ıklad obsluhy pˇreruˇsen´ı – extern´ı zdroj pˇreruˇsen´ı
I
Pˇreruˇsen´ı se vykon´ a (obslouˇz´ı) v pˇr´ıpadˇ e ˇze: (1) je povoleno konkr´ etn´ı pˇreruˇsen´ı, (2) je povoleno glob´ aln´ı pˇreruˇsen´ı (tj. bit I=1 v registru SREG). 7
6
5
4
3
2
1
0
I
T
H
S
V
N
Z
C
SREG
Obr´ azek: Struktura stavov´ eho registru SREG (Status Register). I
Pˇr´ıklad povolen´ı extern´ıho pˇreruˇsen´ı (External Interrupt) u AVR: I I I
ˇr´ıdic´ı registr GICR (General Interrupt Control Register) obsahuje povolovac´ı bity INT1, INT0, INT2 pro extern´ı zdroj pˇreruˇsen´ı 1, 0 a 2, pro povolen´ı je nutn´ e nastavit pˇr´ısluˇsn´ y(´ e) bit(y) na 1, povolit glob´ aln´ı pˇreruˇsen´ı v registru SREG instrukc´ı SEI (SEt Interrupt).
I
Konkr´ etn´ı nastaven´ı (n´ abˇ eˇzn´ a hrana, sestupn´ a, . . .) lze definovat v registru MCUCR (MCU Control Register).
I
Poˇzadavek na pˇreruˇsen´ı je pro CPU signalizov´ an pˇr´ıznakov´ ym bitem v registru GIFR (General Interrupt Flag Register).
ˇ ıdic´ı registry extern´ıho zdroje pˇreruˇsen´ı R´ 7
6
5
4
3
2
1
0
INT1
INT0
INT2
−
−
−
IVSEL
IVCE
GICR
Obr´ azek: Struktura ˇr´ıdic´ıho registru GICR (General Interrupt Control Register).
7
6
5
4
3
2
1
0
SM2
SE
SM1
SM0
ISC11
ISC10
ISC01
ISC00
MCUCR
Obr´ azek: Struktura ˇr´ıdic´ıho registru MCUCR (MCU Control Register).
7
6
5
4
3
2
1
0
INTF1
INTF0
INTF2
−
−
−
−
−
Obr´ azek: Struktura ˇr´ıdic´ıho registru GIFR (General Interrupt Flag Register).
GIFR
Moˇ znosti nastaven´ı extern´ıho pˇreruˇsen´ı Tabulka: Zp˚ usob spouˇstˇ en´ı extern´ıch poˇzadavk˚ u na pˇreruˇsen´ı INTn prostˇrednictv´ım kontroln´ıho registru MCUCR.
ISCn1:0 0b00 0b01 0b10 0b11
Popis funkce N´ızk´ au ´roveˇ n (log. 0) na pinu INTn generuje poˇzadavek. Jak´ akoliv zmˇ ena logick´ eu ´rovnˇ e na pinu INTn generuje poˇzadavek. Sestupn´ a hrana na pinu INTn generuje poˇzadavek. Vzestupn´ a hrana na pinu INTn generuje poˇzadavek.
Pˇr´ıklad Jakou hodnotu bude obsahovat registr MCUCR, poˇzadujeme-li generov´ an´ı extern´ıho pˇreruˇsen´ı INT1 pˇri pˇrechodu vstupn´ıho sign´ alu z vysok´ e do n´ızk´ eu ´rovnˇ e?
7
6
5
4
3
2
1
0
SM2
SE
SM1
SM0
ISC11
ISC10
ISC01
ISC00
Obr´ azek: Struktura ˇr´ıdic´ıho registru MCUCR (MCU Control Register).
MCUCR
Obsah pˇredn´ aˇsky
Typy adresov´ an´ı Registrov´ e, pˇr´ım´ e, nepˇr´ım´ e, bezprostˇredn´ı Vˇ etven´ı programu Programov´ yˇ c´ıtaˇ c Vol´ an´ı podprogramu, z´ asobn´ık Obsluha pˇreruˇsen´ı Extern´ı poˇzadavek na pˇreruˇsen´ı Vnitˇrn´ı struktura a vyuˇ zit´ı z´ akladn´ıch perif´ eri´ı Vstupnˇ e/v´ ystupn´ı port Pˇr´ım´ e pˇripojen´ı, maticov´ e, pomoc´ı pomocn´ ych obvod˚ u ˇ Casovaˇ c/ˇ c´ıtaˇ c Uk´ azka programu v JSA a v jazyce C pro ATmega16 Obsluha pˇreruˇsen´ı
I/O (paraleln´ı) port I
I I
I
I/O port obsahuje vstupnˇ e/v´ ystupn´ı piny, kter´ e zajiˇst’uj´ı komunikaci s extern´ım ”svˇ etem”. Jsou to nejvˇsestrannˇ ejˇs´ı I/O zaˇr´ızen´ı mikrokontrol´ eru. Poˇ cty pin˚ u koresponduj´ı s pouˇzit´ım mikrokontrol´ eru: 4 I/O piny (RS08KA, Freescale), 6 I/O pin˚ u (ATtiny12, Atmel), 32 I/O pin˚ u (ATmega16, Atmel), 48 I/O pin˚ u (ATmega103, Atmel), . . . U mikrokontrol´ er˚ u AVR jsou ke kaˇzd´ emu obousmˇ ern´ emu I/O portu asociov´ any 3 I/O (ˇr´ıdic´ı) registry: I I I
smˇ erov´ y registr DDRx (Data Direction Register), datov´ y (v´ ystupn´ı) registr PORTx (Data Register), vstupn´ı piny PINx (Port Input Pins),
Obr´ azek: Sch´ ematick´ a znaˇ cka mikrokontrol´ eru ATmega16.
ˇ ıdic´ı registry I/O port˚ R´ u
ˇ ıdic´ı registry I/O port˚ Obr´ azek: R´ u mikrokontrol´ er˚ u AVR.
Ovl´ ad´ an´ı I/O portu I
Smˇ erov´ y I/O registr DDRxn (x=A,B,C,D; n=0,1,. . .,7): I I I
hodnota 0 ↔ pin je definov´ an jako vstupn´ı, hodnota 1 ↔ pin je definov´ an jako v´ ystupn´ı, v kaˇzd´ em I/O portu je moˇzn´ e libovolnˇ e kombinovat vstupn´ı/v´ ystupn´ı piny. Smˇ er komunikace pinu lze bezprostˇrednˇ e mˇ enit bez ohledu na ostatn´ı. 7
6
5
4
3
2
1
0
DDC7
DDC6
DDC5
DDC4
DDC3
DDC2
DDC1
DDC0
Obr´ azek: Struktura smˇ erov´ eho registru DDRC (Port C Data Direction Register). I
V´ ystupn´ı I/O registr PORTxn : I I
v pˇr´ıpadˇ e definovan´ eho v´ ystupn´ıho pinu, ud´ av´ a hodnota bitu v registru logickou u ´roveˇ n na pinu. Hodnota 1 (DDRxn=1) ↔ pin je na vysok´ eu ´rovni, apod., v pˇr´ıpadˇ e vstupn´ıho pinu, ud´ av´ a hodnota bitu v registru aktivaci/deaktivaci pull-up rezistoru. Tabulka: Definice vstupnˇ e/v´ ystupn´ıho portu.
DDRxn
PORTxn
I/O
0 0 1 1
0 1 0 1
Vstupn´ı Vstupn´ı V´ ystupn´ı V´ ystupn´ı
Popis funkce Vysok´ a impedance. Aktivace pull-up rezistoru. N´ızk´ au ´roveˇ n. Vysok´ au ´roveˇ n.
DDR
Ovl´ ad´ an´ı I/O portu, pokraˇ cov´ an´ı
I
Vstupn´ı I/O registr PINxn : I I
hodnota 0 nebo 1 koresponduj´ıc´ı s u ´rovn´ı sign´ alu na vstupu, kop´ıruj´ı se zde tak´ e data zapsan´ a do v´ ystupn´ıho registru PORTxn !
I
Kaˇzd´ y pin obsahuje pˇrepˇ et’ovou ochranu (omezuj´ıc´ı diody) a moˇznost pˇripojen´ı pull-up rezistoru.
I
Vˇ etˇsina I/O pin˚ u umoˇzn ˇuje kromˇ e klasick´ e I/O komunikace tak´ e alternativn´ı funkci. Konkr´ etn´ı piny jsou tak vyuˇz´ıv´ any intern´ımi perif´ eriemi MCU. Tabulka: Nˇ ekter´ e alternativn´ı funkce I/O pin˚ u.
Pin
Alternativa
PA7:0 PB7:4 PC5:2 PC1:0 PD2 PD1:0
ADC SPI JTAG TWI INT0 USART
Popis funkce Vstup 10bitov´ eho A/D pˇrevodn´ıku, tj. 8 kan´ al˚ u. S´ eriov´ a komunikace pomoc´ı SPI. Programovac´ı/ladic´ı rozhran´ı JTAG. Dvouvodiˇ cov´ a s´ eriov´ a sbˇ ernice I2C. Zdroj extern´ıho pˇreruˇsen´ı 0. Vstup/v´ ystup s´ eriov´ e komunikace USART.
Alternativn´ı funkce I/O pin˚ u
Obr´ azek: Alternativn´ı funkce u mikrokontrol´ eru ATmega16.
Zapojen´ı jednoho I/O pinu Pouˇzit´e ˇr´ıdic´ı sign´ aly: DDA0
D
Q
WriteDA − z´ apis do registru DDRA
WriteDA
ReadDA
− ˇcten´ı obsahu registru DDRA
WriteRA − z´ apis do registru PORTA
ReadDA
ReadRA
− ˇcten´ı obsahu registru PORTA
ReadPA
− ˇcten´ı obsahu registru PINA
PA0 PORTA0
D
Q
WriteRA
ˇr´ıdic´ı sbˇernice
datov´ a sbˇernice
ReadRA
ReadPA Q
D
PINA0 clkI /O
Obr´ azek: Funkˇ cn´ı sch´ ema jednoho I/O pinu (nen´ı zakreslen pull-up, pˇrepˇ et’ov´ a ochrana, alternativn´ı funkce, synchronizace vstupu).
Zp˚ usoby nastaven´ı jednotliv´ ych I/O pin˚ u v JSA (1) Pomoc´ı kombinace instrukc´ı LDI (Load immediate) a OUT (Out port): 1 2 3 4 5 6 7 8 9 10 11 12 13
. include ... LDI OUT ... LDI OUT
... OUT
<m16def . inc>
; definiˇ c n´ ı soubor mikrokontrol´ e ru ATmega16
R16 , 0 b00011000 DDRB , R16
; R16 <− 24 ; definov´ a n´ ı v´ y stupn´ ı ch pin˚ u PB4 a PB3
R16 , (1<
; nastaven´ ı v´ y stupn´ ı ch hodnot portu B
(2) Pomoc´ı instrukc´ı SBI (Set bit in I/O register) a CBI (Clear bit in I/O register): 1 2 3 4 5 6
... SBI SBI CBI ... IN
DDRB , 0 x03 DDRB , 4 DDRB , 3
; definov´ a n´ ı v´ y stupn´ ı ho pinu PB3 ; definov´ a n´ ı v´ y stupn´ ı ho pinu PB4 ; definov´ a n´ ı vstupn´ ı ho pinu PB3
R16 , PINB
; naˇ c ten´ ı hodnot vstupn´ ı ho portu B
Zp˚ usoby nastaven´ı jednotliv´ ych I/O pin˚ u v jazyce C
1 2 3 4 5 6 7 8 9 10 11 12 13
#i n c l u d e
// h l a v i ˇ ckov´ y soubor mikrokontrol´ eru ... // d e f i n o v ´ a n´ı v ´ y s t u p n´ıc h p i n˚ u PB4 a PB3 DDRB = 0 b00011000 ; // j i n ´ y z p˚ usob d e f i n o v ´ a n´ı v ´ y s t u p n´ıc h p i n˚ u PB4 a PB3 DDRB |= (1<
Ot´ azka Jak v jazyce C zajistit opakovan´ e kop´ırov´ an´ı vstupn´ıch dat z portu A na v´ ystupn´ı port D?
Pˇripojen´ı extern´ıch perif´ eri´ı
I
Pˇripojen´ı extern´ıch perif´ eri´ı (tlaˇ c´ıtko, LED, kl´ avesnice, . . .) je obecnˇ e moˇzn´ e realizovat tˇremi zp˚ usoby: (1) pˇr´ım´ e pˇripojen´ı – jeden I/O pin je vyuˇzit k pˇripojen´ı jednoho jednoduch´ eho zaˇr´ızen´ı (tlaˇ c´ıtko, LED, . . .), (2) maticov´ e uspoˇr´ ad´ an´ı – nˇ ekolik jednoduch´ ych zaˇr´ızen´ı je uspoˇr´ ad´ ano do matice, coˇz sniˇzuje poˇ cet potˇrebn´ ych I/O pin˚ u (maticov´ a kl´ avesnice), (3) pomoc´ı pomocn´ ych obvod˚ u/ˇradiˇ c˚ u: extern´ı zaˇr´ızen´ı pracuje nez´ avisle na ˇr´ıdic´ım mikrokontrol´ eru. V pˇr´ıpadˇ e ud´ alosti generuje poˇzadavek na pˇreruˇsen´ı, kter´ e zajist´ı naˇ cten´ı/vysl´ an´ı potˇrebn´ ych dat.
Jednoduch´ e oˇsetˇren´ı z´ akmit˚ u mechanick´ eho tlaˇ c´ıtka
I
I
Pˇri sepnut´ı mechanick´ eho tlaˇ c´ıtka doch´ az´ı k z´ akmit˚ um (nechtˇ en´ e impulsy zp˚ usobuj´ıc´ı nekorektn´ı v´ ykon programu). Tyto z´ akmity je nutn´ e vˇzdy oˇsetˇrit! Moˇzn´ y zp˚ usob oˇsetˇren´ı: I I I
I
pˇri stisku i uvolnˇ en´ı tlaˇ c´ıtka je vol´ ana funkce realizuj´ıc´ı zpoˇzdˇ en´ı, po stisku se testuje, zda jiˇz bylo tlaˇ c´ıtko uvolnˇ eno, teprve pak se pokraˇ cuje ve v´ ykonu programu, ’ v r´ amci prvn´ı zpoˇzd ovac´ı smyˇ cky (tj. pˇri sepnut´ı) je moˇzn´ e realizovat ”p´ıpnut´ı reproduktoru”, apod. (P´ıpnut´ı je reprezentov´ ano vys´ıl´ an´ım obd´ eln´ıkov´ eho sign´ alu o urˇ cit´ e frekvenci), pˇri vyuˇzit´ı extern´ıho zdroje pˇreruˇsen´ı nen´ı nutn´ e testovat stav tlaˇ c´ıtka – pˇred koncem obsluhy vynulovat pˇr´ısluˇsn´ y pˇr´ıznakov´ y bit (viz reg. GIFR, poˇ c´ıtaˇ cov´ a cviˇ cen´ı).
Pˇr´ıklad Nakreslete v´ yvojov´ y diagram jednoduch´ eho oˇsetˇren´ı tlaˇ c´ıtka.
Pouˇ zit´ı maticov´ e kl´ avesnice I
Maticov´ a kl´ avesnice 4 × 4 vyuˇz´ıv´ a jeden I/O port: I I
I
Zjiˇstˇ en´ı stisknut´ e kl´ avesy se prov´ ad´ı tzv. skenov´ an´ım kl´ avesnice, kdy jsou ve ˇ ctyˇrech kroc´ıch vysl´ any hodnoty na v´ ystupn´ı piny: (1) (2) (3) (4)
I
4 piny jsou definov´ any jako vstupn´ı (napˇr. PB3–PB0), 4 piny jsou v´ ystupn´ı (napˇr. PB7–PB4).
PB7:4 PB7:4 PB7:4 PB7:4
= = = =
0b1110, 0b1101, 0b1011, 0b0111.
Po kaˇzd´ em kroku se skenuj´ı vstupn´ı piny. Pokud je nˇ ekter´ y roven 0, bylo stisknuto pˇr´ısluˇsn´ e tlaˇ c´ıtko.
Obr´ azek: Pˇripojen´ı maticov´ e kl´ avesnice k I/O portu mikrokontrol´ eru.
Pˇr´ıklad Nakreslete v´ yvojov´ y diagram skenov´ an´ı maticov´ e kl´ avesnice.
Funkce intern´ıho ˇ casovaˇ ce/ˇ c´ıtaˇ ce
I
I
Kaˇzd´ y mikrokontrol´ er obsahuje perif´ erii umoˇzn ˇuj´ıc´ı odeˇ c´ıtat ˇ cas (ˇ casovaˇ c, anglicky: Timer), pˇr´ıp. naˇ c´ıtat vstupn´ı pulsy (ˇ c´ıtaˇ c, anglicky: Counter). Toho lze vyuˇz´ıt k jednoduch´ ym aplikac´ım: I I I
mˇ eˇren´ı kr´ atk´ ych interval˚ u, periodick´ e spouˇstˇ en´ı funkce, konstrukce jednoduch´ ych frekvenˇ cn´ıch ˇ c´ıtaˇ c˚ u, ...
I
Obˇ e funkce vyuˇz´ıvaj´ı registr(y), jehoˇz obsah se inkrementuje pomoc´ı hodinov´ eho, pˇr´ıp. extern´ıho sign´ alu.
I
Lze tak vyuˇz´ıt 8, 16 bitov´ eˇ casovaˇ ce/ˇ c´ıtaˇ ce.
Register and bit locations are listed in the “8-bit Timer/Counter Register Description” on
page e 83. Blokov´ e sch´ ma 8bitov´ eho ˇ casovaˇ ce/ˇ c´ıtaˇ ce 0 Figure 27. 8-bit Timer/Counter Block Diagram
TCCRn
count
TOVn (Int.Req.)
clear
Control Logic
direction
clk Tn
Clock Select Edge Detector
DATABUS
BOTTOM
Tn
TOP
( From Prescaler ) Timer/Counter TCNTn
=
=0
= 0xFF
OCn (Int.Req.)
Waveform Generation
OCn
OCRn
The Timer/Counter (TCNT0) Output Register Obr´ azek: Blokov´ e sch´ emaand ˇ casovaˇ ce/ˇ cCompare ´ıtaˇ ce 0 (oznaˇ cen´ı(OCR0) ”n” ud´ aare v´ aˇ c8-bit ´ıslo ˇ cregisters. ´ıtaˇ ce) Interrupt request (abbreviated to Int.Req. in the figure) signals are all visible in the Timer Interrupt Flag Register (TIFR). All interrupts are individually masked with the Timer Interrupt Mask Register (TIMSK). TIFR and TIMSK are not shown in the figure since these registers are shared by other timer units.
Blokov´ e sch´ ema 8bitov´ eho ˇ casovaˇ ce/ˇ c´ıtaˇ ce 0
I
ˇ c 0 je 8bitov´ C/ˇ y registr schopen inkrementovat (dekrementovat) svou hodnotu. Kˇ c/ˇ c 0 lze pˇristupovat pomoc´ı registr˚ u: I I I
I
TCNT0 (Timer/Counter0) – datov´ a hodnota ˇ casovaˇ ce/ˇ c´ıtaˇ ce 0, OCR0 (Output Compare Register) – hodnota pro neust´ al´ e porovn´ av´ an´ı s datov´ ym registrem, TCCR0 (Timer/Counter Control Register) – ˇr´ıdic´ı registr. Napˇr. nastaven´ı hodnoty pˇreddˇ eliˇ cky, povolen´ı pˇreruˇsen´ı, atd.
Moˇznost generov´ an´ı pˇreteˇ cen´ı: I I
pˇri pˇreteˇ cen´ı ˇ c/ˇ c (dosaˇzen´ı maxim´ aln´ı hodnoty a znovu n´ avrat k hodnotˇ e 0), pˇri rovnosti hodnoty datov´ eho registru a komparaˇ cn´ıho.
BOTTOM
The counter reaches the BOTTOM when it becomes 0x00.
The counter reaches its MAXimum when it becomes 0xFF (decimal 255). ˇ Casovaˇ c/ˇ c´ıtaˇ cMAX0, funkce ˇ casov´ an´ı (ˇ c´ıt´ an´ı) TOP
I
The counter reaches the TOP when it becomes equal to the highest value in the count sequence. The TOP value can be assigned to be the fixed value 0xFF (MAX) or the value stored in the OCR0 Register. The assignment is dependent on the mode of operation.
Vnitˇrn´ı sign´ aly:
r/Counter Clock I count: The Timer/Counter can be clocked by an internal or an external clock source. The clock inkrementace nebo dekrementace obsahu registru TCNT0, source is selected by the clock select logic which is controlled by the clock select ces I direction: v´ ybˇ elocated r mezi in inkrementac´ ı a dekrementac´ ı, (TCCR0). For details on (CS02:0) bits the Timer/Counter Control Register I clear: nulov´ an´ıand obsahu datov´ eho reg. TCNT0,and Timer/Counter1 Prescalers” on clock sources prescaler, see “Timer/Counter0 I clkpage hodinov´ y sign´ al ˇ c/ˇ c 0, T 0 - 87. I BOTTOM: signalizace dosaˇ zen´ı minim´ aln´ı hodnoty 0x00, I TOP: dosaˇ zen´ ı nejvyˇsˇs´ı hodnoty ˇ c´ıt´ an´ı 0xFF nebo hodnoty v komparaˇ cn´ım nter Unit The signalizace main part of the 8-bit Timer/Counter is the programmable bi-directional counter unit. Figure 28 shows a block diagram of the counter and its surroundings. registru. Figure 28. Counter Unit Block Diagram TOVn (Int. Req.)
DATA BUS
Clock Select count TCNTn
clear
Control Logic
clkTn
Edge Detector
direction ( From Prescaler ) BOTTOM
TOP
Signal description (internal signals): count
Obr´ aor zek: FunkceTCNT0 ˇ c´ıt´ an´by ıˇ c´1. ıtaˇ ce/ˇ casovaˇ ce. Increment decrement
direction
Select between increment and decrement.
clear
Clear TCNT0 (set all bits to zero).
clkTn
Timer/Counter clock, referred to as clkT0 in the following.
TOP
Signalize that TCNT0 has reached maximum value.
Tn
ˇ Casovaˇ c/ˇ c´ıtaˇ c 0, funkce ˇ casov´ an´ı (ˇ c´ıt´ an´ı) I
ˇ c 0 m˚ C/ˇ uˇze b´ yt ˇr´ızen vnitˇrn´ım zdrojem hodinov´ eho sign´ alu (lze zpomalit pomoc´ı pˇreddˇ eliˇ cky), nebo extern´ım sign´ alem pˇres pin T0. Tabulka: Nastaven´ı pˇreddˇ eliˇ cky 8bitov´ eho ˇ casovaˇ ce/ˇ c´ıtaˇ ce 0 v kontroln´ım registru TCCR0
CS02:0
Popis funkce
0b000 0b001 0b010 0b011 0b100 0b101 0b110 0b111
Hodinov´ y sign´ al odpojen, tj. ˇ casovaˇ c/ˇ c´ıtaˇ c 0 nepracuje. Bez pˇreddˇ eliˇ cky – fCPU . Pˇreddˇ eliˇ cka 8 – fCPU /8. Pˇreddˇ eliˇ cka 64 – fCPU /64. Pˇreddˇ eliˇ cka 256 – fCPU /256. Pˇreddˇ eliˇ cka 1 024 – fCPU /1 024. Extern´ı zdroj ˇr´ıdic´ıho sign´ alu, reakce na sestupnou hranu. Extern´ı zdroj ˇr´ıdic´ıho sign´ alu, reakce na n´ abˇ eˇznou hranu.
Ot´ azka Co je to pˇreteˇ cen´ı (anglicky: overflow)? Pˇr´ıklad Za jak dlouho dojde k pˇreteˇ cen´ı 8bitov´ eho ˇ c/ˇ c 0, je-li CS02:CS00=010 a fclk = 1 MHz?
ˇ Casovaˇ c/ˇ c´ıtaˇ c 0, funkce ˇ casov´ an´ı (ˇ c´ıt´ an´ı)
I
Doba pˇreteˇ cen´ı ”n” bitov´ eho ˇ casovaˇ ce tOVF , kde fCPU je frekvence hodinov´ eho sign´ alu j´ adra mikrokontrol´ eru a N je hodnota pˇreddˇ eliˇ cky: tOVF =
I
1 · N · 2n fCPU
(1)
Doba pˇreteˇ cen´ı ”n” bitov´ eho ˇ casovaˇ ce s nenulovou poˇ c´ ateˇ cn´ı hodnotou init: 1 tOVF = · N · (2n − init) (2) fCPU
agrams
shown as a clock enable signal in the following figures. The figures include information on when34. Interrupt Flags areTiming set. Figure 34 contains timing data for basic Timer/Counter Figure Timer/Counter Diagram, no Prescaling operation. The figure shows the count sequence close to the MAX value in all modes other than phase correct PWM mode.
V´ yznam pˇreddˇ eliˇ cky hodinov´ eho sign´ alu
clkI/O Figure 34. Timer/Counter Timing Diagram, no Prescaling clkTn
(clk clkI/O/1) I/O
TCNTn clkTn
MAX - 1
MAX
BOTTOM
BOTTOM + 1
MAX - 1
MAX
BOTTOM
BOTTOM + 1
(clkI/O /1)
TOVn TCNTn
TOVn35 shows the same timing data, but with the prescaler enabled. Figure Figure 35. Timer/Counter Timing Diagram, with Prescaler (fclk_I/O/8)
Figure 35 shows the same timing data, but with the prescaler enabled. clkI/O Figure 35. Timer/Counter Timing Diagram, with Prescaler (fclk_I/O/8)
clkTn
(clkI/O /8)
clkI/O
TCNTn clkTn
MAX - 1
MAX
BOTTOM
BOTTOM + 1
MAX - 1
MAX
BOTTOM
BOTTOM + 1
(clkI/O /8)
TOVn TCNTn
TOVn36 shows the setting of OCF0 in all modes except CTC mode. Figure
Obr´ azek: Rozd´ıl mezi rychlost´ı ˇ c´ıt´ an´ı bez pˇreddˇ eliˇ cky a s pˇreddˇ eliˇ cnou N = 8 Figure 36 shows the setting of OCF0 in all modes except CTC mode.
and waveform generation, see “Modes of Operation” on page 76. The Timer/Counter Overflow (TOV0) Flag is set according to the mode of operation ˇ by the WGM01:0 bits. TOV0acan used generating a CPU interrupt. Casovaˇ c/ˇ c´ıtaˇ c 0,selected funkce porovn´ v´ aben´ ı for(komparace)
Output Compare Unit
The 8-bit comparator continuously compares TCNT0 with the Output Compare Register
I
(OCR0). Whenever TCNT0 equals OCR0, the comparator signals a match. A match will Obsah registru OCR0 je pˇri kaˇzd´ e zmˇ enˇ e datov´ eho registru porovn´ av´ an pr´ avˇ e set the Output Compare Flag (OCF0) at the next timer clock cycle. If enabled (OCIE0 = Global Interrupt Flag in SREG is set), the Output Compare Flag generates an outs TCNT0. 1putandcompare interrupt. The OCF0 Flag is automatically cleared when the interrupt is
I
executed. Alternatively, the OCF0 Flag can be cleared by software by writing a logical Jestliˇze se obsahy obou registr˚ u rovnaj´ı, lze generovat pˇreruˇsen´ı (pokud je ˇr´ adnˇ e one to its I/O bit location. The waveform generator uses the match signal to generate an povoleno). output according to operating mode set by the WGM01:0 bits and Compare Output
I
for handling the special cases of the extreme values in some modes of operation (See Komparace lze snadno vyuˇz´ıt ke generov´ an´ı sign´ al˚ u, napˇr. pulsnˇ e ˇs´ıˇrkovou “Modes of Operation” on page 76.). modulaci (PWM – shows Pulse Width Figure 29 a block diagram Modulation). of the output compare unit.
mode (COM01:0) bits. The max and bottom signals are used by the waveform generator
Figure 29. Output Compare Unit, Block Diagram
DATA BUS
OCRn
TCNTn
= (8-bit Comparator ) OCFn (Int.Req.)
top bottom
Waveform Generator
OCn
FOCn
WGMn1:0
COMn1:0
Obr´ azek: Funkce porovn´ av´ an´ı ˇ casovaˇ ce/ˇ c´ıtaˇ ce. 2466M–AVR–04/06
73
ˇ Casovaˇ c/ˇ c´ıtaˇ c 0, funkce generov´ ani PWM
I I
Informace je PWM sign´ alem pˇren´ aˇsena promˇ ennou stˇr´ıdou obd´ eln´ıkov´ eho sign´ alu. Princip ˇ cinnosti: I I
pˇreteˇ cen´ı ˇ casovaˇ ce: vysok´ au ´roveˇ n generovan´ eho sign´ alu (zaˇ c´ atek periody), pˇri rovnosti datov´ eho a komparaˇ cn´ıho registru: n´ızk´ au ´roveˇ n (lze spouˇstˇ et pˇreruˇsen´ı).
255 OCR0
OCR0
TCNT0 0
OC0 (PB3) tOVF
tOVF
tOVF
tOVF
Obr´ azek: Princip generov´ an´ı PWM sign´ alu pomoc´ı zmˇ eny hodnoty komparaˇ cn´ıho registru 8bitov´ eho ˇ casovaˇ ce.
V´ ystupy generovan´ eho sign´ alu
Obr´ azek: Generov´ an´ı PWM sign´ alu u mikrokontrol´ eru ATmega16 – vliv pˇreddˇ eliˇ cky.
Obsah pˇredn´ aˇsky
Typy adresov´ an´ı Registrov´ e, pˇr´ım´ e, nepˇr´ım´ e, bezprostˇredn´ı Vˇ etven´ı programu Programov´ yˇ c´ıtaˇ c Vol´ an´ı podprogramu, z´ asobn´ık Obsluha pˇreruˇsen´ı Extern´ı poˇzadavek na pˇreruˇsen´ı Vnitˇrn´ı struktura a vyuˇ zit´ı z´ akladn´ıch perif´ eri´ı Vstupnˇ e/v´ ystupn´ı port Pˇr´ım´ e pˇripojen´ı, maticov´ e, pomoc´ı pomocn´ ych obvod˚ u ˇ Casovaˇ c/ˇ c´ıtaˇ c Uk´ azka programu v JSA a v jazyce C pro ATmega16 Obsluha pˇreruˇsen´ı
Obsluha pˇreruˇsen´ı v JSA
I
Pˇri pouˇzit´ı pˇreruˇsen´ı (i podprogram˚ u) je nutn´ e definovat z´ asobn´ık, tj. naplnit registrov´ y p´ ar SPH:SPL. Jedn´ a se o I/O registry (viz pˇredn´ aˇska o Instrukˇ cn´ı sadˇ e), proto se pouˇzije kombinace instrukc´ı LDI a OUT.
I
Bˇ eˇzn´ a praxe u ˇ c´ıslicov´ ych syst´ em˚ u: hlavn´ı ˇ c´ ast programu se zacykl´ı pomoc´ı nekoneˇ cn´ e smyˇ cky. Z n´ı se sk´ aˇ ce na obsluˇzn´ e programu pouze pˇri pˇr´ıchodu poˇzadavku na pˇreruˇsen´ı. Vektory pˇreruˇsen´ı pouˇzit´ e v uk´ azce – plat´ı pro ATmega16:
I
I I I
0x0000 – reset, 0x0002 – extern´ı poˇzadavek na pˇreruˇsen´ı INT0, 0x001C – byl dokonˇ cen A/D pˇrevod.
Obsluha pˇreruˇsen´ı v JSA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
. include <m16def . inc> . cseg . org 0 x0000 RJMP reset . org 0 x0002 RJMP tlacitko . org 0 x001C RJMP ad_prevod
; ; ; ; ; ; ; ;
def . soubor mikrokontrol´ e ru ATmega16 pamˇ e t’ ov´ y segment Flash uloˇ z od adresy 0 x0000 skoˇ c na n´ a vˇ eˇ s t´ ı reset vektor pˇ r eruˇ s en´ ı INT0 skoˇ c na n´ a vˇ eˇ s t´ ı tlacitko vektor pˇ r eruˇ s en´ ı A / D pˇ r evodn´ ı ku skoˇ c na n´ a vˇ eˇ s t´ ı ad_prevod
. org 0 x002A reset : LDI R16 , high ( RAMEND ) ... ... SEI
; ; ; ;
loop : RJMP loop
; nekoneˇ c n´ a smyˇ c ka ; skok na n´ a vˇ eˇ s t´ ı loop
tlacitko : ... RETI
; obsluha pˇ r eruˇ s en´ ı INT0 ; ukonˇ c en´ ı obsluhy pˇ r eruˇ s en´ ı
ad_prevod : ... RETI
; obsluha pˇ r eruˇ s en´ ı A / D pˇ r evodn´ ı ku ; ukonˇ c en´ ı obsluhy pˇ r eruˇ s en´ ı
; uloˇ z od adresy 0 x002A definice dokonˇ c it naplnˇ e n´ ı glob´ a ln´ ı
z´ a sobn´ ı ku , tj . naplnˇ e n´ ı registr˚ u SPH : L definov´ a n´ ı z´ a sobn´ ı ku I / O registr˚ u pro INT a A / D povolen´ ı vˇ s ech pˇ r eruˇ s en´ ı
Obsluha pˇreruˇsen´ı v jazyce C
I
Pro vyuˇzit´ı pˇreruˇsen´ı v jazyce C je nutn´ e vloˇzit hlaviˇ ckov´ y soubor interrupt.h.
I
Nen´ı nutn´ e definovat z´ asobn´ık; respektive udˇ el´ a to pˇrekladaˇ c. Rovnˇ eˇz nen´ı nutn´ e zn´ at konkr´ etn´ı adresy vektor˚ u pˇreruˇsen´ı. Obsluhy pˇreruˇsen´ı pˇredstavuj´ı vˇzdy makra ISR (anglicky: Interrupt Service Routine) se vstupn´ım parametrem, kter´ y identifikuje zdroj pˇreruˇsen´ı:
I
I I I I
INT0 vect – extern´ı pˇreruˇsen´ı, ADC vect – pˇreruˇsen´ı od A/D pˇrevodn´ıku, ...
(Vˇsechny informace a uk´ azky vyuˇz´ıvaj´ı pˇrekladaˇ ce GCC s knihovnou avr-libc.)
Parametry makra obsluhy pˇreruˇsen´ı ISR() pro ATmega16 ˇ C.
Adresa
Parametr v C (GCC)
Popis pˇreruˇsen´ı
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0x0000 0x0002 0x0004 0x0006 0x0008 0x000A 0x000C 0x000E 0x0010 0x0012 0x0014 0x0016 0x0018 0x001A 0x001C 0x001E 0x0020 0x0022 0x0024 0x0026 0x0028
INT0 vect INT1 vect TIMER2 COMP vect TIMER2 OVF vect TIMER1 CAPT vect TIMER1 COMPA vect TIMER1 COMPB vect TIMER1 OVF vect TIMER0 OVF vect SPI STC vect USART RXC vect USART UDRE vect USART TXC vect ADC vect EE RDY vect ANA COMP vect TWI vect INT2 vect TIMER0 COMP vect SPM RDY vect
Extern´ı reset, pˇripojen´ı nap´ ajen´ı. Extern´ı poˇzadavek na pˇreruˇsen´ı 0. Extern´ı poˇzadavek na pˇreruˇsen´ı 1. ˇ Casovaˇ c/ˇ c´ıtaˇ c 2 – shoda komparace. ˇ Casovaˇ c/ˇ c´ıtaˇ c 2 – pˇreteˇ cen´ı. ˇ Casovaˇ c/ˇ c´ıtaˇ c 1 – zachycen´ı. ˇ Casovaˇ c/ˇ c´ıtaˇ c 1 – shoda s kompar´ atorem A. ˇ Casovaˇ c/ˇ c´ıtaˇ c 1 – shoda s kompar´ atorem B. ˇ Casovaˇ c/ˇ c´ıtaˇ c 1 – pˇreteˇ cen´ı. ˇ Casovaˇ c/ˇ c´ıtaˇ c 0 – pˇreteˇ cen´ı. Dokonˇ cen´ı s´ eriov´ eho pˇrenosu SPI. USART – kompletn´ı pˇr´ıjem dat. USART – pr´ azdn´ y datov´ y registr. USART – kompletn´ı vysl´ an´ı dat. ADC – dokonˇ cen´ı A/D pˇrevodu. EEPROM – komunikace pˇripravena. Zmˇ ena v´ ystupu analogov´ eho kompar´ atoru. Ud´ alost na s´ eriov´ e sbˇ ernici I2C. Extern´ı poˇzadavek na pˇreruˇsen´ı 2. ˇ Casovaˇ c/ˇ c´ıtaˇ c 0 – shoda komparace. Uloˇzen´ı do programov´ e pamˇ eti pˇripraveno.
Obsluha pˇreruˇsen´ı v jazyce C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#i n c l u d e #i n c l u d e ...
// h l a v i ˇ ckov´ y s o u b o r p r o MCU // h l a v i ˇ ckov´ y s o u b o r p r o pˇr e r u ˇs e n´ı // pˇr´ıp a d n ´ e d a l ˇs´ı k n i h o v n y
ISR ( INT0_vect ) { ... }
// o b s l u h a e x t e r n´ıh o pˇr e r u ˇs e n´ı INT0 // k´ o d o b s l u h y pˇr e r u ˇs e n´ı
ISR ( ADC_vect ) { ... }
// o b s l u h a pˇr e r u ˇs e n´ı A/D pˇr e v o d n´ık u // k´ o d o b s l u h y pˇr e r u ˇs e n´ı
i n t main ( v o i d ) { ... sei ( ) ; while ( 1 ) ; return ( 1 ) ; }
// // // //
k´ o d h l a v n´ı f u n k c e glob´ a l n´ı p o v o l e n´ı vˇs e c h pˇr e r u ˇs e n´ı n e k o n eˇ cn´ a smyˇ c ka h l a v n´ı f u n k c e v r a c´ı h o d n o t u 1