Infotro/sem/int (#11)

This commit is contained in:
Fastium authored and GitHub committed 2024-02-06 15:15:56 +01:00
commit a8a085b5aa
15 files changed
+188 -5

No files matched your search

+1
View File
@@ -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
+136
View File
@@ -0,0 +1,136 @@
<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
![mecanisme_interruption.png](medias%2Fmecanisme_interruption.png)
***IRQ*** : Interrupt ReQuest <br>
***INTA*** : INTerrupt Acknowledge <br>
## 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
+3 -3
View File
@@ -3,14 +3,14 @@ Systèmes Embarqués
</h1></header>
# 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
+45
View File
@@ -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"
}
}
}
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

+3 -2
View File
@@ -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)
* [PLA - Programmation en langage assembleur](/infotro/SEm/PLA)
* [ASM - Assembleur ARM](/infotro/SEm/ASM)
* [INT - Interruptions](/infotro/SEm/INT)