diff --git a/infotro/README.md b/infotro/README.md index 458be22..b6f6e71 100644 --- a/infotro/README.md +++ b/infotro/README.md @@ -20,6 +20,7 @@ ## [SEm - Système Embarqué](/infotro/SEm/) - [PLA - Programmation en langage assembleur](/infotro/SEm/PLA.md) - [ASM - Assembleur ARM](/infotro/SEm/ASM.md) +- [INT - Interruptions](/infotro/SEm/INT) # TODOs diff --git a/infotro/SEm/INT.md b/infotro/SEm/INT.md new file mode 100644 index 0000000..1d57ac2 --- /dev/null +++ b/infotro/SEm/INT.md @@ -0,0 +1,136 @@ +

+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 + +![mecanisme_interruption.png](medias%2Fmecanisme_interruption.png) + +***IRQ*** : Interrupt ReQuest
+***INTA*** : INTerrupt Acknowledge
+ +## Process + +![process_bloc.png](medias%2Fprocess_bloc.png) + +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$ + +![process_seq_time.png](medias%2Fprocess_seq_time.png) + +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 : + +![cpsr.png](medias%2Fcpsr.png) + +| 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. + +![registers.png](medias%2Fregisters.png) + +## 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 diff --git a/infotro/SEm/README.md b/infotro/SEm/README.md index 2525782..b57311a 100644 --- a/infotro/SEm/README.md +++ b/infotro/SEm/README.md @@ -3,14 +3,14 @@ Systèmes Embarqués # Assembleur -- [PLA - Programmation en Language Assemleur](/infotro/arm/PLA.md) -- [ASS - ASSembleur ARM](/infotro/arm/ASM.md) +- [PLA - Programmation en Language Assemleur](/infotro/arm/PLA) +- [ASS - ASSembleur ARM](/infotro/arm/ASM) # C - SPR - Sous PRogrammges - PSC - Pointers and Memory in C - LES - Les Entrées-Sorties -- INT - Les INTerruptions +- [INT - Les INTerruptions](/infotro/SEm/INT) - DMA - Direct Memory Access - CAM - Memoire cache diff --git a/infotro/SEm/img/Pasted image 20231116153738.png b/infotro/SEm/medias/Pasted image 20231116153738.png similarity index 100% rename from infotro/SEm/img/Pasted image 20231116153738.png rename to infotro/SEm/medias/Pasted image 20231116153738.png diff --git a/infotro/SEm/img/Pasted image 20231116154303.png b/infotro/SEm/medias/Pasted image 20231116154303.png similarity index 100% rename from infotro/SEm/img/Pasted image 20231116154303.png rename to infotro/SEm/medias/Pasted image 20231116154303.png diff --git a/infotro/SEm/img/Pasted image 20231116154853.png b/infotro/SEm/medias/Pasted image 20231116154853.png similarity index 100% rename from infotro/SEm/img/Pasted image 20231116154853.png rename to infotro/SEm/medias/Pasted image 20231116154853.png diff --git a/infotro/SEm/img/Pasted image 20231116155200.png b/infotro/SEm/medias/Pasted image 20231116155200.png similarity index 100% rename from infotro/SEm/img/Pasted image 20231116155200.png rename to infotro/SEm/medias/Pasted image 20231116155200.png diff --git a/infotro/SEm/medias/cpsr.json b/infotro/SEm/medias/cpsr.json new file mode 100644 index 0000000..ddc197c --- /dev/null +++ b/infotro/SEm/medias/cpsr.json @@ -0,0 +1,45 @@ +{ + "structures": { + "main": { + "bits": 32, + "ranges": { + "31": { + "name": "N", + "description": "Negative / Less Than" + }, + "30" : { + "name": "Z", + "description": "Zero" + }, + "29" : { + "name" : "C", + "description" : "Carry / Borrow / Extend" + }, + "28" : { + "name" : "V", + "description" : "Overflow" + }, + "27-8" : { + "name": "", + "descrpition" : "" + }, + "7" : { + "name" : "I", + "description" : "IRQ disable" + }, + "6" : { + "name" : "F", + "description" : "FIQ disable" + }, + "5" : { + "name" : "T", + "description" : "State bit" + }, + "4-0" : { + "name" : "M4 .. M0", + "description" : "Mode bits" + } + } + } + } +} diff --git a/infotro/SEm/medias/cpsr.png b/infotro/SEm/medias/cpsr.png new file mode 100644 index 0000000..8b5e7ff Binary files /dev/null and b/infotro/SEm/medias/cpsr.png differ diff --git a/infotro/SEm/medias/mecanisme_interruption.png b/infotro/SEm/medias/mecanisme_interruption.png new file mode 100644 index 0000000..d210615 Binary files /dev/null and b/infotro/SEm/medias/mecanisme_interruption.png differ diff --git a/infotro/SEm/medias/process_bloc.png b/infotro/SEm/medias/process_bloc.png new file mode 100644 index 0000000..bfe5ed6 Binary files /dev/null and b/infotro/SEm/medias/process_bloc.png differ diff --git a/infotro/SEm/medias/process_seq.png b/infotro/SEm/medias/process_seq.png new file mode 100644 index 0000000..478d445 Binary files /dev/null and b/infotro/SEm/medias/process_seq.png differ diff --git a/infotro/SEm/medias/process_seq_time.png b/infotro/SEm/medias/process_seq_time.png new file mode 100644 index 0000000..38acc12 Binary files /dev/null and b/infotro/SEm/medias/process_seq_time.png differ diff --git a/infotro/SEm/medias/registers.png b/infotro/SEm/medias/registers.png new file mode 100644 index 0000000..6d979ff Binary files /dev/null and b/infotro/SEm/medias/registers.png differ diff --git a/infotro/_navbar.md b/infotro/_navbar.md index 43c95e2..9ff236a 100644 --- a/infotro/_navbar.md +++ b/infotro/_navbar.md @@ -12,5 +12,6 @@ * [Signaux et échantillonnage](/infotro/Eln/SignauxEtEchantillonnage) * [Filtres](/infotro/Eln/Filtres) * [SEm - Systèmes Embarqués](/infotro/SEm/) - * [PLA - Programmation en langage assembleur](/infotro/SEm/PLA.md) - * [ASM - Assembleur ARM](/infotro/SEm/ASM.md) \ No newline at end of file + * [PLA - Programmation en langage assembleur](/infotro/SEm/PLA) + * [ASM - Assembleur ARM](/infotro/SEm/ASM) + * [INT - Interruptions](/infotro/SEm/INT) \ No newline at end of file