68
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 - Microcontroleur

  • Upload
    others

  • View
    15

  • Download
    0

Embed Size (px)

Citation preview

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 3

Bibliographie

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 5

MicroprocesseurMicrocontrôleur

CPU

Adress bus

Control busData bus

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 9

Famille AVR

II2/AVR 10

Famille AVR

II2/AVR 11

ATMega 16

II2/AVR 12

ATMega 16

Boitier ATMega 16PDIP40 52mm

II2/AVR 13

ATMega 16

Boitier ATMega 16PDIP40 52mm

Boitier ATMega 16TQFP44

12mm

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 16

II2/AVR 17

Organisation Mémoire

Registres ALU

II2/AVR 18

Organisation Mémoire

Registres ALU

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 28

Registres IO (0x00-0x1F)

II2/AVR 29

Registres IO (0x20-0x3F)

II2/AVR 30

Jeu instructions

II2/AVR 31

Exemple Prog

II2/AVR 32

Modes d'adressage

Adressage Registre unique

II2/AVR 33

Modes d'adressage

Adressage Registre double

II2/AVR 34

Modes d'adressage

Adressage Immédiat

II2/AVR 35

Modes d'adressage

Adressage Direct

II2/AVR 36

Modes d'adressage

Adressage Indirect

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 54

Instructions arithmétiques et logiques

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 59

Instructions arithmétiques et logiques

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 64

Instructions d'accès mémoire

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

II2/AVR 67

Instructions sauts et branchement

II2/AVR 68

Instructions spéciales

NOP : ne fait rien en 1 cycle (attente) SLEEP : met le microControleur en sommeil

(faible conso) WDR : réinitialise le WatchDog BREAK : pour le debug