Cours:Atmega328p : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
Ligne 1 : Ligne 1 :
 
=Interruptions=
 
=Interruptions=
=={{Bleu|Activer/Désactiver les interruptions}}
+
=={{Bleu|Activer/Désactiver les interruptions}}==
  
 
Les fonctions suivantes permettent d'activer et désactiver globalement les interruptions :
 
Les fonctions suivantes permettent d'activer et désactiver globalement les interruptions :
Ligne 8 : Ligne 8 :
 
sei(); //autorise les interruptions
 
sei(); //autorise les interruptions
 
</source>
 
</source>
 +
 +
=={{Bleu|Attention}}
 +
 +
*Quand une interruption est appelée, les autres interruptions sont automatiquement désactivées par le µcontrôleur
 +
*Les variables partagée entre interruption et programme principal doivent être de type {{Rouge|volatile}}
 +
*Les opérations de lecture/écriture sur des variables de plus de 8 bits doivent être protégées en désactivant les interruptions.<br>Exemple :<br><source lang=c>unsigne long c;<br>uint8_t SaveSREG = SREG;<br>cli();c = PulseCounts;<br>SREG = SaveSREG;</source>
 +
  
 
=={{Bleu|Interruption externe}}==
 
=={{Bleu|Interruption externe}}==
Ligne 52 : Ligne 59 :
 
</source>
 
</source>
 
{{finAide}}
 
{{finAide}}
 +
 +
 +
==={{Vert|Registre EIMSK}}===
 +
 +
Le registre EIMSK permet d'autoriser ou non les interruptions INT1 et INT0.
 +
 +
{| class="wikitable"
 +
|-
 +
! EIMSK bit
 +
||  7 ||  6 ||  5 ||  4 ||  3 ||  2 ||  1 ||  0
 +
|-
 +
! Fonction
 +
||-----||-----||-----||-----||-----||-----||INT1||INT0
 +
|-
 +
! Valeur initiale
 +
||0||0||0||0||0||0||0||0
 +
|}
 +
 +
Une mise à {{Rouge|'1'}} du bit INTx permet d'autoriser l'interruption associée.
 +
 +
==={{Vert|Registre EIFR}} Exernal Interrupt Flag Register===
 +
 +
Le registre EIFR permet d'observer l'état des interruptions INT1 et INT0.
 +
 +
{| class="wikitable"
 +
|-
 +
! EIFR bit
 +
||  7 ||  6 ||  5 ||  4 ||  3 ||  2 ||  1 ||  0
 +
|-
 +
! Fonction
 +
||-----||-----||-----||-----||-----||-----||INTF1||INTF0
 +
|-
 +
! Valeur initiale
 +
||0||0||0||0||0||0||0||0
 +
|}
 +
 +
Le bit INTFx passe à {{Rouge|'1'}} lors du déclenchement de l'interruption.

Version du 23 mars 2014 à 21:39

Interruptions

Activer/Désactiver les interruptions

Les fonctions suivantes permettent d'activer et désactiver globalement les interruptions :

cli(); //désactive toute interruption
sei(); //autorise les interruptions

==Attention

  • Quand une interruption est appelée, les autres interruptions sont automatiquement désactivées par le µcontrôleur
  • Les variables partagée entre interruption et programme principal doivent être de type volatile
  • Les opérations de lecture/écriture sur des variables de plus de 8 bits doivent être protégées en désactivant les interruptions.
    Exemple :
    unsigne long c;<br>uint8_t SaveSREG = SREG;<br>cli();c = PulseCounts;<br>SREG = SaveSREG;
    


Interruption externe

Cette partie détaille l'utilisation des interruptions INT0 et INT1, attachées aux pin PD2 et PD3.

Registre EICRA

Le registre EICRA permet de choisir le mode de déclenchement de l'interruption.

EICRA bit 7 6 5 4 3 2 1 0
Fonction ----- ----- ----- ----- ISC11 ISC10 ISC01 ISC00
Valeur initiale 0 0 0 0 0 0 0 0

Le tableau suivant donne la valeur des bits ISCx0 et ISCx1 pour configurer le mode de déclenchement associé à l'interruption INTx :

ISCx1 ISCx0 - 0 0 Un niveau bas sur l'entrée INTx
0 1 Un changement d'état sur l'entrée INTx
1 0 Un front descendant sur l'entrée INTx
1 1 Un front montant sur l'entrée INTx
Bluebg.png
Aidesmall.png
À propos de cette image

Exemple


On souhaite déclencher une interruption sur un changement d'état de la patte PD2 (int0), on configurera le registre EICRA comme suit :

EICRA=0x01;  // EICRA= 00000001 (2)


Registre EIMSK

Le registre EIMSK permet d'autoriser ou non les interruptions INT1 et INT0.

EIMSK bit 7 6 5 4 3 2 1 0
Fonction ----- ----- ----- ----- ----- ----- INT1 INT0
Valeur initiale 0 0 0 0 0 0 0 0

Une mise à '1' du bit INTx permet d'autoriser l'interruption associée.

Registre EIFR Exernal Interrupt Flag Register

Le registre EIFR permet d'observer l'état des interruptions INT1 et INT0.

EIFR bit 7 6 5 4 3 2 1 0
Fonction ----- ----- ----- ----- ----- ----- INTF1 INTF0
Valeur initiale 0 0 0 0 0 0 0 0

Le bit INTFx passe à '1' lors du déclenchement de l'interruption.