Διασύνδεση της τυποποιημένης παράλληλης θύρας
Εισαγωγή στις παράλληλες θύρες
Η παράλληλη θύρα είναι η συνηθέστερα χρησιμοποιημένη θύρα για τι διασύνδεση απλών εφαρμογών. Αυτή η θύρα θα επιτρέπει την εισαγωγή μέχρι 9 μπιτ ή την εξαγωγή 12 μπιτ σε οποιοδήποτε δεδομένο χρόνο, απαιτώντας κατά συνέπεια ελάχιστα εξωτερικά στοιχεία κυκλώματος για να εφαρμοστεί σε πολλές απλές εφαρμογές. Η θύρα αποτελείται από 4 γραμμές ελέγχου, 5 γραμμές κατάστασης και 8 γραμμές δεδομένων. Βρίσκεται συνήθως στο πίσω μέρος του PC ως D-type 25 θηλυκός σύνδεσμος. Μπορεί επίσης να υπάρξει ένας D-type 25 αρσενικός σύνδεσμος. Αυτή θα είναι όμως μια σειριακή θύρα RS-232 και έτσι, είναι ένας τελείως διαφορετικός τύπος θύρας.
Οι νεώτερες παράλληλες θύρες είναι τυποποιημένες κάτω από το ieee 1284 πρότυπο που παρουσιάστηκε το 1994, Αυτό το πρότυπο καθορίζει 5 τρόπους λειτουργίας που είναι οι ακόλουθοι:
1. Compatibility Mode.
2. Nibble Mode. (Protocol not Described in this Document)
3. Byte Mode. (Protocol not Described in this Document)
4. EPP Mode (Enhanced Parallel Port).
5. ECP Mode (Extended Capabilities Port).
Ο στόχος ήταν να σχεδιαστούν νέοι οδηγοί και συσκευές που θα ήταν συμβατοί μεταξύ τους και
προς τα πίσω συμβατοί στη διασύνδεση τους με μια τυποποιημένη παράλληλη θύρα(SSP).
Η λειτουργίες Compatibility, Nibble & Byte χρησιμοποιούν ακριβώς το τυποποιημένο διαθέσιμο υλικό στις αρχικές παράλληλες κάρτες ενώ οι λειτουργίες του EPP & ECP απαιτούν πρόσθετο υλικό που μπορεί να τρέξει με γρηγορότερες ταχύτητες, ενώ ακόμη όντας προς τα πίσω συμβατό με την τυποποιημένη παράλληλη θύρα.
Η λειτουργία Compatibility ή "Centronics" όπως είναι περισσότερο γνωστή, μπορεί μόνο να στείλει τα στοιχεία εμπρός με μια χαρακτηριστική ταχύτητα 50 kbyte ανά δευτερόλεπτο αλλά μπορεί να είναι και υψηλότερη όπως 150 + kbyte το δευτερόλεπτο. Προκειμένου να παραληφθούν τα στοιχεία, πρέπει να αλλάξετε σε λειτουργία nibble ή byte. Η λειτουργία nibble μπορεί να εισαγάγει (4 μπιτ) στην αντίστροφη κατεύθυνση. Π.χ. από τη συσκευή στον υπολογιστή. Η λειτουργία byte χρησιμοποιεί το αμφίδρομο χαρακτηριστικό γνώρισμα της παράλληλης (που βρίσκεται μόνο σε μερικές κάρτες) για να εισαγάγει μια ψηφιολέξη (8 μπιτ) στην αντίστροφη κατεύθυνση.
Οι παράλληλες EPP & ECP χρησιμοποιούν πρόσθετο υλικό για να παραγάγουν και να διαχειριστούν χειραψία(handshaking). Για να στείλετε ένα byte σε έναν εκτυπωτή (ή σε κάτι παρόμοιο) που χρησιμοποιεί την λειτουργία Compatibility, το λογισμικό πρέπει να κάνει τα εξής:
1. γράψτε το byte στη θύρα δεδομένων.
2. ελέγξτε για να δείτε αν ο εκτυπωτής είναι απασχολημένος. Εάν ο εκτυπωτής είναι απασχολημένος, δεν θα δεχτεί οποιαδήποτε στοιχεία, κατά συνέπεια οποιαδήποτε στοιχεία που γράφονται θα χαθούν.
3. κάντε το Strobe (pin 1) χαμηλό. Αυτό λέει στον εκτυπωτή ότι υπάρχει ένα σωστό στοιχείο όσον αφορά τις γραμμές δεδομένων. (pin 2-9)
4. κάντε το Strobe υψηλό πάλι αφού περιμένετε περίπου 5 uS αφότου κάνατε το Strobe χαμηλό. (Βήμα 3)
Αυτό περιορίζει την ταχύτητα με την οποία η θύρα μπορεί να λειτουργήσει. Οι θύρες του EPP & ECP το προσπερνούν αυτό αφήνοντας τον έλεγχο στο υλικό για να δουν εάν ο εκτυπωτής είναι απασχολημένος και παράγουν ένα strobe ή/και μια κατάλληλη χειραψία. Αυτό σημαίνει ανάγκη για μόνο μια I/O οδηγία να εκτελεσθεί, αυξάνοντας κατά συνέπεια την ταχύτητα. Αυτές οι θύρες μπορούν να στείλουν περίπου 1-2 μεγαμπιτ ανά δευτερόλεπτο. Η θύρα ECP έχει επίσης το πλεονέκτημα ότι χρησιμοποιεί κανάλια DMA και buffers FIFO, κατά συνέπεια τα στοιχεία μπορούν να μεταφερθούν χωρίς τη χρησιμοποίηση των I/O οδηγιών.
Ιδιότητες υλικού
Στην επόμενη σελίδα είναι ένας πίνακας των "εξόδων" του D-type 25 συνδετήρα και το Centronics 34. Ο D-type 25 συνδετήρας είναι ο πιο κοινός συνδετήρας που βρίσκεται στις παράλληλες θύρες των υπολογιστών, ενώ ο συνδετήρας Centronics βρίσκεται συνήθως στους εκτυπωτές. Το ieee 1284 πρότυπο εντούτοις διευκρινίζει 3 διαφορετικούς συνδετήρες για τη χρήση με την παράλληλη θύρα. Ο πρώτος, 1284 type Α είναι ο d-type 25 συνδετήρας που βρίσκεται στο πίσω μέρος των περισσότερων υπολογιστών. Ο 2ος είναι ο 1284 type B που είναι ο συνδετήρας Centronics 36 pin που βρίσκεται στους περισσότερους εκτυπωτές.
Ο Ieee 1284 type C εντούτοις, είναι ένας συνδετήρας 36 αγωγών όπως το Centronics, αλλά μικρότερος. Αυτός ο συνδετήρας θεωρείται ότι έχει έναν καλύτερο σύρτη συνδετήρων (ασφαλίζει καλύτερα), καλύτερες ηλεκτρικές ιδιότητες και είναι ευκολότερος να κατασκευαστεί. Περιέχει επίσης δύο περισσότερα pin για σήματα που μπορούν να χρησιμοποιηθούν για να δουν εάν η άλλη συσκευή που συνδέθηκε, έχει τάση. Οι συνδετήρες type C συστήνονται για νέα σχέδια, έτσι μπορούμε να βρούμε αυτούς τους νέους συνδετήρες στις νέες συσκευές.
Ο ανωτέρω πίνακας χρησιμοποιεί το "n" μπροστά από το όνομα σημάτων για να δείξει ότι το σήμα είναι ενεργό στο χαμηλό π.χ. nError. Εάν ο εκτυπωτής έχει εμφανίσει ένα λάθος αυτή η γραμμή είναι χαμηλή. Αυτή η γραμμή είναι κανονικά υψηλή, εάν λειτουργεί σωστά ο εκτυπωτής. Το " Hardware Inverted" σημαίνει ότι το σήμα αναστρέφεται από το υλικό της παράλληλης κάρτας. Ένα τέτοιο παράδειγμα είναι η Busy γραμμή. Εάν + 5v (ή Logic 1) εφαρμοστεί σε αυτό το pin και το Status register read, θα επιστρέψει 0 στο bit 0 του Status Register.
Η έξοδοι των παράλληλων θυρών είναι κανονικά επίπεδα λογικής TTL. Το επίπεδο τάσης είναι το εύκολο μέρος. Το ρεύμα που μπορεί να βυθίσει και και να στείλει ποικίλλει από θύρα σε θύρα. Οι περισσότερες παράλληλες θύρες υλοποιούνται σε ASIC, μπορούν να τραβήξουν και να στείλουν γύρω στα 12mA. Εντούτοις αυτοί είναι μερικοί από τους αριθμούς που λαμβάνονται από τα φύλλα δεδομένων, sink/source 6mA, source 12mA/ sink 20mA, sink 16mA/ source 4mA, sink / source 12mA. Όπως μπορείτε να δείτε ποικίλλουν αρκετά. Η καλύτερη περίπτωση είναι να χρησιμοποιηθεί ένας buffer, έτσι ώστε να απαιτείτε ελάχιστο ρεύμα από την θύρα .
Centronics
Το Centronics είναι ένα «νέο» πρότυπο για τη μεταφορά των δεδομένων από τον host (PC) στον εκτυπωτή. Η πλειοψηφία των εκτυπωτών χρησιμοποιεί αυτήν την χειραψία(handshake). Αυτή η χειραψία εφαρμόζεται κανονικά χρησιμοποιώντας μια τυπική παράλληλη θύρα με έλεγχο λογισμικού. Παρακάτω είναι ένα απλουστευμένο διάγραμμα του πρωτοκόλλου "Centronics".
Το δεδομένα στέλνονται αρχικά στα pin 2 έως 7. Ο host ελέγχει έπειτα για να δει εάν ο εκτυπωτής είναι απασχολημένος δηλ. η busy γραμμή πρέπει να είναι χαμηλή. Το πρόγραμμα βεβαιώνει έπειτα με το strobe, περιμένει ένα ελάχιστο 1uS και ξανααλλαζει έπειτα το strobe. Τα δεδομένα διαβάζονται κανονικά από τον εκτυπωτή/περιφερειακό στην ανερχόμενη παρυφή του strobe. Ο εκτυπωτής θα δείξει ότι είναι απασχολημένος με την επεξεργασία των δεδομένων μέσω της busy γραμμής. Μόλις δεχτεί ο εκτυπωτής τα δεδομένα, θα επιβεβαιώσει το byte με έναν αρνητικό παλμό για 5μS στη γραμμή nAck.
Αρκετά συχνά ο host θα αγνοήσει τη γραμμή nAck για να κερδίσει χρόνο. Αργότερα στο Extended Capabilities Port, θα δείτε έναν γρήγορο τρόπο Centronics, ο οποίος αφήνει το υλικό να κάνει όλη τη χειραψία για σας. Το μόνο που ο προγραμματιστής πρέπει να κάνει είναι γράφει το byte των δεδομένων στην I/O θύρα. Το υλικό θα ελέγξει για να δει εάν ο εκτυπωτής είναι ασχολημένος και παράγει το strobe. Σημειώστε ότι αυτός ο τρόπος συνήθως δεν ελέγχει το nAck.
Διευθύνσεις θυρών
Η παράλληλη θύρα έχει συνήθως τρεις χρησιμοποιούμενες διευθύνσεις. Αυτές παρατίθενται στον πίνακα 2, παρακάτω. Η διεύθυνση 3BCh εισήχθη αρχικά χρησιμοποιημένη για τις παράλληλες θύρες στις παλαιότερες κάρτες βίντεο. Αυτή η διεύθυνση εξαφανίστηκε έπειτα για μια στιγμή, όταν αφαιρέθηκαν οι παράλληλες θύρες από τις κάρτες βίντεο. Έχουν επανεμφανιστεί τώρα ως επιλογή για τις παράλληλες θύρες που ενσωματώνονται επάνω στις μητρικές κάρτες, στις οποίες η διαμόρφωσή τους μπορεί να αλλάξει χρησιμοποιώντας το BIOS.
LPT1 ορίζεται κανονικά η διεύθυνση βάσεων 378h, ενώ LPT2 ορίζεται η 278h. Εντούτοις αυτό μπορεί να μην συμβαίνει πάντα όπως εξηγείται αργότερα. Η 378h & 278h χρησιμοποιούνται συνήθως για τις παράλληλες θύρες. Ο δείκτης h δείχνει ότι είναι σε δεκαεξαδικό σύστημα. Αυτές οι διευθύνσεις μπορούν να αλλάξουν από μηχάνημα σε μηχάνημα.
Όταν ο υπολογιστής ανοίγεται αρχικά, το BIOS (Basic System Input/Output) θα καθορίσει τον αριθμό θυρών που έχετε και ορίζει τις ετικέτες των συσκευών σε LPT1, LPT2 & LPT3. Το BIOS εξετάζει αρχικά τη διεύθυνση 3BCh. Εάν μια παράλληλη θύρα βρίσκεται εκεί, ορίζεται ως LPT1, έπειτα ψάχνει στη θέση 378h. Εάν μια παράλληλη κάρτα βρεθεί εκεί παίρνει το αμέσως επόμενο διαθέσιμο όνομα. Αυτό ορίζεται σε LPT1 εάν δε βρεθεί κάρτα στην 3BCh , στη συνέχεια συμβαίνει το ίδιο και για την 278h . Επομένως είναι δυνατό να υπάρχει LPT2 στην 378h και όχι στην αναμενόμενη διεύθυνση 278h.
Αυτό που μπορεί να κάνει αυτήν την διαδικασία ακόμη πιο πολύπλοκη, είναι ότι μερικοί κατασκευαστές των παράλληλων καρτών, έχουν jumpers που επιτρέπουν σε σας να θέσετε τη θύρα σε LPT1, LPT2, LPT3. Τώρα ποια διεύθυνση είναι LPT1; - Στην πλειοψηφία των καρτών η LPT1 είναι η 378h, και LPT2 η 278h, αλλά μερικοί θα χρησιμοποιήσουν την 3BCh ως LPT1, 378h ως LPT2 και 278h σαν LPT3.
Η ανάθεση των ονομασιών LPT1, LPT2 & LPT3 δεν πρέπει να ανησυχούν αυτούς που επιθυμούν να διασυνδέσουν τις συσκευές στα PC τους. Τις περισσότερες φορές η διεύθυνση βάσης χρησιμοποιείται για να διασυνδέσει τη θύρα, παρά το όνομα LPT1 κ.λπ.. Εντούτοις εάν θελήσετε να βρείτε τη διεύθυνση LPT1 ή οποιεσδήποτε από τις συσκευές, μπορείτε να χρησιμοποιήσετε έναν πίνακα αντιστοίχισης που παρέχεται από το BIOS. Όταν το BIOS ορίζει τις διευθύνσεις στις συσκευές εκτυπωτών σας, αποθηκεύει τη διεύθυνση στις συγκεκριμένες θέσεις στη μνήμη, έτσι μπορούμε να τους βρούμε.
Note 1 : Address 0000:040E in the BIOS Data Area may be used as the Extended Bios Data Area in PS/2 and newer Bioses, and thus this field may be invalid.
Ο ανωτέρω πίνακας,, πίνακας 3, παρουσιάζει τη διεύθυνση στην οποία μπορούμε να βρούμε τις διευθύνσεις της θύρας των εκτυπωτών στην περιοχή δεδομένων του BIOS. Κάθε διεύθυνση θα καταλάβει 2 byte. Το ακόλουθο πρόγραμμα σε C, επιδεικνύει πώς μπορείτε να διαβάσετε αυτές τις θέσεις για να λάβετε τις διευθύνσεις θυρών των εκτυπωτών σας.
#include <stdio.h>
#include <dos.h>
void main(void)
unsigned int far *ptraddr; /* Pointer to location of Port Addresses */
unsigned int address; /* Address of Port */
int a;
ptraddr=(unsigned int far *)0x00000408;
for (a = 0; a < 3; a++)
address = *ptraddr;
if (address == 0)
printf("No port found for LPT%d ",a+1);
else
printf("Address assigned to LPT%d is %Xh",a+1,address); *ptraddr++;
καταχωρητες λογισμικού - τυποποιημένης παράλληλης θύρας (SSP)
Note 1 : If the Port is bi-directional then Read and Write Operations can be performed on the Data Register.
Η διεύθυνση βάσης, αποκαλούμενη συνήθως Data Port ή Data Register χρησιμοποιείται απλά για την αποστολή δεδομένων μέσω της παράλληλης θύρας (pin 2-9). Αυτός ο καταχωρητής είναι κανονικά μόνο εγγράψιμος(write only). Εάν διαβάζετε από τη θύρα, θα πάρετε το τελευταίο byte που στάλθηκε. Ωστόσο εάν η θύρα σας είναι αμφίδρομης, επικοινωνίας μπορείτε να λάβετε δεδομένα σε αυτήν την διεύθυνση. Δείτε τις Bi-directional Ports για περισσότερες λεπτομέρειες.
Η Status Port (η διεύθυνση βάσης + 1) είναι μια θύρα που μπορεί μόνο να διαβαστεί. Οποιαδήποτε στοιχεία γράφονται σε αυτήν την θύρα θα αγνοηθούν. Η Status Port αποτελείται από 5 γραμμές εισόδου (pin 10,11,12,13 & 15), έναν καταχωρητή IRQ και δύο δεσμευμένα μπιτ. Σημειώστε ότι το bit 7 (busy) είναι μια ενεργός χαμηλή είσοδος. Π.χ. Εάν το bit 7 παρουσιάσει μια λογική 0, αυτό σημαίνει πως στο pin 11 υπάρχει μια τάση +5V. Πιθανόν και στο bit 2 (nIRQ). Εάν αυτό το bit είναι "1" σημαίνει ότι δεν έχει εμφανιστεί διακοπή.
Η Control Port (ή διεύθυνση βάσης + 2) προορίζεται μόνο για εγγραφή δεδομένων. Όταν ένας εκτυπωτής συνδέεται με την παράλληλη θύρα, τέσσερα "control" χρησιμοποιούνται. Αυτά είναι το strobe, auto Linefeed, initialize and Select Printer, οι οποίοι είναι όλοι ανάστροφοι εκτός από το initialize.
Ο εκτυπωτής δεν θα έστελνε ένα σήμα για να εκκινήσει τον υπολογιστή, ούτε θα έλεγε στον υπολογιστή να χρησιμοποιήσει το Auto Line Feed. Εντούτοις αυτά τα τέσσερα pins μπορούν επίσης να χρησιμοποιηθούν για είσοδοι. Εάν ο υπολογιστής έχει τοποθετήσει ένα pin υψηλό (π.χ. + 5v) και η συσκευή σας θέλει να την κάνει χαμηλή, εξορισμού θα προκαλέσει βραχυκύκλωμα, προκαλώντας μια σύγκρουση(conflict) σε εκείνο το pin. Επομένως αυτές οι γραμμές είναι είσοδοι "ανοικτού συλλέκτη" (open collector) (ή open drain για τις συσκευές CMOS). Αυτό σημαίνει ότι έχει δύο καταστάσεις. Μια χαμηλή κατάσταση (0v) και μια υψηλής αντίστασης (ανοικτό κύκλωμα).
Κανονικά η θύρα του εκτυπωτή θα έχει εσωτερικές pull-up αντιστάσεις, αλλά όπως θα αναμένατε, όχι όλες. Μερικές μπορεί απλά να έχουν εξόδους open-collector, ενώ άλλες μπορούν ακόμη και να έχουν απλές εξόδους. Προκειμένου να γίνει η εργασία των συσκευών σας σωστά για όσο το δυνατόν περισσότερες θύρες εκτυπωτών, μπορείτε να χρησιμοποιήσετε μια εξωτερική αντίσταση.
Μια εξωτερική αντίσταση 4.7k μπορεί να χρησιμοποιηθεί για να τραβήξει το pin υψηλα. Δεν θα πρέπει να χρησιμοποιήσετε χαμηλότερη τιμή, ακριβώς για την περίπτωση που έχετε ήδη μια εσωτερική pull-up αντίσταση, δεδομένου ότι η εξωτερική αντίσταση θα ενεργούσε παράλληλα δίνοντας έτσι, μια χαμηλότερη συνολική αντίσταση. Όταν βρίσκετε σε κατάσταση υψηλής αντίστασης, το pin στην παράλληλη θύρα είναι σε υψηλό (+ 5v). Σε αυτήν την κατάσταση αν η εξωτερική συσκευή τραβήξει το pin χαμηλά, τότε η τιμή που θα διαβαστεί θα είναι 0 . μ'αυτόν τον τρόπο τα 4 pin του control port μπορεί να χρησιμοποιηθούν για την αμφίδρομη μεταφορά δεδομένων. Εντούτοις το control port πρέπει να τεθεί σε xxxx0100 για να είναι σε θέση να διαβάσει τα δεδομένα, το οποίο σημαίνει ότι όλα τα pins θα είναι + 5v στη θύρα έτσι ώστε να μπορείτε να το τραβήξετε χαμηλά στη γείωση gnd (λογική 0).
Τα pin 4 & 5 είναι εσωτερικοί έλεγχοι. Το pin 4 θα επιτρέψει το IRQ (βλ. Using the Parallel PortsIRQ) και το pin 5 θα επιτρέψει την αμφίδρομη επικοινωνία των θυρών. ότι μπορείτε δηλαδή να εισαγάγετε 8 μπιτ χρησιμοποιώντας τα DATA0-7. Αυτός ο τρόπος είναι μόνο δυνατός εάν η κάρτα σας τον υποστηρίζει. Τα pin 6 & 7 είναι δεσμευμένα. Οποιοσδήποτε εγγραφή σε αυτά τα δύο μπιτ θα αγνοηθεί.
Αμφίδρομες θύρες
Το σχηματικό διάγραμμα παρακάτω, παρουσιάζει μια απλουστευμένη μορφή του Data Register της παράλληλης θύρας. Οι κανονικές παράλληλες θύρες είναι κατασκευασμένες με λογική 74LS. Αυτές τις μέρες πλέων αυτό υλοποιείτε σε ένα ASIC, αλλά η θεωρία της λειτουργίας του είναι ακόμα η ίδια.
Οι nonBi-Directional θύρες κατασκευάστηκαν με την χρησιμοποιώντας 74LS374 όπου το «output enable» είναι πάντα χαμηλό, κατά συνέπεια η Data Port χρησιμοποιείτε πάντα για έξοδος μόνο. Όταν διαβάζετε τον Data Register της παράλληλης θύρας, τα δεδομένα προέρχονται από το 74LS374 που συνδέεται επίσης με τα Data pin. Τώρα εάν μπορείτε να «υπεροδηγησετε» τα '374 μπορείτε αποτελεσματικά να έχετε μια αμφίδρομο θύρα. (ή μια θύρα εισαγωγής μόνο, αν κάψετε τα latche's του output!)
Οι αμφίδρομες θύρες χρησιμοποιούν το bit 5 της Control Port συνδεμένη με το OE των 374, έτσι ώστε οδηγοί εξόδους μπορούν να κλείσουν. Μ'αυτόν τον τρόπο μπορείτε να διαβάσετε τα δεδομένα που βρίσκονται στα Data Pins της θύρας, χωρίς την ύπαρξη συγκρούσεων(conflict) και υπερβολικών ρευμάτων.
Το bit 5 της Control Port επιτρέπει ή θέτει εκτός λειτουργίας την αμφίδρομη λειτουργία της παράλληλης θύρας. Αυτό είναι μόνο διαθέσιμο στις αληθινές αμφίδρομες θύρες. Όταν αυτό το bit τίθεται σε ένα, τα pin 2 έως 9 πηγαίνουν σε κατάσταση υψηλής αντίστασης. Σε αυτήν την κατάσταση μπορείτε να εισαγάγετε τα δεδομένα σε αυτές τις γραμμές και να τα ανακτήσετε από το DataPort (διεύθυνση βάσεων). Οποιαδήποτε δεδομένα γράφονται στη Data Port θα αποθηκευτούν αλλά δεν θα είναι διαθέσιμα στα Data Pin. Για να κλείσετε την αμφίδρομη επικοινωνία, κάντε το pin 5 της Control Port "0".
Ωστόσο δεν συμπεριφέρονται όλες οι θύρες με τον ίδιο τρόπο. Άλλες θύρες μπορεί να απαιτήσουν το bit 6 του Control Port να γίνει "1" για να επιτρέψουν τον αμφίδρομο τρόπο και το pin 5 για να απενεργοποιήσουν τον αμφίδρομο τρόπο, διαφορετικοί κατασκευαστές εφαρμόζουν τις αμφίδρομες θύρες τους με διαφορετικούς τρόπους. Εάν επιθυμείτε να χρησιμοποιήσετε την αμφίδρομο θύρα σας για είσοδο δεδομένων, εξετάστε με έναν ελεγκτή λογικής ή το πολύμετρο για να σιγουρευτείτε πρώτα ότι είναι σε κατάσταση εισόδου.
Χρησιμοποίηση της παράλληλης θύρας για την εισαγωγή 8 μπιτ
Εάν η παράλληλη θύρα σας δεν υποστηρίζει τον αμφίδρομο τρόπο, μην απογοητεύεστε. Μπορείτε να εισαγάγετε ένα μέγιστο 9 μπιτ σε οποιοδήποτε δεδομένο χρόνο. Για να το κάνετε αυτό μπορείτε να χρησιμοποιήσετε τις 5 γραμμές εισαγωγής του Status Port και τις 4 γραμμές εισόδου (ανοικτού συλλέκτη) του Control Port.
Οι είσοδοι στην παράλληλη θύρα έχουν επιλεχτεί υπό αυτήν τη μορφή, για να καταστήσουν τη ζωή ευκολότερη για μας. Το Pin Busy συμβαίνει να είναι το MSB (pin 7) του Status Port, κατόπιν σε φθίνουσα σειρά έρχεται το ack, Paper Out και Select, αποτελώντας το σημαντικότερο nibble του Control Port. Οι γραμμές πάνω από τα ονόματα χρησιμοποιούνται για να αντιπροσωπεύσουν ποιες είσοδοι αναστρέφονται από το υλικό, δηλ.τα + 5v θα διαβαστούν σαν 0 από τον καταχωρητη, ενώ gnd θα διαβάσει σαν 1. Το Status Port έχει μόνο μια ανάστροφη είσοδο.
Το Control Port χρησιμοποιείτε για να διαβαστεί το low nibble. Όπως περιγράφεται πριν, το Control Port έχει εξόδους ανοιχτού συλλέκτη, δηλ. δύο καταστάσεις, υψηλής αντίστασης και gnd. Εάν συνδέσουμε στις εισόδους μας άμεσα με τη θύρα (παραδείγματος χάριν ένα ADC0804) , ένα conflict θα συμβεί εάν η είσοδος είναι υψηλή και η θύρα προσπαθεί να την τραβήξει κάτω. Επομένως χρησιμοποιούμε τους αναστροφείς ανοικτού συλλέκτη.
Εντούτοις αυτό δεν είναι πάντα απαραίτητο. Εάν συνδέαμε απευθείας μονοπολους διακόπτες στη θύρα με pull-up αντιστάσεις, δεν υπάρχει καμία ανάγκη να ασχοληθείτε με αυτήν την προστασία. Επίσης εάν το λογισμικό σας αρχικοποιήσει το Control Port με xxxx0100 έτσι ώστε όλες οι καρφίτσες στο Control Port να είναι υψηλές, τότε μπορεί πάλι να είναι περιττό. Εάν εντούτοις υπάρχει συσκευή συνδεμένη στη θύρα πριν από την αρχικοποίηση από το software της θύρας τότε πιθανών να υπάρχει πρόβλημα.
Ένα άλλο πρόβλημα που πρέπει να γνωρίζετε είναι οι pull-up αντιστάτες στο Control Port. Ο μέσος pull-up αντιστάτης είναι 4.7k. Προκειμένου να τραβήξετε τη γραμμή χαμηλά, η συσκευή σας θα πρέπει να βυθίσει 1mA, το οποίο μερικές χαμηλές τροφοδοτημένες συσκευές μπορούν να δυσκολευτούν να κάνουν. Τώρα τι συμβαίνει εάν υποδείξω ότι μερικές θύρες έχουν 1K Pull-up αντιστάτες; Ναι, υπάρχουν τέτοιες κάρτες. Η συσκευή σας πρέπει τώρα να βυθίσει 5mA. Περισσότεροι λόγοι να χρησιμοποιηθούν οι αναστροφείς ανοικτού συλλέκτη.
Οι αναστροφείς ανοικτού συλλέκτη επιλέχτηκαν πέρα από τους buffer και με το δεδομένο ότι είναι δημοφιλέστεροι, και έτσι ευκολότεροι να βρεθούν. Δεν υπάρχει κανένας λόγος, για να μην τους χρησιμοποιήσετε. Μια άλλη δυνατότητα είναι να χρησιμοποιηθούν τρανζίστορ.
Η εισαγωγή, D3 συνδέεται μέσω του αναστροφέα με το Select Printer. Το pin Select Printer συμβαίνει ακριβώς να είναι pin 3 του Control Port. D2, D1 & D0 συνδέονται με Init, Auto LineFeed και strobe, για να αποτελέσει αντίστοιχα το χαμηλό nibble. Τώρα που έγινε αυτό, το μόνο που πρέπει να κάνουμε είναι να «φτιάξουμε» το byte χρησιμοποιώντας το λογισμικό. Το πρώτο πράγμα που πρέπει να κάνουμε είναι να γράψουμε xxxx0100 στο Control Port. Αυτό τοποθετεί όλες τις γραμμές θυρών ελέγχου υψηλα και, έτσι μπορούν να τραβηχτούν κάτω από τα δεδομένα εισόδου.
outportb(CONTROL, inportb(CONTROL) & 0xF0 | 0x04);
Τώρα που έγινε αυτό, μπορούμε να διαβάσουμε το σημαντικότερο nibble. Αυτό συμβαίνει ακριβώς να είναι το σημαντικότερο nibble του Status Port. Δεδομένου ότι ενδιαφερόμαστε μόνο για το MSnibble θα χρησιμοποιήσουμε μια μάσκα AND με 0xF0 στα αποτελέσματα, έτσι ώστε το LSnibble να είναι 0. Το Busy θα αναστραφεί από το υλικό, αλλά δεν θα ανησυχήσουμε για αυτό τώρα. Μόλις κατασκευαστούν οι δύο ψηφιολέξεις(byte), μπορούμε να κερδίσουμε διπλά από την αναστροφή Busy και Init συγχρόνως.
a = (inportb(STATUS) & 0xF0); /* Read MSnibble */
Μπορούμε τώρα να διαβάσουμε και το LSnibble. Αυτό συμβαίνει να είναι ακριβώς το LSnibble του Control Port - πόσο βολικά! Αυτή τη φορά δεν ενδιαφερόμαστε για το MSnibble της θύρας, κατά συνέπεια κάνουμε AND το αποτέλεσμα με 0x0F για να καθαρίσουμε το MSnibble. Μόλις γίνει αυτό, είναι ώρα να συνδυαστούν οι δύο ψηφιολέξεις από κοινού. Αυτό γίνεται κάνοντας OR τις δύο ψηφιολέξεις. Αυτό μας αφήνει τώρα με μια ψηφιολέξη, εντούτοις δεν είμαστε έτοιμοι ακόμα. Τα bit 2 και 7 είναι ανεστραμμένα. Αυτό ξεπερνιέται κάνοντας XOR την ψηφιολέξη με 0x84, το οποίο αναστρέφει τα δύο μπιτ.
a = a |(inportb(CONTROL) & 0x0F); /* Read LSnibble */
a = a ^0x84; /* Toggle Bit 2 & 7 */
Σημείωση: Μερικές θύρες ελέγχου δεν είναι ανοικτού συλλέκτη, αλλά έχουν απλές εξόδους. Αυτό είναι επίσης η περίπτωση με τις θύρες EPP και ECP. Κανονικά όταν τοποθετείτε μια παράλληλη θύρας στον τρόπο ECP ή του EPP, το Control Port γίνεται απλή(totem pole output) έξοδος μόνο. Τώρα τι συμβαίνει εάν συνδέετε τη συσκευή σας με την παράλληλη θύρα σε αυτόν τον τρόπο; Επομένως, για χάρη της φορητότητας συστήνω το επόμενο κύκλωμα, η ανάγνωση nibble σε έναν χρόνο.
Nibble Mode
Ο nibble τρόπος είναι ο προτιμημένος τρόπος της ανάγνωσης 8 μπιτ δεδομένων χωρίς την τοποθέτηση της θύρας στον αμφίδρομο τρόπο και χρησιμοποίηση των γραμμών Data. Ο τρόπος χρησιμοποιεί Quad 2 line to 1 line multiplexer για να διαβάσει ένα nibble δεδομένων σε έναν χρόνο. Κατόπιν "μεταπηδά" στον άλλο και διαβάζει το άλλο nibble. Το λογισμικό μπορεί έπειτα να χρησιμοποιηθεί για να κατασκευαστεί από τα δύο nibble ένα byte. Το μόνο μειονέκτημα αυτής της τεχνικής είναι ότι είναι πιο αργή. Απαιτεί τώρα μερικές I/O οδηγίες για να διαβάσει τη μια ψηφιολέξη, και απαιτεί τη χρήση ενός εξωτερικού ολοκληρωμένου κυκλώματος.
Η λειτουργία του 74LS157, Quad 2 line to 1 line multiplexer είναι αρκετά απλή. Ενεργεί απλά ως τέσσερις διακόπτες. Όταν η εισαγωγή A/B είναι χαμηλή, οι εισαγωγές Α επιλέγονται. Π.χ. 1A περνά μέσω 1Y, το 2Α κατευθείαν στο 2Y κ.λπ.... Όταν το A/B είναι υψηλό, οι εισαγωγές Β επιλέγονται. Τα Pin Υ συνδέονται στο Status Port της παράλληλης θύρας, με έναν τέτοιο τρόπο ώστε να αντιπροσωπεύει το MSnibble του Status Register. Ενώ αυτό δεν είναι απαραίτητο, καθιστά το λογισμικό ευκολότερο.
Για να χρησιμοποιήσουμε αυτό το κύκλωμα, πρώτα πρέπει να αρχικοποιήσουμε τον πολυκλαδωτη να μεταφέρει είτε το Α είτε το Β. Θα διαβάσουμε το LSnibble πρώτα, κατά συνέπεια πρέπει να τοποθετήσουμε το A/B χαμηλό. Το strobe είναι ανεστραμμένο, κατά συνέπεια πρέπει να θέσουμε σε 1 το bit 0 του Control Port για να πάρουμε έναν χαμηλό στο Pin 1.
outportb(CONTROL, inportb(CONTROL) | 0x01); /* Select Low Nibble (A)*/
Αφού το LSnibble έχει επιλεχτεί, μπορούμε να διαβάσουμε το LSnibble από το Status Port. Σημειώστε ότι η Busy γραμμή είναι ανεστραμμένη, εντούτοις δεν θα την αντιμετωπίσουμε ακόμα. Ενδιαφερόμαστε μόνο για το MSnibble του αποτελέσματος, κατά συνέπεια κάνουμε AND το αποτέλεσμα με 0xF0, για να καθαρίσουμε το LSnibble.
a = (inportb(STATUS) & 0xF0); /* Read Low Nibble */
Τώρα είναι ώρα να μετατοπίσουμε το nibble που μόλις διάβασε στο LSnibble μιας μεταβλητής a,
a = a >> 4; /* Shift Right 4 Bits */
Είμαστε τώρα στο ήμισυ εκεί. Είναι ώρα να πάρουμε το MSnibble, κατά συνέπεια πρέπει να αντιστρέψουμε τον πολυκλαδωτη για να επιλέξουμε τις εισόδους Β. Κατόπιν μπορούμε να διαβάσουμε το MSnibble και να βάλουμε τα δύο μαζί για να κάνουμε μια ψηφιολέξη,
outportb(CONTROL, inportb(CONTROL) & OxFE); /* Select High Nibble (B)*/
a = a |(inportb(STATUS) & 0xF0); /* Read High Nibble */
byte = byte ^ 0x88;
Οι τελευταίες αντιστροφές των δύο γραμμών ανέστρεψαν τα bit που διαβάστηκαν μέσα στην Busy Line. Μπορεί να είναι απαραίτητο να προστεθούν καθυστερήσεις στη διαδικασία, εάν τα αποτελέσματα που επιστρέφονται είναι ανακριβή.
Χρησιμοποιώντας την διακοπή της παράλληλης θύρας (IRQ)
Η Λειτουργία IRQ (Interrupt ReQuest) της παράλληλης θύρας δεν χρησιμοποιείται για την εκτύπωση κάτω από το DOS ή τα Windows. Οι πρόωρες εκδόσεις OS-2 τους χρησιμοποίησαν, αλλά όχι πια. Οι διακοπές είναι καλές κατά τη διασύνδεση συσκευών ελέγχου όπως οι συναγερμοί υψηλής θερμοκρασίας κ.λπ..., όπου δεν ξέρετε πότε πρόκειται να ενεργοποιηθεί. Είναι αποδοτικότερο να υπάρχει ένα αίτημα διακοπής παρά το λογισμικό να διαβάζει τη θύρα τακτικά για να δει εάν κάτι έχει αλλάξει. Αυτό είναι ακόμα πιο αξιοπρόσεχτο εάν χρησιμοποιείτε τον υπολογιστή σας για άλλες διεργασίες, όπως με ένα πολλαπλών καθηκόντων(multitasking) λειτουργικό σύστημα.
Το interrupt της παράλληλης θύρας είναι κανονικά IRQ5 ή IRQ7 αλλά μπορεί να είναι κάτι άλλο εάν αυτά είναι σε χρήση. Μπορεί επίσης να είναι δυνατό οι διακοπές να είναι τελείως εκτός λειτουργίας στην κάρτα, εάν η κάρτα χρησιμοποιείτε μόνο για εκτύπωση. Η διακοπή της παράλληλης θύρας μπορεί να τεθεί εκτός λειτουργίας και να επιτραπεί χρησιμοποιώντας το bit 4 του Control Register, "Enable IRQ Via Ack Line". Μόλις επιτραπούν οι διακοπές, μια διακοπή θα εμφανιστεί όταν πάμε από μια χαμηλή σε μια υψηλή μετάβαση (rising edge) του nACK. Εντούτοις όπως πάντα, μερικές κάρτες μπορούν να προκαλέσουν την διακοπή στην από υψηλή σε χαμηλή μετάβαση.
Ο ακόλουθος κώδικας είναι ένας Interrupt ελεγκτής πολικότητας, ο οποίος χρησιμεύει ως δύο πράγματα. Θα καθορίσει ποια πολικότητα η παράλληλη θύρα σας χρησιμοποίει για τις διακοπές, δίνοντας σας επίσης ένα παράδειγμα για το πώς να χρησιμοποιήσετε την διακοπή της παράλληλης θύρας. Ελέγχει εάν η διακοπή σας παράγεται στην αύξουσα ή πίπτουσα άκρη της γραμμής nACK. Για να το χρησιμοποιήσετε συνδέστε απλά ένα καλώδιο σε μια από τις γραμμές Data (pin 2 έως 9) στο pin nAck (pin 10). Ο ευκολότερος τρόπος να γίνει αυτό είναι να γεφυρωθεί με ένα καλώδιο από το DATA7 (pin 9) στο ack (pin 10) σε έναν αρσενικό DB25 συνδετήρα.
/* WWW - http://www.senet.com.au/~cpeacock */
#include <dos.h>
#define PORTADDRESS 0x378 /* Enter Your Port Address Here */
#define IRQ 7 /* IRQ Here */
#define DATA PORTADDRESS+0
#define STATUS PORTADDRESS+1
#define CONTROL PORTADDRESS+2
#define PIC1 0x20
#define PIC2 0xA0
int interflag; /* Interrupt Flag */
int picaddr; /* Programmable Interrupt Controller (PIC) Base Address */
void interrupt (*oldhandler)();
void interrupt parisr() /* Interrupt Service Routine (ISR) */
{
interflag = 1;
outportb(picaddr,0x20); /* End of Interrupt (EOI) */
}
void main(void)
{
int c;
int intno; /* Interrupt Vector Number */
int picmask; /* PIC's Mask */
/* Calculate Interrupt Vector, PIC Addr & Mask. */
if (IRQ >= 2 && IRQ <= 7)
intno = IRQ + 0x08;
picaddr = PIC1;
picmask = 1;
picmask = picmask << IRQ;
if (IRQ >= 8 && IRQ <= 15)
intno = IRQ + 0x68;
picaddr = PIC2;
picmask = 1;
picmask = picmask << (IRQ-8);
if (IRQ < 2 || IRQ > 15)
printf("IRQ Out of Range"); exit();
outportb(CONTROL, inportb(CONTROL) & 0xDF); /* Make sure port is in Forward Direction */
outportb(DATA,0xFF);
oldhandler = getvect(intno); /* Save Old Interrupt Vector */
setvect(intno, parisr); /* Set New Interrupt Vector Entry */
outportb(picaddr+1,inportb(picaddr+1) & (0xFF - picmask)); /* Un-Mask Pic */
outportb(CONTROL, inportb(CONTROL) | 0x10); /* Enable Parallel Port IRQ's */
clrscr();
printf("Parallel Port Interrupt Polarity Tester");
printf("IRQ %d : INTNO %02X : PIC Addr 0x%X : Mask 0x%02X",IRQ,intno,picaddr,picmask); interflag = 0; /* Reset Interrupt Flag */
delay(10);
outportb(DATA,0x00); /* High to Low Transition */
delay(10); /* Wait */
if (interflag == 1) printf("Interrupts Occur on High to Low Transition of ACK.");
else
{
outportb(DATA,0xFF); /* Low to High Transition */
delay(10); /* wait */
if (interflag == 1) printf("Interrupts Occur on Low to High Transition of ACK. \n");
else printf("No Interrupt Activity Occurred. IRQ Number, Port Address and Wiring.");
}
outportb(CONTROL, inportb(CONTROL) & 0xEF); /* Disable Parallel Port IRQ's */
outportb(picaddr+1,inportb(picaddr+1) | picmask); /* Mask Pic */
setvect(intno, oldhandler); /* Restore old Interrupt Vector Before Exit */
}
Tην ώρα του compile, ο ανωτέρω κώδικας μπορεί να παραγάγει μερικά warnings, condition always true,condition always false, unreachable code κ.λπ.... Αυτά είναι εντάξει. Αυτά παράγονται καθώς μερικές από τις condition structures του τεστ του IRQ που χρησιμοποιείτε, καθώς το IRQ ορίζεται ως μια σταθερά, μερικές εκβάσεις δεν θα γίνουν ποτέ. Ενώ θα ήταν καλύτερη η εφαρμογη μιας preprocessor οδηγίας, αυτό το πρόγραμμα είναι έτσι ώστε να μπορείτε να χρησιμοποιήσετε τον κώδικα στα προγράμματά σας. Καθώς μπορούν να χρησιμοποιήθουν «διακόπτες» (arguments) γραμμών εντολής, για την εισαγωγή δεδομένων κ.λπ... αντί ενός καθορισμένου IRQ.
Για να καταλάβει κάποιος αυτό το παράδειγμα, πρέπει να έχει μια βασική γνώση και να καταλαβαίνει τα interrupts και τα Interrupt Service Routine (ISR).
Το πρώτο μέρος της ρουτίνας mainline υπολογίζει το Interrupt διάνυσμα, το PIC Addr & mask προκειμένου να χρησιμοποιηθεί η διακοπή της παράλληλης θύρας. Αφότου έχει οργανωθεί η Interrupt Service Routine (ISR) και ο Programmable Interrupt Controller (PIC), πρέπει να επιτρέψουμε τα interrupt's στην παράλληλη θύρα. Αυτό γίνεται με τη ρύθμιση του bit 4 του Control Register της παράλληλης θύρας με την εντολή
outportb(CONTROL, inportb (CONTROL);
Πριν ενεργοποιηθούν οι διακοπές, γράψαμε 0xFF στην παράλληλη θύρα για να θέσουμε τις 8 γραμμές δεδομένων σε μια γνωστή κατάσταση. Σε αυτό το σημείο του προγράμματος, όλες οι γραμμές δεδομένων πρέπει να είναι υψηλές. Η interrupt service routine θέτει απλά μια σημαία (interflag), κατά συνέπεια μπορούμε να καθορίσουμε πότε ένα IRQ εμφανίζεται. Είμαστε τώρα σε θέση να γράψουμε 0x00 στη θύρας δεδομένων, το οποίο προκαλεί μια υψηλή σε χαμηλή μετάβαση της γραμμης nAck της παράλληλης θύρας καθώς είναι συνδεμενη σε μια Data Line της θύρας.
Εάν η διακοπή εμφανίζεται στην υψηλή σε χαμηλή μετάβαση, η σημαία διακοπης (interflag) πρέπει να τεθεί σε 1. Εξετάζουμε τώρα αυτό, και εάν είναι έτσι, το πρόγραμμα ενημερώνει το χρήστη. Εντούτοις εάν δεν γινει 1, καμία διακοπή δεν έχει εμφανιστεί ακόμα. Γράφουμε τώρα 0xFF στη Data Port, το οποίο θα προκαλέσει μια χαμηλή σε υψηλή μετάβαση στη γραμμή nAck και θα ελέγξει τη σημαία διακοπής πάλι. Εάν είναι 1, η διακοπής εμφανίζεται στη χαμηλή σε υψηλή μετάβαση.
Εντούτοις εάν η σημαία δεν είναι 1 ακόμα, αυτό θα σήμαινε ότι η διακοπή δεν δουλεύει. Σιγουρευτείτε για το IRQ σας και ότι η διεύθυνση βάσεων είναι σωστή και ελέγξτε επίσης την καλωδίωση.
Επιλογή λειτουργίας(mode) από το BIOS
Σήμερα, οι περισσότερες παράλληλες θύρες είναι multimode. Είναι συνήθως διαμορφώσιμο σε έναν από τους πολλούς τρόπους από το BIOS. Οι χαρακτηριστικοί τρόποι είναι,
Printer Mode (Sometimes called Default or Normal Modes))
Standard & Bi-directional (SPP) Mode
EPP1.7 and SPP Mode
EPP1.9 and SPP Mode
ECP Mode
ECP and EPP1.7 Mode
ECP and EPP1.9 Mode
Ο Printer Mode είναι ο πιο κοινός τρόπος. Είναι ένας Standard Parallel Printer με forward mode μόνο. Δεν έχει κανένα αμφίδρομο χαρακτηριστικό γνώρισμα, κατά συνέπεια το bit 5 του Control Port δεν θα αποκριθεί. Τα Standard & Bi-directional (SPP) Mode είναι ο αμφίδρομος τρόπος. Χρησιμοποιώντας αυτόν τον τρόπο, το bit 5 του Control Port θα αντιστρέψει την κατεύθυνση της θύρας, έτσι μπορείτε να διαβάσετε από τις γραμμές δεδομένων.
Ο EPP1.7 και ο τρόπος SSP είναι ένας συνδυασμός των τρόπων του EPP 1,7 (Enhanced Parallel Port) και SSP. Σε αυτόν τον τρόπο λειτουργίας θα έχετε πρόσβαση στους registers SSP (Data, Status και Control) και πρόσβαση στους καταλόγους του ΕΡΡ. Σε αυτόν τον τρόπο πρέπει να είστε σε θέση να αντιστρέψετε την κατεύθυνση της θύρας χρησιμοποιώντας το bit 5 του Control Register. Το ΕΡΡ 1,7 είναι η προηγούμενη έκδοση του ΕΡΡ. Αυτή η έκδοση, έκδοση 1.7, μπορεί να μην έχει το time-out bit. Δείτε το Interfacing the Enhanced Parallel Port για περισσότερες πληροφορίες.
Ο EPP1.9 και ο τρόπος SSP είναι ακριβώς όπως ο προηγούμενος τρόπος, μόνο που χρησιμοποιεί την έκδοση του ΕΡΡ 1.9 αυτή τη φορά. Όπως στον άλλο τρόπο, θα έχετε πρόσβαση στους καταλόγους SSP, συμπεριλαμβανομένου του bit 5 του Control Port. Εντούτοις αυτό διαφέρει από τον τρόπο EPP1.7 και SSP δεδομένου ότι θα πρέπει να έχετε πρόσβαση στο time-out bit του ΕΡΡ.
Ο τρόπος ECP θα σας δώσει έναν Extended Capabilities Port.. Η λειτουργία αυτής της θύρας μπορεί να τεθεί χρησιμοποιώντας τον Extended Control Register του ECP (ECR). Εντούτοις σε αυτόν τον τρόπο από το BIOS ο τρόπος του ΕΡΡ (100) δεν θα είναι διαθέσιμος. Θα συζητήσουμε περαιτέρω τον Extended Control Register του ECP στο παρόν έγγραφο, αλλά εάν θέλετε τις συμπληρωματικές πληροφορίες για τη θύρας ΕCP, συμβουλεύεστε το Interfacing the Extended Capabilities Port.
Ο τρόπος ECP and EPP1.7Mode & ECP and EPP1.9 θα σας δώσει μια Extended Capabilities Port, ακριβώς όπως στον προηγούμενο τρόπο. Εντούτοις ο τρόπος του ΕΡΡ στο ECR του ECP θα είναι τώρα διαθέσιμος. Εάν είστε στο ECP and EPP1.7Mode θα πάρετε μια θύρας EPP1.7, ή εάν είστε στο ECP και EPP1.9Mode, μια θύρας EPP1.9 θα είναι στη διάθεσή σας.
Οι ανωτέρω τρόποι είναι διαμορφώσιμοι μέσω του BIOS. Μπορείτε να τους αλλάξετε με τη χρησιμοποίηση του λογισμικού σας, αλλά αυτό δεν συστήνεται. Αυτοί οι κατάλογοι λογισμικού, που βρίσκονται χαρακτηριστικά σε 0x2FA, 0x3F0, 0x3F1 κ.λπ... προορίζονται μόνο να προσπελαστούν από το BIOS. Δεν υπάρχουν κανένα καθορισμένο πρότυπο για αυτούς τους καταλόγους διαμόρφωσης, κατά συνέπεια εάν επρόκειτο να χρησιμοποιήσετε αυτούς τους καταλόγους, το λογισμικό σας δεν θα ήταν πολύ φορητό. Με τα σημερινά multitasking συστήματα, επίσης δεν είναι μια καλή ιδέα να αλλαχτούν όταν σας βολεύει.
Μια καλύτερη επιλογή είναι να επιλεχτεί το ECP andEPP1.7Mode ή το ECP andEPP1.9Mode από το BIOS και να χρησιμοποιηθεί έπειτα ο Extended Control Register του ECP για να επιλέξει τον τρόπο της παράλληλης θύρας σας. Ο τρόπος EPP1.7 είχε μερικά προβλήματα σε σχέση με τα Data και Address Strobe's που χρησιμοποιούνται για να αρχίσουν έναν κύκλο ανεξάρτητα από την κατάσταση αναμονής,. Καλύτερο χρησιμοποιείστε την παράλληλη θύρα σας στον τρόπο ECP και EPP1.9.
Parallel Port Modes and the ECP's Extended Control Register
Όπως συζητήσαμε μόλις, είναι καλύτερο να θέσετε την παράλληλη θύρα στον τρόπο ECP και EPP1.9 και να χρησιμοποιήσετε τον Extended Control Register του ECP για να επιλέξετε τους διαφορετικούς τρόπους λειτουργίας. Οι κατάλογοι ECP είναι τυποποιημένοι κάτω από Extended Capabilities Port Protocol and ISA Interface Standard της Microsoft, κατά συνέπεια δεν έχουμε τα πρόβλημα κάθε προμηθευτής να έχει τον κατάλογό τους καθορισμένο.
Όταν θέσετε τον τρόπο ECP, ένα νέο σύνολο καταλόγων διατίθεται στη βάση + 0x400h. Μια συζήτηση αυτών των καταλόγων είναι διαθέσιμη στη Interfacing the Extended Capabilities Port. Εδώ ενδιαφερόμαστε μόνο για τον εκτεταμένο κατάλογο ελέγχου (ecr) που χαρτογραφείται στη βάση + 0x402h. Πρέπει να δηλωθεί ότι οι κατάλογοι του ECP δεν είναι διαθέσιμοι για τη θύρας με διεύθυνση βάσεων 0x3BCh.
Ο ανωτερο πίνακας είναι του Extended Control Register. Ενδιαφερόμαστε μόνο για τα 3 MSB από τον Extended Control Register που επιλέγει τον τρόπο λειτουργίας. Υπάρχουν 7 πιθανοί τρόποι λειτουργίας, αλλά δεν θα υποστηρίξουν όλες οι θύρες όλους τους τρόπους. Ο τρόπος του ΕΡΡ είναι ένα τέτοιο παράδειγμα, μην όντας διαθέσιμος σε μερικές θύρες.
Χαρακτηριστικά επιλογής λειτουργίας
Standard Mode:
Η επιλογή αυτού του τρόπου θα αναγκάσει τη θύρας ECP να συμπεριφερθεί ως τυποποιημένη παράλληλη Θύρας, χωρίς αμφίδρομη λειτουργία.
Byte Mode/PS/2 Mode:
Συμπεριφέρεται ως SSP στον αμφίδρομο τρόπο. Το bit 5 θα τοποθετήσει τη θύρας στον αντίστροφο τρόπο.
Parallel Port FIFO Mode:
Σε αυτόν τον τρόπο, οποιαδήποτε στοιχεία που γράφονται στα Data FIFO θα σταλούν στα περιφερικά χρησιμοποιώντας τη χειραψία SSP. Το υλικό θα παραγάγει τη χειραψία που απαιτείται. Είναι χρήσιμος με τις συσκευές μη-ECP όπως οι εκτυπωτές. Μπορείτε να έχετε μερικά από τα χαρακτηριστικά γνωρίσματα του ECP όπως τους απομονωτές FIFO και την παραγωγή χειραψίας από το υλικού αλλά με την υπάρχουσα χειραψία SSP (Centronics) αντί της χειραψίας ECP.
ECP FIFO Mode:
Τυποποιημένος τρόπος για τη χρήση ECP. Αυτός ο τρόπος χρησιμοποιεί τη χειραψία ECP που περιγράφεται στη Interfacing the Extended Capabilities Port.
Όταν επιλέξετε τον τρόπο ECP από το BIOS, και ο ECR κατάλογος τίθενται στον τρόπο ECP FIFO (011), οι κατάλογοι SSP μπορεί να εξαφανιστούν.
EPP Mode/Reserved:
Αυτό θα επιτρέψει τον τρόπο του ΕΡΡ, εάν είναι διαθέσιμος. Κάτω από το BIOS, εάν ο τρόπος ECP επιλεχτεί είναι περισσότερο από πιθανό, αυτός ο τρόπος να μην είναι μια επιλογή. Εντούτοις εάν στο BIOS επιλεχτεί το ECP & EPPl.x Mode, κατόπιν το ΕΡΡ 1.x θα επιτραπεί. Under Microsoft's Extended Capabilities Port Protocol and ISA Interface Standard this mode is Vendor Specified.
Reserved:
Currently Reserved.
Under Microsoft's Extended Capabilities Port Protocol and ISA Interface Standard this mode is Vendor Specified.
FIFO Test Mode:
Ενώ σε αυτόν τον τρόπο, οποιαδήποτε στοιχεία που γράφονται στον κατάλογο δοκιμής FIFO θα τοποθετηθούν στο FIFO και οποιαδήποτε στοιχεία που διαβάζονται από τον κατάλογο δοκιμής FIFO θα διαβαστούν από τον απομονωτή FIFO. Τα πλήρη/κενά Status Bits FIFO θα απεικονίσουν την αληθινή αξία τους, κατά συνέπεια το βάθος FIFO, μπορεί μεταξύ άλλων να καθοριστεί σε αυτόν τον τρόπο.
Configuration Mode :
Σε αυτόν τον τρόπο, οι δύο κατάλογοι διαμόρφωσης, τα cnfgA & τα cnfgB διατίθενται στις οριζόμενες διευθύνσεις καταλόγων τους.
Εάν είστε στον τρόπο ECP κάτω από το BIOS, ή εάν η κάρτα σας είναι ρυθμιζόμενη για να χρησιμοποιήσει το ECP είναι μια καλή ιδέα να αρχικοποιηθεί ο τρόπος ECP της θύρας σας σε μια προκαθορισμένη τιμή πριν από τη χρήση. Εάν χρησιμοποιείτε τα SSP, κατόπιν θέστε τη θύρας στον τυποποιημένο τρόπο ως πρώτο πράγμα. Μην υποθέσετε ότι η θύρας θα είναι ήδη στον τυποποιημένο τρόπο (SSP).
Κάτω από μερικούς από τους τρόπους, οι κατάλογοι SSP μπορούν να εξαφανιστούν ή να μην λειτουργήσουν σωστά. Εάν εσείς χρησιμοποιείται SSP, κατόπιν θέστε από το ecr στον τυποποιημένο τρόπο. Αυτό είναι ένα από τα πιο κοινά λάθη που οι άνθρωποι κάνουν.
Copyright February 1998 Craig Peacock.
Μετάφραση και έλεγχος εγγράφου για το www.mechatronics.gr