|
L'exécution d'un programme d'interruption de minuterie est déclenchée par une minuterie matérielle atteignant une valeur prédéfinie. Voici un aperçu du processus :
1. Configuration de la minuterie matérielle :
* Initialisation : La minuterie est initialisée avec une valeur spécifique (compte) représentant l'intervalle de temps souhaité. Cela peut impliquer la configuration de registres dans le matériel du minuteur. La minuterie doit également configurer son mode (par exemple, one-shot pour un seul déclencheur, périodique pour les interruptions répétées).
* Source de l'horloge : La minuterie est connectée à une source d'horloge (par exemple, une horloge système). Cette horloge incrémente le compteur du timer.
2. Génération d'interruption de minuterie :
* Le compteur atteint zéro : Au fur et à mesure que l'horloge incrémente le compteur de la minuterie, elle finit par atteindre zéro (ou un nombre de terminaux spécifié). Cet événement déclenche un signal d'interruption matérielle.
* Demande d'interruption (IRQ) : Le temporisateur matériel envoie une demande d'interruption (IRQ) au processeur. Cette demande signale qu'un événement nécessite une attention immédiate.
3. Gestion des interruptions par le processeur :
* Acquittement d'interruption : Le CPU accuse réception de l'interruption, suspendant son exécution en cours. La priorité de l'interruption du minuteur détermine si elle est traitée immédiatement ou après des interruptions de priorité plus élevée.
* Sauvegarde du contexte : Le CPU enregistre l'état du programme actuel (registres, compteur de programme, etc.) sur une pile. Ceci est crucial pour reprendre l’exécution plus tard.
* Tableau vectoriel d'interruption : La CPU consulte la table des vecteurs d'interruption pour localiser l'adresse mémoire du programme de service d'interruption (ISR) associé à l'interruption de minuterie.
* Aller à ISR : Le CPU passe à l'emplacement mémoire de l'ISR de l'interruption de minuterie.
4. Exécution de la routine de service d'interruption (ISR) :
* Code BVR : Il s'agit du morceau de code spécifique conçu pour gérer l'interruption de la minuterie. Ses tâches pourraient inclure :
* Mise à jour d'un compteur : Garder une trace du temps écoulé.
* Basculer une sortie : Contrôler une LED ou un autre périphérique.
* Planification des tâches : Exécuter d'autres fonctions du programme à des intervalles spécifiques.
* Lecture des données du capteur : Échantillonnage des données des capteurs à intervalles réguliers.
* Communication : Envoi/réception de données via un réseau ou un port série.
* Rester bref : Les ISR doivent être aussi courts que possible afin de minimiser la durée d'interruption du programme principal. Les tâches de longue durée doivent être déchargées sur le programme principal une fois que l'ISR a défini un indicateur ou mis à jour une structure de données partagée.
5. Retour d'une interruption :
* Contexte de restauration : L'ISR restaure l'état du CPU précédemment enregistré (registres, compteur de programme, etc.).
* Retour d'interruption (IRET ou RTI) : Une instruction spéciale (IRET ou RTI, selon l'architecture) est exécutée pour rendre le contrôle au programme principal. Le processeur reprend l'exécution là où elle s'était arrêtée avant l'interruption.
Exemple (code conceptuel de type C) :
```c
// Minuterie ISR
annuler timer_isr() {
compteur entier statique non signé =0 ; // Compteur de temps de suivi
compteur++;
if (counter ==1000) { // Vérifiez si 1000 interruptions de minuterie se sont produites
compteur =0 ;
// Effectue une action, par exemple, activer une LED
bascule_led();
}
}
```
Considérations importantes :
* Latence d'interruption : Le temps écoulé entre la demande d'interruption et le début de l'ISR est la latence d'interruption. Il est crucial de maintenir ce niveau bas pour les applications en temps réel.
* Priorité des interruptions : Plusieurs interruptions peuvent se produire simultanément. Le processeur les gère en fonction des priorités qui leur sont attribuées.
* Réentrée : Les ISR doivent être réentrants ; ce qui signifie qu'ils peuvent être à nouveau interrompus avant de terminer leur exécution sans provoquer de corruption des données.
* Ressources partagées : Des mécanismes de synchronisation minutieux (par exemple, sémaphores, mutex) sont nécessaires si l'ISR accède à des ressources partagées également utilisées par le programme principal.
Ce processus s'applique à une large gamme de microcontrôleurs et de systèmes embarqués. Les détails spécifiques (noms de registre, instructions) varient en fonction de l'architecture matérielle.
|