UTBM MI43 Final 2000

Publié par

MI43 FinalMI 43 – FINALNote : les parties 1 et 2 sont à rédiger sur des copies séparéesPartie 1 : envoi de caractères vers une imprimantes via un port parallèleOn souhaite implémenter une fonction qui réalise l'envoie d'un paquet de données vers une imprimante selon le protocoleCentronics (SPP).Description de l'interface du port parallèleAdresse de base : 278hDescription des registres de l'interface :Décalage Registre Accès Description0Dat lecture/ Octet de donnée transféré vers l'imprimanteécriture1 Status lecture Etat du port parallèle et de l'imprimantebits 0 et 1 réservé, généralement à 1bit 2 IRQ#, 0 : interruption demandée par le portbit 3 ERROR#, 0 : une erreur est survenuebit 4 SELECT, 1 : l'imprimante est sélectionnéebit 5 PAPER OUT, 1 : plus de papierbit 6 ACK#, 0 : accusé de réceptionbit 7 BUSY, 0 : imprimante occupée *2 Control lecture/ Contrôle de port parallèle de la ligneécriturebit 0 STROBE#, 1 : active la ligne STROBE **bit 1 Auto LineFeed, 1 : autofeed (retour à la ligne automatique)bit 2 Init, 0 : initialisation de l'imprimante (remettre à un après l'initialisation)bit 3 Select In, 1 : sélection de l'imprimante (doit être à 1 pour envoyer des données)bit 4 Enable IRQ, 1 : active les interruptionsbit 5 Enable bi-direct., 1 : permet la lecture des données sur le port parallèle ***bits 6 et 7 réservés, mettre à 1* inversion matérielle : un 0 dans le registre indique que la ligne est à l'état haut et un 1 indique que la ligne ...
Publié le : jeudi 21 juillet 2011
Lecture(s) : 134
Nombre de pages : 2
Voir plus Voir moins
MI43
MI 43 – FINAL
Note: les parties 1 et 2 sont à rédiger sur des copies séparées
Final
Partie 1 : envoi de caractères vers une imprimantes via un port parallèle On souhaite implémenter une fonction qui réalise l'envoie d'un paquet de données vers une imprimante selon le protocole Centronics (SPP).
Description de l'interface du port parallèle Adresse de base :278h Description des registres de l'interface : Décalage RegistreAccès Description 0 Datalecture/ Octetde donnée transféré vers l'imprimante écriture 1 Statuslecture Etatdu port parallèle et de l'imprimante
bits 0 et 1réservé, généralementà 1 bit 2IRQ#, 0: interruption demandée par le port bit 3ERROR#, 0: une erreur est survenue bit 4SELECT, 1: l'imprimante est sélectionnée bit 5PAPER OUT,1 :plus de papier bit 6ACK#, 0: accusé de réception bit 7BUSY, 0: imprimante occupée * 2 Controlde port parallèle de la lignelecture/ Contrôle écriture bit 0STROBE#, 1: active la ligne STROBE ** bit 1Auto LineFeed,1 : autofeed (retour à la ligne automatique) bit 2Init, 0: initialisation de l'imprimante (remettre à un après l'initialisation) bit 3Select In,1 : sélection de l'imprimante (doit être à 1 pour envoyer des données) bit 4Enable IRQ,1 : active les interruptions bit 5Enable bi-direct.,1 : permet la lecture des données sur le port parallèle *** bits 6 et 7réservés, mettreà 1 * inversion matérielle : un 0 dans le registre indique que la ligne est à l'état haut et un 1 indique que la ligne est à l'état bas. ** il est nécessaire de mettre un 1 pour mettre la ligne STROBE à l'état bas (inversion matérielle)… *** utilisé pour utiliser le port parallèle en bidirectionnel (inutilisé ici mettre à 0)
Fonctionnement du dialogue avec l'imprimante Dialogue STROBE# BUSY ACK# DATA
L'hôte place les données sur le port Il vérifie que la ligne BUSY est désactivée Il active la ligne STROBE#, la maintient durant 1µs et la désactive L'imprimante en réponse active la ligne BUSY signalant qu'elle traite l'octet et ne peut en recevoir d'autre (généralement transfert dans un tampon interne) une fois le caractère traité (de quelques microsecondes à quelques secondes selon le remplissage du tampon de l'imprimante) l'imprimante désactive la ligne BUSY et envoie une impulsion sur la ligne ACK# en la mettant brièvement à l'état bas.
UTBM – Printemps 2000
1/2
Nicolas Lacaille
MI43 Final Interruption La ligne ACK# lorsqu'elle est activée (mise à l'état bas) génère une interruption au niveau du processeur (ci ces dernières sont activées au niveau de l'interface). Cette ligne est activée (et donc une interruption est générée) dans les cas suivant : l'imprimante a traité un caractère, et est prête pour le suivant l'imprimante a terminé son initialisation l'alimentation de l'imprimante a été coupée l'imprimante est hors ligne ou en manque de papier
Travail demandé Un programme qui souhaite imprimer des données appelle la fonctionprinten lui transmettant en argument : -l'adresse des données (supposées contiguës) -le nombre de caractères à envoyer à l'imprimante -l'adresse d'une variable de compte rendu Cette fonctionprintBooléen TRUE : si la requête a été prise en compte, FALSE sinon.Le prototype en C serait deretourne un la forme : BOOLEAN print(char * Buffer, int Nombre, int* résultat)
Valeur de la variable de compte rendu (Resultat) 0 : opération terminée avec succès 1 : opération en cours 2 : plus de papier autre valeur : erreur
L'envoi des donnée s'effectuera de manière asynchrone, c'est à dire que lorsque la fonction print est appelée elle rend la main avant que tout le transfert soit effectué (cela sera au programme appelant d'effectuer un test s'il le souhaite sur la variable Resultat).
La fonction lorsqu'elle est appelée, s'occupe de mettre en place le transfert des données vers l'imprimante initialisation si l'imprimante n'est pas initialisée mise en place du transfert qui s'effectuera au travers d'un dialogue par interruption. retour
1.Détaillez textuellement les opérations à réaliser par la routine print 2.Détaillez textuellement les opérations à réaliser par la routine d'interruption 3.Donnez le pseudo-code (en l'expliquant) des deux routines précédentes en détaillant les structures de données utilisées. 4.Commentaire s'il y en a…
Notes: les routines devront être robustes et donc gérer les erreurs
Primitive du système: Read(adresse) : retourne le contenu de la case mémoire pointée paradresse Write(adresse,donnée) : écritdonnéeà la case mémoire pointée paradresse Wait(n) : attend (inactivité du processeur)nunités de 500 nano-secondes
UTBM – Printemps 2000
2/2
Nicolas Lacaille
Soyez le premier à déposer un commentaire !

17/1000 caractères maximum.