IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Introduction au Motorola ColdFire


précédentsommairesuivant

V. Gestion des exceptions

V-A. Mécanisme général

Il existe 256 exceptions possibles sur les ColdFire, dont une dizaine sont réservées à un usage interne. Qu'il s'agisse d'interruptions réservées à des périphériques ou de mécanismes d'erreur, leur déroulement est toujours semblable.

Un départ en exception ne se produit jamais en cours d'exécution d'une instruction. Le processeur finit toujours le traitement en cours avant de commuter le contexte.

  • Le registre d'état est sauvegardé dans un registre interne. Il est en suite modifié. Le bit T (mode Trace) est forcé à 0, le bit S est forcé à 1. Une exception se déroule donc toujours en mode superviseur. Le masque d'interruption est relevé au niveau de la demande. Tout interruption de niveau inférieur ou égal sera donc masquée.
  • Un numéro de vecteur sur 8 bits est associé à la demande.
  • Le Compteur Programme (l'adresse de retour) ainsi que le registre d'état précédemment sauvegardé, sont poussés dans la pile qui est automatiquement alignée
  • Le numéro de vecteur est multiplié par quatre et ajouté au VBR. C'est l'adresse du vecteur. Celui-ci est récupéré et poussé dans le PC.

Les interruptions de niveau 7 ne sont pas masquables.

V-B. Reset

Reset est une interruption non masquable provoquée par la mise en état bas de RSTI ou l'instruction STOP.

Quoique son nom ne le laisse pas penser, reset est l'interruption d'initialisation du processeur.

Toute activité est interrompue. Il n'y a aucune sauvegarde du contexte. Le processeur passe en mode superviseur. Le VBR est forcé à 0. Le vecteur 0 est transféré dans A7 ; le vecteur dans PC. On imagine donc bien que les adresses basses (depuis 0) seront définies en ROM et contiendront le code d'initialisation.

Lorsqu'un processeur est initialisé, les registres et la mémoire ne contiennent pas rien mais n'importe quoi !

V-C. Les erreurs

Vecteur Nom Description
2 Erreur d'accès Accès à une zone mémoire protégée
3 Erreur d'adresse Le processeur tente d'accéder à une instruction sur une adresse impaire
4 Instruction interdite Le processeur ne connaît pas l'opcode qu'on essaye de lui refiler
5 Division par zéro  
8 Violation de privilèges le processeur est en mode utilisateur et tente d'exécuter une instruction privilégiée.
14 Erreur format Se produit lorsqu'on a malencontreusement bidouillé la pile et que l'instruction RTE ne retrouve plus ses petits.

Bien souvent on se dit : "division par zéro ! Moi jamais ..." Et puis un jour la machine plante :-\
Tous les vecteurs d'erreur doivent être initialisés.

V-D. Les périphériques

Le gros des exceptions correspond à ce qu'on appelle des interruptions. Cela permet de dialoguer avec les périphériques sans perdre de temps dans des boucles d'attente et autres scans approximatifs.

Vecteur Nom Description
25 à 31 Auto vecteurs Certains périphériques anciens ne peuvent fournir leur numéro de vecteur. Ces interruptions leurs sont réservées.
64 à 255 Vecteurs interruptions utilisateur Pour les périphériques à même de fournir leur numéro de vecteur.
15 Périphérique non initialisé 15 est la valeur par défaut forcée par l'instruction RESET dans le registre des périphériques donnant le vecteur. Utile pour l'initialisation.
24 Interruption parasite Si un périphérique ne fournit pas son numéro de vecteur.


Nous n'irons pas plus loin sur les périphériques Ce n'est pas notre propos ici.

V-E. Les exceptions programmables

Il est utile de pouvoir déclencher des départs en interruption, pour une raison ou pour une autre. C'est par exemple le seul moyen de revenir en mode superviseur.

Vecteur Nom Description
32 à 47 Vecteur d'instruction TRAP Voir l'exemple ci-dessous
10 et 11 Emulateur de ligne 1010 et émulateur de ligne 1011 Permet d'émuler des instructions qui n'existent pas. L'opcode doit commencer par 1010 ou 1011. Permet par exemple la compatibilité avec le code M68K. Très lent.


Pour illustrer notre propos, regardons l'utilisation de l'instruction TRAP pour revenir en mode superviseur lorsqu'on est utilisateur et inversement.

 
Sélectionnez
	org $20000
 
* Module d'initatlisation du VBR *
 
debut: 	nop
 
	;On va recopier la table des vecteurs à l'adresse 0x40000	
 
	clr.l D0
	move.b #255,D0 ;On place la valeur 255 dans D0 
	movea.l #$5000,A0 ;On place l'origine de la nouvelle table dans D1
 
boucle: move.l D0,D1 ;Copions D0 dans D1
	lsl.l #$2,D1 ;On multiplie D1 par 4
	movea.l D1,A1 ;On obtient l'adresse du vecteur que l'on place dans A1
	move.l (A1),D2 ;On recopie le vecteur dans D2
	move.l D2,(A0,D1) ;Puis en mémoire dans la nouvelle table
	subq.l #1,D0 ;On décremante le numéro de vecteur
fin_b:	bpl boucle ; Tant que ce n'est pas négatif, on continue.
 
	;On veut maintenant que le vecteur 32 soit la case mémoire 0x5080 point vers l'adresse 0x30000
 
	move.l #$30000,D0
	move.l D0,$5080 
 
	;Le VBR doit pointer vers 5000
 
	move.l #$5000,D0
	movec.l D0,VBR
fin: nop
 
*********************************************************************************
 
* Programme de test *
 
test:	trap #0
	bsr test
 
**********************************************************************************
 
* On crée le programme associé à l'instruction trap #0 *
 
	org $30000
 
* Il faut manipuler les valeurs enpilées. On sais qu'un départ en exception empile ceci :
* 16 bits de controles
* 16 bits du SR
* 32 bits du PC
 
mod_t:	bchg.b #5,(2,SP) ; trifouillons la pile
	rte ; obligatoire pour revenir d'exception

précédentsommairesuivant

Copyright © 2005 Joris Dedieu. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.