Interruptions
Ph.Leroy
12/12/2020
Interruptions
Besoins
De nombreux équipements comprennent des traitements indépendants les uns des autres; certains de ces traitements doivent être exécutés dans le délai le plus court ou avec une périodicité fixe.
On peut donner de nombreux exemples:
- Détecteur de collision sur un mobile par rapport au gestionnaire d'énergie
- Asservissement d'un moteur sans brosse par rapport à l'affichage d'informations.
Deux exigences émergent la nécessité de suspendre un traitement pour lancer un traitement urgent, et l’impérieuse nécessité que ce traitement urgent ne modifie le traitement non urgent.
De plus on s’aperçoit que le traitement urgent peut être initié soit par un événement extérieur, soit par le microcontrôleur lui-même.
- La détection d'une collision peut être issue d'un télémètre ou d'une butée électro-mécanique (événement extérieur),
- La détection par calcul d'une situation anormale (altitude négative) peut provoquer l’exécution d'un traitement d'urgence (ouverture des parachutes).
Enfin on a le cas où une interruption est demandée alors qu'une interruption est en train de s'exécuter, le microcontrôleur doit décider s'il interrompt l'interruption en cours pour lancer la nouvelle ou s'il doit attendre la fin d'exécution de l'interruption en cours pour lancer la nouvelle. Pour cela on classe les interruptions par niveau de priorité et seule une interruption avec une priorité supérieure peut interrompre une autre priorité.
Définition
Une interruption est donc un traitement particulier initié par un événement extérieur ou l’exécution d'une instruction particulière qui nécessite l'exécution de ce traitement dans le plus court délai.
Traitement
Lorsqu'un événement est levé, le microcontrôleur recherche dans une table s'il existe un traitement actif d'interruption associé à cet événement.
- Dans ce cas si la priorité de l'interruption est supérieure à celle du traitement en cours on interrompt le traitement en cours en sauvegardant sur la pile tous ses registres ( PC, Y, X, A, CC).
- On exécute le traitement d'interruption qui se termine par l'instruction IRET
- On restitue le contexte d'exécution du traitement interrompu en dépilant ses registres ( CC, A, X, Y et PC).
Vecteurs d'interruptions
Les traitants d'interruptions sont rangés dans une table à une adresse particulière dans la mémoire du microcontrôleur (0x8000), on dispose des vecteurs d'interruptions suivants (cf.STM8S105C4/6 STM8S105K4/6 STM8S105S4/6 Access line, 16 MHz STM8S).
| Instruction en mémoire | Interruption |
|---|---|
| INT Start | Reset |
| INT NonHandledInterrupt | trap |
| INT NonHandledInterrupt | irq0 TLI External top level interrupt |
| INT NonHandledInterrupt | irq1 AWU Auto wake up from halt |
| INT NonHandledInterrupt | irq2 CLK Clock Controller |
| INT NonHandledInterrupt | irq3 EXTIO Port A external |
| INT NonHandledInterrupt | irq4 EXTI1 Port B |
| INT EXTI_PORTC_IRQHandler | irq5 EXTI2 Port C |
| INT NonHandledInterrupt | irq6 EXTI3 Port D |
| INT NonHandledInterrupt | irq7 EXTI4 Port E external |
| INT NonHandledInterrupt | irq8 ( reserved ) |
| INT NonHandledInterrupt | irq9 ( reserved ) |
| INT NonHandledInterrupt | irq10 SPI end of transfer |
| INT NonHandledInterrupt | irq11 TIM1 Update/overflow/underflow/trigger/break |
| INT NonHandledInterrupt | irq12 TIM1 Capture/Compare |
| INT NonHandledInterrupt | irq13 TIM2 update/overflow |
| INT NonHandledInterrupt | irq14 TIM2 capture / compare |
| INT NonHandledInterrupt | irq15 TIM3 Update/ overflow |
| INT NonHandledInterrupt | irq16 TIM3 Capture / Compare |
| INT NonHandledInterrupt | irq17 ( reserved ) |
| INT NonHandledInterrupt | irq18 ( reserved ) |
| INT NonHandledInterrupt | irq19 I2C |
| INT NonHandledInterrupt | irq20 Uart2 Tx Complete |
| INT NonHandledInterrupt | irq21 Uart2 Receive Register Data Full |
| INT NonHandledInterrupt | irq22 ADC1 end of conversion |
| INT NonHandledInterrupt | irq23 TIM4 Update/Overflow |
| INT NonHandledInterrupt | irq24 Flash EOP/WR_PG_DIS |
| INT NonHandledInterrupt | irq25 reserved |
| INT NonHandledInterrupt | irq26 reserved |
| INT NonHandledInterrupt | irq27 reserved |
| INT NonHandledInterrupt | irq28 reserved |
| INT NonHandledInterrupt | irq29 reserved |
Priorité d'interruptions
Le micro-controleur garde l'information de l'interruption en cours avec les deux dr(apeaux I0 et I1 du registre de controle (cf.PM0044).
| Interruptability | Priority | I1 | I0 |
|---|---|---|---|
| Interruptable Main | Lowest↕Highest | 1 | 0 |
| Interruptable Level 1 | 0 | 1 | |
| Interruptable Level 2 | 0 | 0 | |
| Non Interruptable | 1 | 1 |