Bonjour,
Je tente de faire fonctionner en C un port parallèle en lecture (mode HighZ input). Le driver du port parallèle est un driver ECP, son adresse est 0x0378, l'OS est WinXP, j'utilise la bibliothèque InpOut32.dll (necessaire pour WinXP). J'utilise les registres SPP 0x0378 (Data Port), 0x0379 (Status Port) et 0x037A (Control Port).
Comme indiqué dans les documentations de la bibliothèque InpOut32.dll, j'utilise les fonctions Inp32 et Out32 provenant du chargement de la dll. Le programme est compilé en VC++ 6, application console. La dll est chargée sans problème. Les fonctions en écriture du port de Data fonctionnent correctement (testées au multimètre, on a bien les 0 et 1 correspondant à 00 et 0xFF).
Je me suis un peu documenté sur le port SPP et pour les ports Bi-directionnels, j'ai vu que l'ecriture de 0x20 dans le Control Register (SPP, 0x037A) etait censée faire passer le port en bidirectionnel (High Z/ Input). J'ai effectivement vu dans les souces que CodeS Sources met à disposition que cela était fait dans un grand nombre d'exemples. J'ai donc codé la séquence suivante :
Out32(PPORT_BASE+2,0x20);
x = Inp32(PPORT_BASE);
printf("Input, read (%04X)= %04X\n",i,x);
A mon grand désespoir, en testant au multimètre le port parallèle, le port n'est pas en High Z et la latch de sortie du port n'est pas tristated (en simple, il sort toujours une tension qui correspond à la dernière valeur ecrite dans le registre de Data). J'ai fait le test avec une préecriture à 00 et 0xFF, dans les deux cas, les valeurs restent après "Out32(PPORT_BASE+2,0x20);" et je ne peut pas imposer une autre tension sans detruire le port.
Quelqu'un aurait-il une idée sur la cause de ceci (driver XP ECP et non SPP, accès aux mauvais registres, mauvaise séquence/timing...). Il est à noter que je n'interface pas d'imprimante ou de scanner, juste une sortie de microcontroleur donc pas de handshake (donc en théorie pas besoin de ECP ou EPP, le mode SPP avec les accès directs par le processeurs sont tout ce dont j'ai besoin).
En remerciant par avance les aimables personnes qui voudront bien me repondre,
Laulau47