Interruptions et contrôleur GIC
Configurer une interruption Zynq de la source au processeur, écrire une ISR courte et analyser la latence.
Interruption et exception
Une interruption provient généralement d'un périphérique. Elle est asynchrone par rapport au programme en cours. Une exception est liée à l'exécution du processeur, par exemple une instruction invalide ou un accès mémoire interdit.
Le processeur sauvegarde un contexte minimal, identifie la cause, exécute une routine de service puis reprend le programme interrompu. Cette routine est appelée ISR, pour Interrupt Service Routine. La table des vecteurs fournit les points d'entrée associés aux exceptions.
Le chemin complet
Une interruption de timer traverse plusieurs niveaux.
- Le timer détecte l'événement et positionne un bit d'état.
- Le timer active sa sortie d'interruption si le masque local l'autorise.
- Le Generic Interrupt Controller, ou GIC, reçoit la requête.
- Le GIC vérifie l'activation, la priorité et la cible processeur.
- Le processeur entre dans le gestionnaire général.
- Le gestionnaire du GIC appelle l'ISR enregistrée pour cet identifiant.
- L'ISR acquitte la source, c'est-à-dire qu'elle efface la cause signalée, avant de rendre la main.
Activer uniquement le GIC ne suffit pas. La source doit également être activée dans le périphérique.

Initialiser le GIC
Le code utilise XScuGic. Il recherche la configuration, initialise l'instance, raccorde le gestionnaire du GIC au processeur puis active les exceptions.
XScuGic gic;
int gic_init(void)
{
XScuGic_Config *config;
int status;