Les interruptions matérielles dans le système processeur 68000

BTS informatique industrielle
David Saint-Mellion
 

Les demandes interruptions par les composants périphériques

Ces interruptions sont produites par un périphériques à l'occasion d'un événement. Elles sont accueillies au niveau du processeur sur les 3 bornes "IPL".

Codage des niveaux de demande d'interruption

 

  • Les demandes d'interruptions, sur les bornes IPL, sont codées en logique négative.
  • Le niveau 0 correspond à aucune demande d'interruption.
  • Le processeur peut accueillir au maximum 7 niveaux de demandes différents
IPL2 IPL1 IPL0  
1 1 1 niveau 0, Pas d'IT
1 1 0 niveau 1
1 0 1 --
1 0 0 --
0 1 1 --
0 1 0 --
0 0 1 niveau 6
0 0 0 Niveau 7, NMI

Masquage des demandes d'IT

Pour qu'une demande soit prise en compte par le processeur, il faut que le niveau de la demande soit supérieur au niveau du masque interruption contenu dans le registre d'état SR.
  • La valeur du masque est portée par les bits I2, I1 et I0 de l'octet haut du SR.
  • Le niveau 7 est non masquable (NMI). C'est à dire que la demande est prise en compte même si le niveau du masque est égal à 7.

Exemple :

 

Un périphérique génère les valeurs 010 sur les bornes /IPL2, /IPL1 et /IPL0.
Dans le SR les Bits I2 I1 et I0 ont pour valeur 110.
La demande de ce périphérique est t'elle prise en compte par le processeur ?

  • Le périphérique génère une demande de niveau 4+0+1=5.
  • Le masque du SR est de niveau 4+2+0 =6.
  • Le niveau de la demande (5) est inférieur au niveau du masque (6), la demande d'interruption est ignorée du processeur.

Remarque : Elle serait prise en compte si le niveau du masque dans le SR avait été au maximum de 4.

 

Traitement vectorisé des interruptions matérielles

L'architecture répartie( voir traitement des événements par interruption ), pour la fourniture du vecteur, est la plus utilisée dans un environnement 68000.

Le processeur 68000 réserve les vecteurs 64 à 255 pour ce traitement ( voir table des vecteurs du 68000 ).

Le N° de vecteur est fourni sur le bus bas bus données (D7-D0). C'est ainsi que les composants périphériques 68xxx sont connectés sur cette partie de bus. Les registres de ces composants sont donc accessibles à des adresses impaires, compte tenu de l'alignement adresses données du 68000.
Le périphérique dispose d'un registre (VR) qui contient le N° de vecteur. Il délivre cette valeur quand la borne /IACK est active ( "0" logique).

Le processeur 68000 signifie à son environnement qu'il demande le N° de vecteur par les informations:

  • FC2=FC1=FC0=1 (code fonction). Le processeur signifie qu'il est dans l'état interruption .
  • A3, A2, A1 (adresses). Le Processeur recopie sur ces lignes le niveau de la demande d'interruption qu'il prend en compte.
  • En annexe, il valide /AS=0 (les informations sur les lignes adresses sont valides), /LDS=0 ( bus bas valide).

Lorsque le processeur a lancé la requête pour obtenir le N° de vecteur, il attend que le périphérique concerné valide l'information /DTACK. Lorsque  /DTACK=0, le processeur échantillonne la données "N° de vecteur".

Principe du traitement vectorisé

Le principe est similaire aux autres traitements d'interruption (voir Processeur 68000, gestion de la mémoire et Interruptions ).

. Le traitement diffère sur 3 points.

  • Le processeur filtre les niveaux de demande en comparant le niveau de la demande au niveau du masque du SR.
  • Le processeur modifie le masque l'IT du SR, en y recopiant le niveau de la demande. Ainsi, les demandes de même niveau sont masquées.
  • Le N° de vecteur est fourni par l'environnement du processeur.

Procédure pour traiter une interruption

Si niveau de la demande est <ou = niveau masque (SR)

alors,

La demande est rejetée. Le processeur poursuit l'opération courante.

sinon,

Le processeur :

  1. Sauve la valeur du SR dans un registre interne.
  2. Supprime le mode trace (bit T du SR mis à 0) et passe en superviseur (bit S du SR mis à 1).
  3. Recopie le niveau de la demande dans le masque AIT de SR.
  4. Sauve le contexte dans la pile et demande le numéro de vecteur.
  5. Va dans la table des vecteurs à l'adresse = N° vecteu x 4 se procurer l'adresse de la première. instruction à exécuter du programme associé à l'interruption.
  6. Exécute ce programme jusqu'à rencontrer l'instruction RTE.
  7. Restitue le contexte antérieur. Il préleve, dans la pile superviseur, d'abord un objet de 16 bits qu'il affecte au SR puis un objet de 32 bits qu'il affecte au PC
  8. Exécute l'instruction pointée par le PC.

Exemple de traitement vectorisé des IT matérielles

Soit un système processeur qui exécute une instruction "Instruction 1". Le compteur programme (PC) pointe sur l'instruction suivante qui se situe à l'adresse 31820h. Le registre d'état SR a pour valeur 0000h. Le pointeur de pile Utilisateur (US) pointe l'adresse 1006. Le pointeur de pile Superviseur (SSP) pointe l'adresse 2008h. Une demande d'interruption de niveau 3 (IPL2=1, IPL1=IPL0=0) apparaît lorsque l'on exécute "Instruction 1". Le programme associé à cette interruption se situe à l'adresse 24000h et le N° de vecteur est 41h.

