7.4 KiB
Intérruptions
Principe d’une interruption
Une interruption est un signal envoyé par un périphérique au processeur pour lui indiquer qu’il a besoin de son attention. Le processeur interrompt alors le programme en cours d’exécution pour traiter l’interruption. Une fois l’interruption traitée, le processeur reprend l’exécution du programme interrompu.
Mécanisme d'une interruption
IRQ : Interrupt ReQuest
INTA : INTerrupt Acknowledge
Process
- Interruption
- Sauvegarde du contexte (Registres et position du programme)
- Run du programme d'interruption
- Retour du programme d'interruption
- Restauration du contexte (Registres et position du programme)
Etat du processeur définit par :
- Programme Counter (
R_{15}) - Status Register
R_0 \to R_4
- IRQ synchronization
- IRQ asynchrone => synchronisation à l'aide d'une bascule D
- Finalisation de l'instruction en cours
- Hardware context
- Sauvegarde du PC (Programme Counter) et SR (Status Register)
- Jump à l'adresse de l'interruption
- Software context
- Sauvegarde des registres
R_0 \to R_4
- Sauvegarde des registres
- Traitement de l'interruption
- Fetch de l'instruction
Table des vecteurs
La table des vecteurs d'interruption est une table qui contient les adresses des routines de traitement des interruptions. Elle est située à une adresse fixe dans la mémoire. Lorsqu’une interruption survient, le processeur utilise le numéro de l’interruption pour accéder à la table des vecteurs et obtenir l’adresse de la routine de traitement correspondante.
IVR : Interrupt Vector Register Le IVR est un registre du processeur qui contient l’adresse de la table des vecteurs d’interruption.
Priorité des interruptions
FIQ : Fast Interrupt reQuest - Interruption de plus haute priorité IRQ : Interrupt ReQuest - Interruption de priorité basse
Mécanisme d'une interruption
Le traitement d'une interruption (exceptions en ARM), nécessite les mécanismes suivants :
- Registre d'états
- Gestion des exceptions
- Plusieurs piles
- Table des vecteurs
- Gestion des priorités
Registre d'états
Le registre d'états (CPSR) contient les informations suivantes :
| M[4..0] | Mode | Notation |
|---|---|---|
| 10000 | User | _usr |
| 10001 | FIQ | _fiq |
| 10010 | IRQ | _irq |
| 10011 | Supervisor | _svc |
| 10111 | Abort | _abt |
| 11011 | Undefined | _und |
| 11111 | System | _sys |
Gestion des exceptions
Les exceptions sont des événements qui interrompent le flux d’exécution normal du processeur. Les exceptions peuvent être de plusieurs types :
| Exception | Mode | Description |
|---|---|---|
| Reset | _svc | Survient lorsque la broche RESET du processeur est activée. A l’enclenchement du système (power-up) ou à la mise sous tension du processeur |
| Undefined instruction | _und | Survient lorsque ni le processeur ni les coprocesseurs associés ne reconnaissent l’instruction courante |
| Software interrupt (SWI) | _svc | Définie par l’utilisateur, cette instruction d’interruption synchrone permet à un programme en mode utilisateur (user) d’accéder à des opérations privilégiées qui ne s’exécutent qu’en mode superviseur (supervisor) |
| Prefetch abort | _abt | Survient lorsque le processeur tente d’exécuter une instruction qui provient d’une adresse mémoire illégale |
| Data abort | _abt | Survient lorsque le processeur tente de lire ou d’écrire une donnée à une adresse mémoire illégale |
| IRQ | _irq | Survient lorsqu’une interruption extérieure au processeur est activée et que le bit I du registre d’états CPRS est mis à 0 |
| FIQ | _fiq | Survient lorsqu’une interruption rapide extérieure au processeur est activée et que le bit F du registre d’états CPRS est mis à 0 |
Piles
Le processeur ARM possède plusieurs piles pour gérer les interruptions. Chaque mode d’exécution possède sa propre pile et donc surtout son propre pointeur de pile.
Table des vecteurs
La table des vecteurs d’interruption est une table qui contient les adresses des routines de traitement des interruptions. Elle est située à une adresse fixe dans la mémoire à l'adresse 0x00000000. Lorsqu’une interruption survient, le processeur utilise le numéro de l’interruption pour accéder à la table des vecteurs et obtenir l’adresse de la routine de traitement correspondante.
| Vector address | Exception type | Exception mode | Priority (1 high, 6 low) |
|---|---|---|---|
| 0x00000000 | Reset | supervisor | 1 |
| 0x00000004 | Undefined instruction | undef | 6 |
| 0x00000008 | Software interrupt (SWI) | supervisor | 6 |
| 0x0000000C | Prefetch abort | abort | 5 |
| 0x00000010 | Data abort | abort | 2 |
| 0x00000014 | Reserved | Not applicable | Not applicable |
| 0x00000018 | Interrupt (IRQ) | irq | 4 |
| 0x0000001C | Fast Interupt (FIQ) | fiq | 3 |
Entrées / Sorties d'une interruption
L'entrée d'une interruption se fait par la broche IRQ ou FIQ du processeur :
- Termine l'instruction en cours
- Sauvegarde du contexte : PC, CPSR
- Met le bit du type d'interruption et le nouveau mode à jour
- Sauvegarde l'addresse de retour (PC - 4) dans le LR du mode
- Saute à l'adresse de la routine d'interruption qui se trouve dans la table des vecteurs
- Sauvegarde les registres de travail
- Exécute la routine d'interruption
La sortie d'une interruption :
- Restaure les registres de travail
- Restaure le SPSR du mode dans le CPSR et simultanément met à jour le PC
- Reprend l'exécution du programme interrompu




