Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
fr:avr:external_interrupts [2010/03/22 12:18] – créée sdeniaudfr:avr:external_interrupts [2020/07/20 12:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +====== Interruptions externes ======
  
 +Les interruptions externes sont une des fonctions périphériques les plus simples. Les AVRs classiques ont de 1 à 8 broches spécifiques, qui sont utilisées pour lancer des interruptions dans le programme quand leur valeur logique change ou lorsqu'elles  sont à un certain état. Puisque cette fonction est d'habitude utilisée pour contrôler des signaux logiques externes, ces broches sont appelées des broches d'interruptions externes.
 +
 +Pour utiliser une interruption externe, la broche doit être configurée entrée standard (elle peut aussi l'être en sortie mais dans ce cas l'interruption ne pourra être réalisée que par l'utilisateur lui-même). Il est ensuite nécessaire d'affecter l'interruption correspondante ainsi que la condition nécessaire à l'exécution de cette interruption externe. Il existe quatre conditions possibles:
 +
 +  * Le zéro logique (tension à 0V)
 +  * Un changement de la valeur logique
 +  * Un front descendant - la valeur logique change de 1 vers 0.
 +  * Un front montant - la valeur logique change de 0 vers 1.
 +
 +
 +Lorsque le mode est configuré en zéro logique, l'interruption est exécutée continuellement aussi longtemps que la broche est à la valeur 0. Pendant cette période l'exécution du programme principal est interrompue.
 +
 +Il existe deux types d'interruptions: les interruptions synchronisées à l'horloge du contrôleur et celle qui sont non synchronisées. Les interruptions synchronisées travaillent en retenant les valeurs des entrées, cela signifie que les changements des valeurs logiques sont trouvés en comparant les valeurs lues de deux cycles d'horloge différents. Si le changement logique du signal intervient plus vite que le cycle de fonctionnement du contrôleur, il se peut que l'interruption ne fonctionne pas correctement ou s'arrête d'elle-même. Les interruptions non synchronisées ne dépendent pas de l'horloge du contrôleur et est alors capable de détecter les modification d'un signal externe plus facilement - le niveau logique doit rester constant au moins 50 ns. ATmega128 contient 4 interruptions externes synchronisées et 4 non synchronisées.
 +
 +<pagebreak>
 +
 +<box 100% round #EEEEEE|Exemple>
 +
 +Tâche: Faire un sorte que la broche numéro 9 (broche 7 du bus E) de l'ATmega128 lance une interruption si sa valeur change. Cette broche correspond à l'interruption externe INT7, à laquelle elle est synchronisée.
 +
 +<code c>
 +#include <avr/interrupt.h>
 +
 +// The code of the external interrupt
 +ISR(INT7_vect)
 +{
 + // Do something
 +}
 +
 +int main()
 +{
 + // Change pin 7 on bus E to an input by changing bit 7 to zero
 + DDRE &= ~(1 << PIN7);
 +
 + // Defining a pull-up resistor to to pin 7 on bus E
 +        // to prevent input floating
 + PORTE |= (1 << PIN7);
 +
 + // Set the interrupt mode to logical change for interrupt 7
 +        // in the external interrupt configuration register
 + EICRB = (1 << ISC70);
 +
 + // Allow external interrupt 7
 + EIMSK |= (1 << INT7);
 +
 + // Allow global interrupts
 + sei();
 +
 + // Endless loop
 + while (1) continue;
 +}
 +</code>
 +
 +</box>
 +
 +En plus des interruptions lancées par de simples broches, si l'AVR a assez de broche il est possible d'utiliser un groupe entier de broches pour lancer des interruptions de changement de valeurs logiques. Ces interruptions sont appelées interruptions de changement de broches. Elles sont exécutées quand la valeur de la dernière broche est modifiée.
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0