2ème année second Cycle Ingénieur GEII
Système embarqué
Capteurs & SAD
TP N° 01 :
Entrées/Sorties en mode interruption
Réaliser par :
BERRAHMOUNE Nesrine
Boudali Khadidja
Définition d’une interruption
Une interruption est un événement interne ou externe qui va de manière
chronologique :
1. Arrêter le fonctionnement en cours du programme.
2. Sauvegarder le contexte d’exécution : état du programme en cours
d’instruction (registres et compteur ordinal – program counter)
3. Exécuter une suite d’instruction pour servir l’interruption : routine de
service d’interruption – programme spécifique à l’interruption
4. Restaurer le contexte précédent d’exécution
5. Reprendre le fonctionnement du programme
Classifications des interruptions
Interruptions internes : exceptions
Propres à l’exécution d’un processus
Concernent des appels systèmes
Erreurs d’exécution
Interruptions externes : interruptions
Commandée par les périphériques
Asynchrone / aux instructions en cours
Le déroulement d une interruption
Le traitement d’une interruption par le Cortex M4 comporte trois phases
Le processeur possède deux opératoires
- Thread mode – traitement normal par l
utilisateur (Process SP)
- Handler mode – traitement des exceptions
/interruptions (MSP)
Contrôleur NVIC – Nested Vectored Interrupt Controller
NVIC supporte une interruption non masquable
Le NVIC permet de contrôler 82 sources d’interruptions provenant des
périphériques
Le NVIC interrompt le CPU avec l’IRQ de plus haute priorité •
Le CPU utilise le numéro d’IRQ pour accéder à la routine d’interruption via
son adresse en mémoire
Les registres du NVIC
NVIC_ISERx/NVIC_ICERx – Interrupt Set/Clear Enable Register
NVIC_ISPRx/NVIC_ICPRx – Interrupt Set/Clear Pending Register
NVIC_IABRx – Interrupt Active Bit Register
Gestion des interruptions externe au niveau architecture
EXTI proviennent généralement de
lignes externes – connectées à un
GPIO
23 détecteurs de front pour
synchroniser les évènements et les
interruption délivrés par 240 broches
de GPIO et 7 évènements internes
Multiplexeurs sélectionnent les GPIO comme des lignes
d’interruptions externes EXTI0 à EXTI15
Les entrées des multiplexeurs sont sélectionnées via 4 bits dans le
registre EXTICR[k]
• EXTIx = 0 pour Pax, 1 pour PBx, 2 pour PCx, etc…
• EXTICR[0] pour EXTI3-EXTI0; EXTICR[1] pour EXTI7-EXTI4,
etc…
Les sources sont :
16 interruptions externes
• EXTI0 à EXTI15
7 événements
• EXTI16 = PVD output
• EXTI17 = RTC Alarm Event
• EXTI18 = USB OTG FS Wakeup event
• EXTI19 = Ethernet Wakeup event
• EXTI20 USB OTG HS Wakeup event
• EXTI21 = RTC Tamper and TimeStamp events
• EXTI22 = RTC Wakeup event
Les principaux registres EXTI
EXTI_IMR – interrupt mask register
EXTI_RTSR/FTSR – rising / falling register
EXTI_PR – interrupt / event pending register
Chemin d’une interruption externe
Traitement des interruptions externes sur GPIO
Dans Ce TP on a utilisé le bouton
poussoir en mode « interrupt »
Creation de projet
- Créer un nouveau projet dans
STM32CubeMX
- Sélectionner la carte Nucleo
STM32F446RE
Configuration du Pinout
- GPIO_EXTI13 sur le PC13
- GPIO_Output sur PA5
Configuration du NVIC
Configuration du GPIO
Génération du code
Création d une variable ButtonPressed initialise à l’état 0
Réalisation d une fonction qui value la valeur de la variable booléenne
ButtonPressed en fonction de l'état du bouton poussoir.
On ajoute la boucle while (1) a fin de régir l’état de la LED selon l'action sur le
bouton poussoir.
Réponses aux questions
Partie 1
1. Le fichier 'startup.s' est un fichier d'assemblage utilisé dans presque tous les
projets C intégrés avec l'IDE Keil uVision.
C'est là que l'utilisateur définira les éléments obligatoires, sans lesquels aucun
programme C écrit par l'utilisateur ne sera
compilé.
Il doit
1. Déclarez un pointeur de pile
2. Déclarez une routine Reset_Handler.
3. Définir un minimum de 'Vecteurs''
2. La taille de la pile
On appelle vecteur d’une interruption
l’adresse à laquelle démarre le code (ou la
routine) de cette interruption.
-Elle est définie sur 32 bits
3. l’adresse 0x00 continu la valeur initial de MSP
4. l’action lors du RESET par le
RESET_Handler
1. Première entrée 0x00 contient la
valeur initiale du MSP (Main
Stack Pointeur)
2. Lance la routine depuis l’adresse
0x04 (handler reset)
3. Execution de la routine en mode
Thread
4. Execution du programme principale
Partie 2 :
1. Le fichier stm32f0xx_hal_msp.c contient l'initialisation et la
désinitialisation MSP (routine principale et rappels) du périphérique
utilisé dans l'application utilisateur. Il peut être généré automatiquement
par l'outil STM32CubeMX et modifié ultérieurement.
2. Le fichier stm32f0xx_t.c contient le gestionnaire d'exceptions et la
routine de service d'interruption des périphériques, et appelle
HAL_IncTick() à intervalles réguliers pour incrémenter une variable
locale (déclarée dans stm32f4xx_hal.c) et utilisé comme base de temps
HAL. Par défaut, cette fonction est appelée toutes les 1ms dans Systick
3. le fichier stm32f446xx.h contient tous les composants du
microcontrôleur et leur adresses
4.
Memory map of STM32F446RE
Partie 3
Address of the Flash memory (usable) :
Start Address : 0x08000000
End Address : 0x08080000
Address of the RAM (usable) :
Start Address : 0x20000000
End Address : 0x20020000
Address of Internal Peripherals :
Start Address : 0xE000 0000
End Address : 0xE00F FFFF
R30 : pull-up resistor
R29 : pull-down resistor
C15 : lorsque B1 est poussé, il envoie plusieurs signaux à la fois, les circuits
numériques réagissent à chacun d'eux