Infotro/sem/int (#11)
This commit is contained in:
15 files changed
+188
-5
No files matched your search
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||

|
||||
|
||||
***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
|
||||
@@ -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
|
||||
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -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
@@ -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)
|
||||
Reference in new issue
Block a user