ii2 - microcontroleur
TRANSCRIPT
II2/AVR 1
II2 - Microcontroleur
Introduction Famille ATMEL AVR8bits ATMega16
Organisation Mémoire Architecture CPU Modes d'adressage et jeu d'instructions Interface Mémoire Port d'E/S, //, timer, périphériques.... Liaison série Fonctions, Interruptions,...
II2/AVR 2
Ressources
www.atmel.com www.avrfreaks.com (login) www.avrtv.com www.circuitcellar.com Google...
Logiciels Avrstudio 4.13b (www.atmel.com) (login) winavr.sourceforge.net
II2/AVR 4
MicroprocesseurMicrocontrôleur
Microcontrôleur Microprocesseur
Peut fonctionner seul Nécessite mémoires, chipset, disque dur, interfaces,....
De 6 à >100 broches >500 ou 1000 broches (en 2008)
Plus de 100 fournisseurs/architectures
Qcq 10aines de références par fournisseur
Fréquence max 20Mhz~200Mhz Qcq GHz
Faible à moyenne puissance de calcul Tres grande puissance de calcul
Forte consommation >qcq W
>100€
<10 fournisseurs(Intel, AMD, IBM, SUN .), moins de 5 architectures subsistent (i386, Power, Sparc,
Plus de 100 à 1000 références par fournisseur
Très faible consommation (<mW ou µW)
Coût très faible 1€ (<0.1€~10€)
4,8 , 16, 32 bits 32 ou 64bits
II2/AVR 6
MicroprocesseurMicrocontrôleur
CPU
Adress bus
Control busData bus
CPU
I/O
MemoryProg/Data
VON NEUMANN
II2/AVR 7
MicroprocesseurMicrocontrôleur
CPU
Adress bus
Control busData bus
CPU
I/O
MemoryProg/Data
CPUProgmemory
Datamemory
I/O
VON NEUMANN HARVARD
II2/AVR 8
Famille AVR
Tiny AVR (8 à 20 broches) Mega AVR (32 à 100 broches) Xmega AVR (44 à 100 broches)
II2/AVR 14
ATMega 16
Boitier ATMega 16PDIP40 52mm
Boitier ATMega 16TQFP44
12mm
Boitier ATMega 16QFN 44
7mm
II2/AVR 15
ATMega 16
Boitier ATMega 16PDIP40 52mm
TQFP44
12mm
Boitier ATMega 16QFN 44
7mm
AT Tiny 13QFN103mm
II2/AVR 19
Organisation Mémoire
0x0000
0x1FFF(8191)
PC
16bits
Prog Mem(Flash)
1024octets
R0R1
R26R27R28R29
R31R30
0x000x01
0x3E0x3F
0x3D
SRAM
0x1F
0x20
0x5F
0x60
0x00
0x45F
IO Reg
32 Reg
R26R27X
R30R31ZR28R29Y
0x3D0x3ESPSPH SPL
16bits
Indirect register
8bits
0x002A0x0029
Interruptvector
Inst Adress Data AdressATMega16 Memory Map
13bits
II2/AVR 20
Mémoire programme
0x0000
0x1FFF(8191)
16bits
Prog Mem(Flash)
0x002A0x0029
Interruptvector
Inst AdressATMega16 Memory Map
II2/AVR 21
Program Counter (PC)
0x0000
0x1FFF(8191)
PC
16bits
Prog Mem(Flash)
0x002A0x0029
Interruptvector
Inst AdressATMega16 Memory Map
13bits
II2/AVR 22
Registres R0-R31
0x0000
0x1FFF(8191)
PC
16bits
Prog Mem(Flash) R0
R1
R26R27R28R29
R31R30
0x1F
0x0032 Reg
8bits
0x002A0x0029
Interruptvector
Inst Adress Data AdressATMega16 Memory Map
13bits
II2/AVR 23
Registres IO
0x0000
0x1FFF(8191)
PC
16bits
Prog Mem(Flash) R0
R1
R26R27R28R29
R31R30
0x000x01
0x3E0x3F
0x3D
0x1F
0x20
0x5F
0x00
IO Reg
32 Reg
8bits
0x002A0x0029
Interruptvector
Inst Adress Data AdressATMega16 Memory Map
13bits
II2/AVR 24
Memoire Données (SRAM)
0x0000
0x1FFF(8191)
PC
16bits
Prog Mem(Flash)
1024octets
R0R1
R26R27R28R29
R31R30
0x000x01
0x3E0x3F
0x3D
SRAM
0x1F
0x20
0x5F
0x60
0x00
0x45F
IO Reg
32 Reg
8bits
0x002A0x0029
Interruptvector
Inst Adress Data AdressATMega16 Memory Map
13bits
II2/AVR 25
Pile/Pointeur Pile (SP)
0x0000
0x1FFF(8191)
PC
16bits
Prog Mem(Flash)
1024octets
R0R1
R26R27R28R29
R31R30
0x000x01
0x3E0x3F
0x3D
SRAM
0x1F
0x20
0x5F
0x60
0x00
0x45F
IO Reg
32 Reg
0x3D0x3ESPSPH SPL
16bits
8bits
0x002A0x0029
Interruptvector
Inst Adress Data AdressATMega16 Memory Map
13bits
II2/AVR 26
Registres Indirect X,Y,Z
0x0000
0x1FFF(8191)
PC
16bits
Prog Mem(Flash)
1024octets
R0R1
R26R27R28R29
R31R30
0x000x01
0x3E0x3F
0x3D
SRAM
0x1F
0x20
0x5F
0x60
0x00
0x45F
IO Reg
32 Reg
R26R27X
R30R31ZR28R29Y
0x3D0x3ESPSPH SPL
16bits
Indirect register
8bits
0x002A0x0029
Interruptvector
Inst Adress Data AdressATMega16 Memory Map
13bits
II2/AVR 27
Registres Indirect X,Y,Z
0x0000
0x1FFF(8191)
PC
16bits
Prog Mem(Flash)
1024octets
R0R1
R26R27R28R29
R31R30
0x000x01
0x3E0x3F
0x3D
SRAM
0x1F
0x20
0x5F
0x60
0x00
0x45F
IO Reg
32 Reg
R26R27X
R30R31ZR28R29Y
0x3D0x3ESPSPH SPL
16bits
Indirect register
8bits
0x002A0x0029
Interruptvector
Inst Adress Data AdressATMega16 Memory Map
13bits
II2/AVR 37
Jeu d'instructions
5 types d'instructions Instructions arithmétiques et logiques Instruction de manipulations de bits Instructions d'acces mémoires Instructions de sauts et branchements Instructions « spéciales »
REFERENCE jeu d'instruction doc0856.pdf
http://www.atmel.com/atmel/acrobat/doc0856.pdf
II2/AVR 38
Instructions arithmétiqueset logiques
2 modes d'adressages disponibles Registres (R0:R31) ou Immédiat
Instructions exécutées par l'ALU Mise à jour de SREG (bits Z, C,
H, V, N)
Additions/soustractions Opérations logiques
(AND,OR,XOR, NOT, C2) Multiplications Mise à 0x00 ou 0xFF des reg.
II2/AVR 39
Instructions arithmétiqueset logiques
Exemple SUB, SUBI
SUB R30,R24 (adressage par registres) R30-R24 -->R30
SUBI R23,K adressage immédiat (K) R30-K-->R30 0≤K≤255, R16 R31
Zero,Carry,Negative,oVerflow,Half carry du registre de statut SREG sont mis à jour
Exécutées en 1 cycle CPU
II2/AVR 40
SUB R30,R24
0x002E 0x1BE8
SUB R30,R24 Opcode 0001 10 1 1 1110 1000
Adresse instruction
Opcode
II2/AVR 41
SUB R30,R24
0x0000
0x1FFF(8191)
0x002E
16bits
Prog Mem(Flash) R0
R1
R26R27R28R29
R310x17
0x1F
0x0032 Reg
8bits
0x002E
0x0029
Interruptvector
Inst Adress Data Adress
13bits
0x1BE8
0x11
Instruction register
Instruction Decoder
II2/AVR 42
SUB R30,R24
0x0000
0x1FFF(8191)
0x002E
16bits
Prog Mem(Flash) R0
R1
R26R27R28R29
R310x17
0x1F
0x0032 Reg
8bits
0x002E
0x0029
Interruptvector
Inst Adress Data Adress
13bits
0x1BE8
0x110x1BE8
Instruction register
Instruction Decoder
II2/AVR 43
SUB R30,R24
0x0000
0x1FFF(8191)
0x002E
16bits
Prog Mem(Flash) R0
R1
R26R27R28R29
R310x17
0x1F
0x0032 Reg
8bits
0x002E
0x0029
Interruptvector
Inst Adress Data Adress
13bits
0x1BE8
0x110x1BE8
Instruction register
0001 11 1 1 1110 1000
II2/AVR 44
SUB R30,R24
0x0000
0x1FFF(8191)
0x002E
16bits
Prog Mem(Flash) R0
R1
R26R27R28R29
R310x17
0x1F
0x0032 Reg
8bits
0x002E
0x0029
Interruptvector
Inst Adress Data Adress
13bits
0x1BE8
0x110x1BE8
Instruction register
0001 11 1 1 1110 1000
SUB Rd,Rs
II2/AVR 45
SUB R30,R24
0x0000
0x1FFF(8191)
0x002E
16bits
Prog Mem(Flash) R0
R1
R26R27R28R29
R310x17
0x1F
0x0032 Reg
8bits
0x002E
0x0029
Interruptvector
Inst Adress Data Adress
13bits
0x1BE8
0x110x1BE8
Instruction register
0001 11 1 1 1110 1000Rd=1 1110 (30)
SUB Rd,Rs
II2/AVR 46
SUB R30,R24
0x0000
0x1FFF(8191)
0x002E
16bits
Prog Mem(Flash) R0
R1
R26R27R28R29
R310x17
0x1F
0x0032 Reg
8bits
0x002E
0x0029
Interruptvector
Inst Adress Data Adress
13bits
0x1BE8
0x110x1BE8
Instruction register
0001 11 1 1 1110 1000Rd=1 1110 (30)
SUB Rd,Rs
0x17
II2/AVR 47
SUB R30,R24
0x0000
0x1FFF(8191)
0x002E
16bits
Prog Mem(Flash) R0
R1
R26R27R28R29
R310x17
0x1F
0x0032 Reg
8bits
0x002E
0x0029
Interruptvector
Inst Adress Data Adress
13bits
0x1BE8
0x110x1BE8
Instruction register
0001 11 1 1 1110 1000Rd=1 1110 (30)
Rs=1 1000(24)
SUB Rd,Rs
0x17
II2/AVR 48
SUB R30,R24
0x0000
0x1FFF(8191)
0x002E
16bits
Prog Mem(Flash) R0
R1
R26R27R28R29
R310x17
0x1F
0x0032 Reg
8bits
0x002E
0x0029
Interruptvector
Inst Adress Data Adress
13bits
0x1BE8
0x110x1BE8
Instruction register
0001 11 1 1 1110 1000Rd=1 1110 (30)
Rs=1 1000(24)
SUB Rd,Rs
0x170x11
II2/AVR 49
SUB R30,R24
0x0000
0x1FFF(8191)
0x002E
16bits
Prog Mem(Flash) R0
R1
R26R27R28R29
R310x17
0x1F
0x0032 Reg
8bits
0x002E
0x0029
Interruptvector
Inst Adress Data Adress
13bits
0x1BE8
0x110x1BE8
Instruction register
0001 11 1 1 1110 1000Rd=1 1110
Rs=1 1000
SUB Rd,Rs0x17
- 0x11
II2/AVR 50
SUB R30,R24
0x0000
0x1FFF(8191)
0x002E
16bits
Prog Mem(Flash) R0
R1
R26R27R28R29
R310x17
0x1F
0x0032 Reg
8bits
0x002E
0x0029
Interruptvector
Inst Adress Data Adress
13bits
0x1BE8
0x110x1BE8
Instruction register
0001 11 1 1 1110 1000Rd=1 1110 (30)
Rs=1 1000
SUB Rd,Rs 0x17- 0x110x06
II2/AVR 51
SUB R30,R24
0x0000
0x1FFF(8191)
0x002E
16bits
Prog Mem(Flash) R0
R1
R26R27R28R29
R310x06
0x1F
0x0032 Reg
8bits
0x002E
0x0029
Interruptvector
Inst Adress Data Adress
13bits
0x1BE8
0x110x1BE8
Instruction register
0001 11 1 1 1110 1000Rd=1 1110 (30)
Rs=1 1000
SUB Rd,Rs 0x17- 0x110x06
II2/AVR 52
SUB R30,R24
0x0000
0x1FFF(8191)
0x002E
16bits
Prog Mem(Flash) R0
R1
R26R27R28R29
R310x06
0x1F
0x0032 Reg
8bits
0x002E
0x0029
Interruptvector
Inst Adress Data Adress
13bits
0x1BE8
0x11
Instruction register
PC<-PC+1
II2/AVR 53
SUB R30,R24
0x0000
0x1FFF(8191)
0x002F
16bits
Prog Mem(Flash) R0
R1
R26R27R28R29
R310x06
0x1F
0x0032 Reg
8bits
0x002F
0x0029
Interruptvector
Inst Adress Data Adress
13bits
0x1BE8
0x11
Instruction register
II2/AVR 55
Instructions de manipulation de bits
modes d'adressages Registres (R0:R31), IO (0x00 :
0x1F et immédiat SREG
Décalages et rotations Mise à 0 ou 1
Exemple LSL R1
R1=0x12 0001 0010
R0R1
R26R27R28R29
R31R30
0x000x01
0x3E0x3F
0x1F
IO Reg
32 Reg
II2/AVR 56
Instructions de manipulation de bits
modes d'adressages Registres (R0:R31), IO (0x00 :
0x1F et immédiat SREG
Décalages et rotations Mise à 0 ou 1
Exemple LSL R1
R1=0x12 0001 0010
0010 010?
R0R1
R26R27R28R29
R31R30
0x000x01
0x3E0x3F
0x1F
IO Reg
32 Reg
II2/AVR 57
Instructions de manipulation de bits
modes d'adressages Registres (R0:R31), IO (0x00 :
0x1F et immédiat SREG
Décalages et rotations Mise à 0 ou 1
Exemple LSL R1
R1=0x12 0001 0010.
0010 0100 0
R0R1
R26R27R28R29
R31R30
0x000x01
0x3E0x3F
0x1F
IO Reg
32 Reg
II2/AVR 58
Instructions de manipulation de bits
modes d'adressages Registres (R0:R31), IO (0x00 :
0x1F et immédiat SREG
Décalages et rotations Mise à 0 ou 1
Exemple LSL R1
R1=0x12 0001 0010 0x24 0010 0100 0
R0R1
R26R27R28R29
R31R30
0x000x01
0x3E0x3F
0x1F
IO Reg
32 Reg
II2/AVR 60
Instructions d'accés mémoire
Accès à la mémoire registres, SRAM ou Program
LD LoaD, chargement depuis la mémoire ST STore chargement vers la mémoire
Adressage immédiat LDI Adressage direct LDS,STS Adressage indirect LD, ST,LPM
Par les registres X,Y Z Adressage par la pile : PUSH, POP
II2/AVR 61
Instructions d'accés mémoire
Exemples
Adressage direct LDS R12,0x01AALe contenu de l'adresse 0x1AA en SRAM est copié dans R12
II2/AVR 62
Instructions d'accés mémoire
Exemples
Adressage direct LDS R12,0x01AALe contenu de l'adresse 0x1AA en SRAM est copié dans R12
Adressage indirect ST R17,YLe contenu de R17 est copié à l'adresse 16bis contenue dans le registre pointeur Y
II2/AVR 63
Instructions d'accés mémoire
Exemples
Adressage direct LDS R12,0x01AALe contenu de l'adresse 0x1AA en SRAM est copié dans R12
Adressage indirect ST R17,YLe contenu de R17 est copié à l'adresse 16bis contenue dans le registre pointeur Y
Adressage par la pile PUSH R21 Le contenu de R21 est copié à l'adresse contenue dans
le registre de pile SP (stack pointer ) PUIS SP est décrémenté de 1
II2/AVR 65
Instructions sauts et branchement
Instruction changeant le cours d'exécution d'un programme
Générées par les structures de contrôle du C If , do{}while, for, {test}?{inst1}:{inst2}.... Les appels de fonctions CALL,RET Les interruptions RETI
MODIFIENT TOUJOURS Prog Counter PC
S'exécutent en au moins 2 cycles
II2/AVR 66
Instructions sauts et branchement
Exemples Saut : JUMP 0x011A
PC prend la valeur 0x011A... La prochaine instruction exécutée sera celle contenue à l'adresse 0x011A
Saut conditionnel BREQ 0x012A BRanch if EQual si l'opération précédente a donné un
resultat nul (Bit Z =0) PC prend la valeur 0x012A
Si non PC s'incrémente normalement
Non Exécution conditionnelle SBRS R12,2 Skip if Bit in Register Set
si le bit 2 du registre R12 est '1' l'instruction suivante est sautée si non elle est exécutée
Appel de fonction... Voir plus loin