Interruptions

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.

  1. 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).

  2. On exécute le traitement d'interruption qui se termine par l'instruction IRET

  3. 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

Chronogramme

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