Chapitre 4: Les interruptions - esprit-AM

Download Report

Transcript Chapitre 4: Les interruptions - esprit-AM

Chapitre 4: Les interruptions
[email protected]
© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
1


Comment
événement ?
prendre
en
compte
un
Comment provoquer une rupture de
séquence d'exécution d'un processus dans
un délai très court ?
Les interruptions
© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
2


Une interruption est un signal déclenché par
un événement interne à la machine ou
externe, provoquant l'arrêt d'un programme
en cours d'exécution à la fin de l'opération
courante, au profit d'un programme plus
prioritaire.
Ensuite, le programme interrompu reprend
son exécution à l'endroit où il avait été
interrompu.
© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
3
1
2
3
4
5
6
•Le programme se déroule normalement.
•L’événement survient.
•Le programme achève l’instruction en cours de traitement.
•Le programme saute à l’adresse de traitement de l’interruption.
•Le programme traite l’interruption.
•Le programme saute à l’instruction qui suit la dernière instruction exécutée
dans le programme principal.
© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
4

Pour déclencher une interruption, deux
conditions doivent être présentes:
1. L’événement en question doit figurer dans la
liste des événements susceptibles de provoquer
une interruption.
2. L’utilisateur doit avoir autorisé l’interruption
© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
5



L’adresse de début d’une interruption est
fixe: 0X04.
Toute interruption provoquera le saut du PC
vers cette adresse.
Le contenu du PC est sauvé sur la pile
interne (8 niveaux).
© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
6



Une interruption ne peut pas être interrompue
par une autre interruption.
La remise des interruptions en service se fait
automatiquement lors du retour de
l’interruption.
Une interruption doit se terminer par
l’instruction RETFIE.
© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
7
© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
8


Le
16F84
est
pauvre
en
sources
d’interruptions si on le compare a d’autres
microcontrôleurs.
Il dispose de 4 sources d’interruptions
possibles ( contre 13 pour le 16F877).
© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
9
1.
2.
3.
4.
TMR0 : Débordement du timer0 (tmr0). Une fois
que le contenu du tmr0 passe de 0xFF à 0x00,
une interruption peut être générée.
EEPROM : cette interruption peut être générée
lorsque l’écriture dans une case EEPROM
interne est terminée.
RB0/INT : Une interruption peut être générée
lorsque, la pin RB0, encore appelée INTerrupt
pin, étant configurée en entrée.
PORTB : De la même manière, une interruption
peut être générée lors du changement d’un
niveau sur une des pins RB4 à RB7.
© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
10
Source: La programmation des PICs par BIGONOFF
© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
11

1.
Ce registre est situé à l’adresse 0x0B dans les
deux banques.
Bit7:GIE Global Interrupt Enable bit.
Il permet de valider ou d’invalider toutes
les interruptions d’une seule fois. Ce bit
correspond donc à notre interrupteur de
validation générale.
© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
12

Bit6:EEIE EE Write Complete Interrupt Enable
bit.
Ce bit permet de valider l’interruption de fin
d’écriture en EEPROM.

Bit5:TOIE TMR0Overflow Interrupt Enable bit.
Valide l’interruption générée par le débordement
du timer0
© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
13

Bit4:INTE RB0/INT Interrupt Enable bit.
Valide l’interruption dans le cas d’une
modification de niveau de la pin RB0.
Remarque: Le bit 6 du registre OPTION_REG détermine
le sens de la transition qui provoque l’interruption (
01 ou 10).

Bit3:RBIE RB Port Change Interrupt Enable bit.
Valide les interruptions si on a changement de
niveau sur une des entrées RB4 à RB7 .
© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
14

Bit2:TOIF TMR0 Overflow Interrupt Flag bit.
C’est un Flag, donc il signale .


Bit1:INTF RB0/INT Interrupt Flag bit.
Signale une transition sur la pin RB0 dans le sens
déterminé.
Bit0:RBIF RB Port Change Interrupt Flag bit.
Signale qu’une des entrées RB4 à RB7 a été
modifiée
© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
15




Un programme en cours d’exécution possède
ses propres variables ( registre status, w,…).
En passant d’un programme a un autre, les
variables changent.
Un programme interrompu doit sauvegarder
ses variables avant de laisser sa place au
programme appelant.
Après l’exécution du programme de
l’interruption, on doit restaurer
l’environnement (registre status, w,…)
© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
16

Le PC est sauvegardé automatiquement.

Le registre status doit être sauvegarder par
la routine d’interruption.


Le registre w va subir des modification lors
de l’exécution de la routine de l’interruption:
il doit être sauvegarder.
Si dans le programme principal et dans la
routine on utilise l’adressage indirect, on doit
sauvegarder le registre FSR.
© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
17


Le registre W doit être sauvegarder en
premier lieu.
Ensuite on sauvegarde le registre status.
 movwf w_temp
 movf STATUS,w ou swapf STATUS,w
 movwf status_temp
© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
18
 movf status_temp,w ;
 movwf STATUS ;
 movf w_temp,w ;

Problème: movwf change le
contenu de STATUS.

© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
19
 movf status_temp,w
 movwf STATUS
 swapf w_temp,f
 swapf w_temp,w
© ESPRIT 2009
H.JEDIDI & M.ABDALLAH
20