137 lines
7.4 KiB
Markdown
137 lines
7.4 KiB
Markdown
<header><h1>
|
||
Intérruptions
|
||
</h1></header>
|
||
|
||
# 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 <br>
|
||
***INTA*** : INTerrupt Acknowledge <br>
|
||
|
||
## Process
|
||
|
||

|
||
|
||
1. Interruption
|
||
2. Sauvegarde du contexte (Registres et position du programme)
|
||
3. Run du programme d'interruption
|
||
4. Retour du programme d'interruption
|
||
5. 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$
|
||
|
||

|
||
|
||
1. IRQ synchronization
|
||
- IRQ asynchrone => synchronisation à l'aide d'une bascule D
|
||
2. Finalisation de l'instruction en cours
|
||
3. Hardware context
|
||
- Sauvegarde du PC (Programme Counter) et SR (Status Register)
|
||
- Jump à l'adresse de l'interruption
|
||
4. Software context
|
||
- Sauvegarde des registres $R_0 \to R_4$
|
||
5. 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 :
|
||
|
||
1. Termine l'instruction en cours
|
||
2. Sauvegarde du contexte : PC, CPSR
|
||
3. Met le bit du type d'interruption et le nouveau mode à jour
|
||
4. Sauvegarde l'addresse de retour (PC - 4) dans le LR du mode
|
||
5. Saute à l'adresse de la routine d'interruption qui se trouve dans la table des vecteurs
|
||
6. Sauvegarde les registres de travail
|
||
7. Exécute la routine d'interruption
|
||
|
||
La sortie d'une interruption :
|
||
|
||
1. Restaure les registres de travail
|
||
2. Restaure le SPSR du mode dans le CPSR et simultanément met à jour le PC
|
||
3. Reprend l'exécution du programme interrompu
|