Les microcontrôleurs de la famille AVR d'Atmel

Caractéristiques générales

  • Technologie CMOS haute vitesse : rapidité + faible consommation
  • Architecture RISC et Harvard
    • Puissance en Mips = fréquence de l'horloge
  • Alimentation entre 1,8 et 5,5V
  • 3 mémoires indépendantes :
    • Mémoire flash intégrée (10000 cycles écriture)
    • Mémoire EEPROM pour le stockage de données semi-permanentes
      • (100000 cycles écriture)
    • Mémoire SRAM rapide

Les microC 8 bits de la famille AVR

Architecture microC AVR


Le microcontrôleur de l'Arduino UNO

Caractéristiques générales de l'Atmega328p

  • Nombre de broches : 28 (sur le modèle utilisé en TP)
  • Mémoire Flash : 32 ko (programmable par interface série)
  • Mémoire Données EEPROM : 1 ko
  • Mémoire RAM : 2 ko
  • 32 registres de travail d'accès rapide pour l'ALU
  • Ports parallèles : 3, avec 23 broches E/S
  • Fréquence d'horloge : 16 Mhz (maxi tolérée = 20 Mhz)
    • donc : 16 cycles d'horloge par micro-seconde
  • Périphériques internes
    • 6 convertisseur Analogique/Numérique 10 bits, comparateur analogique
    • 1 timer 16 bits (T1), 2 timers 8 bits(T0,T2)
    • 6 canaux PWM, 1 chien de garde (watchdog)
    • SPI, USART, TWI (=I2C)
  • 26 interruptions
  • 5 modes d'économie d'énergie

Brochage de l'ATmega 328p

Brochage ATmega 328p

  • VCC (1), GND (2)
  • E/S (=GPIO) : PORTB (8), PORTC (7), PORTD(8)
  • AVCC (1) : alimentation CAN
  • AREF (1) : entrée comparateur analogique

Architecture interne générale de l'ATmega 328

Architecture microC AVR


Architecture interne de l'unité centrale de l'ATmega 328

Schéma

Architecture microC AVR


Une architecture performante
  • Architecture Harvard : 3 accès mémoires indépendants

    • Mémoire Programme (Flash)
      • liée directement à l'ALU et au bloc de 32 registres de travail internes
      • propre bus de données
    • Autres mémoires + autres ressources
      • partagent un même bus de données
  • Le processeur dispose d'un pipeline à 1 niveau

    • l'instruction N s'exécute,
    • pendant que l'instruction N+1 est récupérée en mémoire
  • Donc : exécution d'1 instruction en 1 cycle d'horloge

    • lecture de 2 opérandes dans les registres de travail
    • exécution du calcul
    • stockage du résultat dans les registres de travail

Organisation de la mémoire

Organisation mémoire

Quelques registres essentiels de l'ATmega328

Les registres de travail

Les registres de travail

  • 32 registres 8 bits, R0 à R31
  • certains sont utilisables en 16 bits (pour les adressages indirects)
  • placés en début de la RAM de donnée

Le registre d'état SREG

SREG

Constitués de 8 bits, ayant chacun un rôle propre :

  • I : autorisation globale des interruptions
  • T : bit source ou destinataire pour les instructions de copie de bit seul
  • H : demi-retenue (Half-carry) - c.-à-d. du premier quartet - sur opérations arithmétiques
  • S : bit de signe
  • V : bit de débordement (oVerflow)
  • N : bit de résultat négatif
  • Z : bit de zéro, positionné à 1 lorsque le résultat de certaines opération est nul
  • C : bit de retenue (Carry)

Attention

Ce registre n'est pas sauvegardé sur la pile sur interruption ou appel de fonction.


La pile et son registre « pointeur de pile »

  • La pile est une portion de la SRAM, localisée par un registre de pointeur de pile
  • Elle est manipulable via les instructions PUSH et POP
  • Elle sert en particulier à sauvegarder le compteur ordinal PC (Program Counter), qui désigne l'adresse de l'instruction à exécuter
    • lors d'un appel de sous-programme
    • ou lors d'une interruption
  • Sa position en mémoire est définie par le registre « pointeur de pile » :

SPH-SPL

Les interruptions de l'ATmega328

Définition

Définition : interruption

Une interruption est un déroutage automatique et « quasi-instantané » du programme en cours d'exécution, en réponse à un signal émis par un périphérique interne ou par une entrée externe (appelés sources d’interruption), vers un sous-programme permettant de gérer l’évènement.

  • Le mécanisme d’interruption s’oppose à la « scrutation », où le μP interroge régulièrement l’état de la source, par logiciel
    • dans la scrutation, le processeur obéit à des instructions du programme pour vérifier l'état des sources
    • alors que l'interruption est déclenchée automatiquement sur demande d'une source d'interruption, indépendamment du programme en cours d'exécution
      • Exemple du reset

Autorisations, priorités et mécanisme de demande d'interruption

  • Les interruptions sont désactivables
    • globalement
    • ou individuellement, par source d'interruption
  • La prise en compte de l’interruption peut être retardée si son niveau de priorité est insuffisant
    • les niveaux de priorités sont fixes, et fonctions de la source d'interruption
    • exemple : reset = interruption de plus forte priorité
  • Les sources d'interruptions (périphériques internes, entrées externes) font leur demande d'interruption en positionnant à 1 un bit dédié (interrupt flag), stocké dans l'un de leurs registres

    • ainsi, une demande d'interruption non traitée faute de priorité suffisante ou faute d'autorisation, n'est pas oubliée pour autant : le drapeau reste levé
  • Sur l'ATmega328, il faut de 4 à 6 cycles d'horloge avant que le microcontrôleur exécute la routine d'interruption


Déroulement des interruptions

  • Sur une interruption, voici ce qui se produit

    1. l'instruction en cours s'achève
    2. le masque d'interruption I est automatiquement mis à 1 pour empêcher d'autres interruptions
    3. le compteur ordinal PC est sauvegardé sur la pile (au contraire de SREG)
    4. PC est ensuite chargé avec le vecteur d'interruption (qui effectue normalement un saut vers le sous-programme d'interruption)
  • En fin d'exécution de la routine d'interruption, c'est l'inverse

    1. PC est chargé avec le dessus de la pile
    2. I est remis à 0
    3. le programme reprend alors là où il avait été interrompu

Liste des interruptions de l'ATmega328

  • 26 sources d'interruptions
  • leurs vecteurs sont constitués de 2 mots d'instructions
  • ils sont ordonnés par priorité décroissante
    • vecteur 0 = *reset : le plus prioritaire

Liste des interruptions