MCU INTERRUPTIONS – EXEMPLE IMPLEMENTATION ATMEGA328
1‐ INTERRUPTIONS‐DEFINITIONS
• Une interruption est un signal (IRQ Request) généré par un événement externe au MPU
• Elle entraine l’arrêt de l’exécution du code en cours et un saut à un sous programme ISR (“Interrupt
Service Routine”) pour traiter l’événement.
• Une fois l’ISR terminée, l’exécution du code reprend là où il avait été suspendu
2‐ INTERRUPTIONS‐GENERALITES
Séquences d’une interruption
o Interrupt Event
o Interrupt Request
o Interrupt Service Routine
Différentes ISR peuvent être gérées selon la plateforme (ex. prés de 25 sur l’ATMEGA328)
Plusieurs événements peuvent être ‘mappées’ à une même routine (ex. changements broches PORTA)
Priorités entre les événements sources d’Interruption
ISR est implémentée dans une fonction sans paramètres ni valeur de retour (void)
En général faire les routines d’Interruption courtes (moins de 15‐20 lignes de code)
3‐ SOURCES D’INTERRUPTION
• Hardware Interrupts
o Utilisé en général pour interagir avec des composants ou périphériques externes
o MCU possède des interfaces de périphériques intégrés
• Software Interrupts
o Déclencher par des commandes logicielles, en général pour des tâches spéciales du système
d’exploitation
• Common hardware interrupt sources
o Input pin change
o Hardware timer overflow or compare‐match
o Peripherals for serial communication: UART, SPI, I2C – Rx data ready, tx ready, tx complete
o ADC conversion complete
o Watchdog timer timeout
4‐ MECANISME D’IMPLEMENTATION
• Créer le vecteur reset du système à .org 0x0000 avec jmp à main
9 .org 0x0000
9 jmp Main
• Créer la table des vecteurs d’interruption
9 .org URXCOaddr
9 jmp myISRHandler
• Préciser la routine ( Handler)
9 myISRHandler:
9 ; ISR code to execute here
9 reti;
• Autoriser les Interruptions globalement dans le ‘main’ ou ailleurs
9 Main:
9 sei; Enable Global Interrupts
• Autoriser les Interruptions spécifiques dans leurs registres de contrôle dans le ‘main’ ou ailleurs
9 in r16, UCSRB
9 ori r16, (1<<RXCIE)
9 out UCSRB, r16