Premier 8259

publicité
Notes pour le TP
Répertoire des exemples : G:\ISAIP.DOC\tregouet\Irt PESO
Timer
Timer2
Win_scrt
Serie2
Incrémentation d’un compteur par interruption + mise
à jour de l’horloge système grâce à l’ancien
gestionnaire d’interruption d’horloge
Incrémentation d’un compteur par interruption
Sans mise à jour de l’horloge système (l’ancien
gestionnaire d’interruption d’horloge n’est pas appelé)
Gestion de communication sur liaison série en mode
scrutation
Communication sur liaison série en mode interruption
Comment compiler ?
Créer un dossier d:\temp\rs232
Taper les commandes suivantes :
C:
Cd d:\temp\rs232
X:tc
(échap pour passer la page d’information)
Ouvrir le fichier Timer.c
Changer de répertoire actif (File/changedir : d:\temp\rs232)
Compiler
Exécuter dans une fenêtre de commande : d:\temp\rs232\timer.exe
TP / Programmation des Entrées / sorties sur PC
(voir notes à la fin du document)
Objectif 1 :



Modifier timer.c pour vérifier que le compteur est incrémenté 18,5 fois par
seconde
Modifier timer.c pour que la fonction activée par l’interruption d’horloge ne
fasse plus appel à l’ancien gestionnaire de l’événement d’horloge
(fonctionnement identique à Timer2.exe)
Modifier timer.c pour que la fonction activée par l’interruption d’horloge
n’indique plus au contrôleur d’interruption 8259 la fin du traitement de
l’évènement (résultat ?)
Objectif 2 :
1- Comme chaque demande d'interruption peut provenir de plusieurs
interfaces, quel est l'élément qui gère ces demandes et les transmet au
processeur ?
2- Dessiner un schéma représentant cet élément, le processeur et l'interface
8250, avec leurs principales connexions.
3- Comment peut-on interdire la prise en compte de nouvelles interruptions
pendant l'exécution d'un gestionnaire d'interruption ?
4- Que se passe-t-il si une demande d'interruption est faite alors que le
processeur a masqué les interruptions ?
5- Comment le PIC connaît-il le numéro de l'interruption reçue ? Comment ce
numéro est-il transmis au processeur ?


Modifier timer .c pour afficher l’adresse de l’ancien gestionnaire d’interruption
d’horloge : utiliser le format printf ("\t%8.8lx") et vérifier que l’adresse de ce
gestionnaire affichée par x:mft.exe est identique (Mft : afficher FirstMeg +
Interrupt + F3 pour trier par N° INT)
En utilisant MFT, répondre aux questions suivantes :
 Combien y a-t-il de vecteurs d’interruptions ?
 Combien sont utilisés pour les IRQ
(interruptions matérielles gérées par un 8259)
 Un PC AT dispose de 2 circuits 8259 « liés » par un numéro
d’interruption : Compléter le tableau suivant
Processeur
Premier INT Périphérique
8259
connecté
IRQ0
IRQ1
Deuxième
8259
IRQ8
IRQ7
IRQ15
Objectif 3 : Notion d’interruption logicielle
Une interruption logicielle est une fonction du système que l’on peut appeler en connaissant
non pas son nom mais son adresse mémorisée dans un vecteur d’interruption. int86x permet
en langage C d’appeler une fonction dont on connaît le vecteur d’interruption associé.
Int86x sert normalement à appeler une fonction du bios ou du DOS par exemple pour écrire
sur l’écran (0x10) ou lire au clavier (0x16) etc… mais on peut aussi grâce à int86x faire
exécuter une fonction associée à un événement matériel comme dans l’exemple suivant avec
« division par zéro », ce qui revient à simuler l’événement matériel.



Quelle est l’interruption qui traite l’événement division par zéro ?
En utilisant et modifiant le programme interr2.c
o Provoquer l’affichage du message « divide by zero » en appelant explicitement
la fonction associée au vecteur 0x00 (simulation de l’événement, méthode de
l’interruption logicielle)
o Provoquer l’affichage du message « divide by zero » en appelant indirectement
la fonction associée au vecteur 0x00 : programmer une division par zéro
(méthode de l’interruption matérielle)
Changer le message « divide by zero » par le message « Erreur : division par zéro ».
o Quelle méthode utiliser ?
o Le mettre en œuvre et comparer avec la solution de interrup.c
Objectif 4 : Créer un programme de gestion de l’interruption clavier


En s’inspirant de timer.c, créer un programme qui permet de compter les caractères
tapés au clavier
Comment pourrait-on faire pour que la nouvelle fonction de gestion du clavier
convertisse systématiquement les caractères en majuscules ?
Notes complémentaires :
1234-
Créer un dossier c:\temp\rs232
Recopier les fichiers *. de G:\ISAIP.DOC\etudiant\RS232 sur c:\temp\rs232
Ouvrir une fenêtre de commande DOS
Et taper les commandes suivantes pour lancer Turbo C
 X:tc
(échap pour passer la page d’information)
 Ouvrir le fichier Timer.c sur c:\temp\rs232
 Changer de répertoire actif (File/changedir : c:\temp\rs232)
 Compiler
 Exécuter dans une fenêtre de commande : c:\temp\rs232\timer.exe
Téléchargement