Situation lorsque la demande d'IT apparaît et prise en compte.

Lorsque le processeur exécute "Instruction1", le PC pointe sur l'instruction suivante en 31820. Le processeur est dans l'état Utilisateur, donc A7 =USP=1006. Le niveau du masque IT vaut 0. Le niveau de la demande IT (3) est supérieur à celui du masque dont l'IT est prise en compte.
A l'apparition de l'interruption, le processeur sauve le SR dans un registre interne. Il passe en superviseur , recopie le niveau de la demande dans le masque IT et le pointeur pile devient donc A7=SSP=2008.

Le processeur demande le N° de vecteur.

Il lance une requête à son environnement pour obtenir le N° de vecteur. A cette fin, Il recopie le niveau de la demande sur les lignes A3, A2, A1 (011) et place A23 à A4 en état haute impédance. Il met les lignes code fonction FC2, FC1, FC0 à "1" (État IT), active /AS (0) et valide /LDS (0). Il est à cet instant en mesure de lire le N° de vecteur sur le bus bas D7-D0. Le Processeur attend que /DTACK=0.

Point de vue composant périphérique.

Quand IACK = 0 et R/W=1, le composant dépose sur le bus le contenu du registre vecteur, active /DTACK en le mettant à 0, attend que /IACK soit dévalider pour désactiver /DTACK, mettre un terme à l'échange et supprimer la demande d'IT (mode automatique).

Lorsque  /DTACK=0, le processeur échantillonne la donnée et met un terme au transfert.

Le processeur sauve le contexte.

Il place dans la pile superviseur le PC et la valeur du SR contenue dans un registre interne du processeur. Le pointeur de pile superviseur est décrémenté de 6.

Le processeur exécute le programme IT.

Le N° de vecteur est 41h. L' adresse du programme traitant l'interruption de niveau 3 se trouve à l'adresse 104h. Le processeur prélève, à cette adresse, un objet de 32 bits qu'il place dans le compteur programme.

Le processeur exécute le programme interruption à partir de l'adresse 240000h.

Lorsqu'il rencontre l'instruction RTE, il restitue le contexte.


Le processeur reprend le traitement du programme interrompu.

Le processeur effectue la reprise du programme interrompu dont l'instruction se situe à l'adresse 31820h.

Remarques

  • Les interruptions de même niveau que celles qui sont en traitement sont masquées
  • En général, la demande d'interruption est levée par le composant périphérique à partir de l'instant où il à délivré le N° de vecteur.  Ce mode de fonctionnement est dit " Automatique"

 

Les moyens matériels mis en œuvres pour les interruptions matérielles

Deux blocs fonctionnels apparaissent. L'un gère les priorités. L'autre gère la demande de N° de vecteur aux composants périphériques.

La gestion des priorités

Ce bloc reçoit, en entrée, les demandes des composants portées par le lignes IRQn. Il produit, en sortie, les informations IPLn.

Les demandes des composants périphériques sont encodées avec une gestion des priorités. Si plusieurs demandes d'interruption, apparaissent simultanément, c'est celle du niveau le plus élevé qui est codée sur les lignes IPLn.

Les moyens utilisés

Une solution programmée (PAL, GAL)

Les composants standards, encodeurs de priorité, comme : 74xx147 ou 74xx148

  • IPL2 = IRQ7*IRQ6*IRQ5*IRQ4

  • IPL1= IRQ7*IRQ6*IRQ3*IRQ2

  • IPL0=IRQ7*IRQ5*IRQ3*IRQ1

Acquittement d'interruption ou la gestion des Demandes de N° vecteurs

Ce bloc fonctionnel est chargé d'activer la borne IAKC du composant dont la demande d'IT est prise en compte par le processeur.
Le bloc réalise une fonction décodage. Il reçoit ,en entrée, les informations A3, A2, A1, FC2, FC1, FC0, /AS et /LDS. Il produit en sortie les informations de demande de N° vecteur aux composants périphériques "IACKi". Il a, au maximum, 7 sorties.

Le bloc décode la valeur du niveau, porté par les 3 lignes adresses A3 à A1. Cette fonction est validée si le processeur est en état IT : FC2=FC1=FC0=1, si les adresses sont valides /AS=0 et si /LDS=0.

Les moyens utilisés

Solution programmée (PAL, GAl):

Solution autour du composant standard :décodeur binaire décimal du type 74xx138.

Exemple d'équation pour /IACK1

IACK1=A3+A2+/A1+AS+LDS+/FC2+/FC1+/FC0

 

 

Le traitement des interruptions en mode autovectorisé

Le processeur calcule le N° de vecteur à partir du niveau de la demande d'interruption.
Le processeur 68000 réserve 7 vecteurs : 25 à 31 pour ce traitement ( voir table des vecteurs du 68000 ).

Cette méthode peut être utilisée pour les composants périphériques qui ne sont pas prévus pour une intégration dans un environnement 68000 comme, par   exemple, les convertisseurs analogiques numériques.

Le processeur calcule le N° de vecteur lorsque sa borne /VPA est activée ("0") pendant le cycle d'obtention du N° de vecteur.

Au niveau de l'architecture une différence apparaît. L'information /IACKn, correspondant au niveau de la demande d'interruption, est connectée sur la borne /VPA du 68000.

Remarque : L'accès au programme est plus rapide car il ya l'économise d'un cycle bus. C'est la solution retenue dans l'environnement VME pour gérer les erreurs système (niveau 7 NMI).