home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 October / PCO1097.ISO / FilesBBS / WIN3X / MSTARTER.ARJ / COMMCONS.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1995-02-14  |  12.0 KB  |  227 lines

  1. { Konstanten und Deklarationen für die V24-Units                     }
  2. { Peter Zwosta                                                       }
  3.  
  4. Unit CommCons;
  5.  
  6. INTERFACE { *********************************************************}
  7.  
  8.  
  9.  
  10. type
  11.    { Bei InitComPort - Communit zu verwendende BaudRaten       }
  12.    BaudType = (B300, B600, B1200, B2400, B4800, B9600,
  13.                B19200, B38400);
  14.  
  15. const
  16.    { wird in InitComport - CommUnit verwendet: BaudTab[ord(Baud)] }
  17.    BaudTab : array[0..7] of longint
  18.             = (300, 600, 1200, 2400, 4800, 9600, 19200, 38400);
  19.  
  20.    PulsWahl = 'ATDP';
  21.    TonWahl  = 'ATDT';
  22.  
  23.    MaxPorts   = 4;                   { max. unterstützte Ports    }
  24.  
  25.    { COM-Ports }
  26.    COM1 =   $00;
  27.    COM2 =   $01;
  28.    COM3 =   $02;
  29.    COM4 =   $03;
  30.    NoPort = $FF;
  31.  
  32.    PortString : array[0..3] of string
  33.                         = ('COM1', 'COM2', 'COM3', 'COM4');
  34.  
  35.   { Portadresse des Interrupt-Command Registers (ICR) des        }
  36.   { Programmable Interrupt Controllers (PIC)                     }
  37.   PIC_ICR   = $20;
  38.   { Portadresse des Interrupt Mask Registers (IMR) des PIC       }
  39.   {             Ist in diesem Register ein Bit = 1 (maskiert),   }
  40.   {             dann werden ankommende IRQ's mit dieser Nummer   }
  41.   {             NICHT weitergeleitet.                            }
  42.   PIC_IMR  = $21;
  43.  
  44.   { End of Interrupt - ist das Ereignis durch die Interrupt-     }
  45.   {             Routine bearbeitet, dann muß sie dem PIC (über   }
  46.   {             das ICR) mitteilen, daß sie jetzt fertig ist und }
  47.   {             der nächste IRQ bearbeitet werden kann.  Dazu    }
  48.   {             sendet die Interrupt-Routine ein EOI (End of     }
  49.   {             Interrupt) an das ICR.                           }
  50.   EOI       = $20;
  51.  
  52.   { Basisadressen der COM-PORTS                                  }
  53.   ComBase : array[0..3] of word = ($03f8, $02f8, $03e8, $02e8);
  54.   { erleichtert das wieder Zuweisen bei Änderungen }
  55.   DefaultComBase
  56.           : array[0..3] of word = ($03f8, $02f8, $03e8, $02e8);
  57.   { IRQ's - Nummer des IRQ, den die COM-Ports verwenden.         }
  58.   {         Beispiel: COMIRQ[COM1] := 4;                         }
  59.   {         Die Nummer des IRQ entspricht jeweils der Nummer des }
  60.   {         Bits in PIC_IMR . Für IRQ 3 muß PIC_IMR  also        }
  61.   {         xxxx 0xxx gesetzt werden. (Das vierte Bit von links  }
  62.   {         hat die Nummer 3.)                                   }
  63.   COMIRQ : array[0..MaxPorts-1] of byte = (4, 3, 4, 3);
  64.   DefaultCOMIRQ : array[0..MaxPorts-1] of byte = (4, 3, 4, 3);
  65.  
  66.   { Interrupts zu den IRQ's, ergeben sich normalerweise aus      }
  67.   {         IRQ + 8                                              }
  68.   COMINT : array[0..MaxPorts-1] of byte = (12, 11, 12, 11);
  69.   DefaultCOMINT
  70.          : array[0..MaxPorts-1] of byte = (12, 11, 12, 11);
  71.  
  72.   { Art des Handshake                                            }
  73.   NoHandShake  = $0000;     { keiner                             }
  74.   RTS_CTS      = $0001;     { Hardwarehandshake                  }
  75.   XON_XOFF     = $0002;     { Softwarehandshake                  }
  76.  
  77.   { Für Software-Handshake                                       }
  78.   XON  = $11;  { 17 }
  79.   XOFF = $13;  { 19 }
  80.  
  81.   { Adressen der Register relativ zu COM-Base                    }
  82.   THR = 0;    { Transmit Holding Register (senden)               }
  83.   RHR = 0;    { Receive Holding Register (empfangenes Byte)      }
  84.   DLL = 0;    { niederwertiges Byte des Divisor Latch Registers  }
  85.               { (Baudratenregister)                              }
  86.   DLH = 1;    { höherwertiges Byte des Divisor Latch Registers   }
  87.   IER = 1;    { Interrupt Enable Register                        }
  88.               { - Interruptfreigabe-Register                     }
  89.   IIR = 2;    { Interrupt Identification Register                }
  90.               { - Unterbrechungskennungs-Register                }
  91.   LCR = 3;    { Line Control Register - Leitungssteuer-Register  }
  92.   MCR = 4;    { Modem Control Register - Modemsteuer-Register    }
  93.   LSR = 5;    { Line Status Register - Leitungsstatus-Register   }
  94.   MSR = 6;    { Modem Status Register                            }
  95.  
  96.   {--------------------------------------------------------------}
  97.   { Interruptfreigabe-Register (Interrupt Enable Register, IER)  }
  98.   {             Bestimmt, bei welchen Ereignissen ein Interrupt  }
  99.   {             ausgelöst werden soll.                           }
  100.   { Bit   Interrupt auslösen, wenn ...                           }
  101.   { ------------------------------------------------------------ }
  102.   {  0    Daten bereitstehen (in RHR)                  xxxx xxx1 }
  103.   {  1    Transmit Holding Register leer               xxxx xx1x }
  104.   {  2    Fehler beim Datenempfang                     xxxx x1xx }
  105.   {  3    sich das Modem Status Register ändert        xxxx 1xxx }
  106.   {  4-7  werden nicht verwendet                       XXXX xxxx }
  107.  
  108.   IER_RHR = $01; { Interrupt, wenn Daten bereitstehen  xxxx xxx1 }
  109.   IER_MSR = $08; { Interrupt, wenn sich der Modemstatus ändert   }
  110.                  {                                     xxxx 1xxx }
  111.  
  112.   {--------------------------------------------------------------}
  113.   { Unterbrechungskennungs-Register (Interrupt Identification    }
  114.   {                                  Register, IIR)              }
  115.   {             Wurden im IER mehrere Ereignisse definiert, bei  }
  116.   {             denen ein Interrupt ausgelöst werden soll, dann  }
  117.   {             dient dieses Register dazu das Ereignis nach     }
  118.   {             einem Interrupt zu identifizieren.               }
  119.   { Bit   Ereignis                                               }
  120.   { ------------------------------------------------------------ }
  121.   {   0   Interrupt wird gerade durchgeführt                     }
  122.   { 1-2   Interrupt Identification Code                          }
  123.   {       00 -> Modem Status Register geändert         xxxx x00x }
  124.   {       01 -> Transmitter Holding Register leer      xxxx x01x }
  125.   {       10 -> Daten stehen bereit (in RHR)           xxxx x10x }
  126.   {       11 -> Fehler beim Datenempfang oder Break entdeckt     }
  127.   {                                                    xxxx x11x }
  128.   { 3-7   werden nicht verwendet                                 }
  129.   { ------------------------------------------------------------ }
  130.   { Nur für 16550                                                }
  131.   { ------------------------------------------------------------ }
  132.   { Bei lesendem Zugriff                                         }
  133.   {   3   FIFO Timeout. Werden eine bestimmte Zeit lang keine    }
  134.   {       weiteren Zeichen in den Puffer übertragen, dann wird   }
  135.   {       ein Interrupt ausgelöst, der dazu auffordert, die      }
  136.   {       angefallenen Zeichen abzuholen.              xxxx 1xxx }
  137.   {  6    FIFO ein (nur 16550A)                        x1xx xxxx }
  138.   {  7    FIFO ein                                     1xxx xxxx }
  139.   { Bei schreibendem Zugriff                                     }
  140.   {  0      FIFO Enable, FIFO aktivieren               xxxx xxx1 }
  141.   {  1      FIFO Reset Receive (Empf.Puffer löschen)   xxxx xx1x }
  142.   {  2      FIFO Reset Transmit (Sende.Puffer lösch.) xxxx x1xx }
  143.   {  6-7    Trigger Level. Bestimmen nach wievielen eingegangen  }
  144.   {         Zeichen ein Interrupt ausgelöst werden soll.         }
  145.   {         00: nach 1 Byte                            00xx xxxx }
  146.   {         01: nach 4 Bytes                           01xx xxxx }
  147.   {         10: nach 8 Bytes                           10xx xxxx }
  148.   {         11: nach 14 Bytes                          11xx xxxx }
  149.   { ------------------------------------------------------------ }
  150.  
  151.   IIR_DataReady = $04; { Daten stehen bereit           xxxx x10x }
  152.   IIR_DRMask    = $07; { (..IIR and IIR_DRMask) = IIR_DataReady  }
  153.                        {                               xxxx x111 }
  154.   IIR_MSRMask  = $06;  { zum Prüfen, ob sich der Modemstatus     }
  155.                        { geändert hat.                           }
  156.  
  157.  
  158.   {--------------------------------------------------------------}
  159.   { Leitungssteuer-Register (Line Control, LCR)                  }
  160.   { - Anzahl der Datenbits  Bit 0-1 ---------------------------  }
  161.   Databit5   = $00;    { 5 Datenbits                  xxxx xx00  }
  162.   Databit6   = $01;    { 6 Datenbits                  xxxx xx01  }
  163.   Databit7   = $02;    { 7 Datenbits                  xxxx xx10  }
  164.   Databit8   = $03;    { 8 Datenbits                  xxxx xx11  }
  165.  
  166.   { - Anzahl der Stopbits   Bit 2  ----------------------------- }
  167.   Stopbit1   = $00;    { 1   Stopbit                  xxxx x0xx  }
  168.   Stopbit2   = $04;    { 1,5 Stopbits bei 5-Bit-Wörtern sonst 2  }
  169.                        {                              xxxx x1xx  }
  170.   { - Art der Parität       Bit 3-4  --------------------------- }
  171.   {                         Bit 3    0 -> Parität aus            }
  172.   {                                  1 -> Parität ein            }
  173.   {                         Bit 4    0 -> ungerade               }
  174.   {                                  1 -> gerade                 }
  175.   NoParity   = $00;    { keine Parität                 xxxx 0xxx }
  176.   OddParity  = $08;    { ungerade Parität              xxxx 1xxx }
  177.   EvenParity = $18;    { gerade Parität                xxx1 1xxx }
  178.  
  179.   { - Sticky Parity         Bit 5  --------------------xxXx-xxxx }
  180.   { - Set Break             Bit 6  --------------------xXxx-xxxx }
  181.   { - Divisor Latch Bit     Bit 7  --------------------Xxxx-xxxx }
  182.   DLAB       = $80;  { muß vor dem Setzen der Geschwindigkeit    }
  183.                      { 1 gesetzt und danach wieder abgeschalten  }
  184.                      { werden.                                   }
  185.  
  186.   {------------------------------------------------------------- }
  187.   { Modemsteuer-Register (Modem Control, MCR)                    }
  188.   DTR = $01; { Data Terminal Ready                    xxxx xxx1  }
  189.   RTS = $02; { Request To send                        xxxx xx1x  }
  190.   OT1 = $04; { Output 1                               xxxx x1xx  }
  191.   OT2 = $08; { Output 2 (für Interrupts)              xxxx 1xxx  }
  192.   LP  = $10; { Loop - UART Ausgabe als Input zurückliefern       }
  193.              {                                        xxx1 xxxx  }
  194.   { Die Bits 5-7 werden nicht verwendet               XXXx xxxx  }
  195.  
  196.   {--------------------------------------------------------------}
  197.   { Leitungsstatus-Register (Line Status, LSR)                   }
  198.   DataReady      = $01;  { Daten stehen bereit         xxxx xxx1 }
  199.   OverRunError   = $02;  { Datenreg. überschrieben     xxxx xx1x }
  200.   ParityError    = $04;  { Paritätsfehler, schlechte Übertragung }
  201.                          {                             xxxx x1xx }
  202.   FramingError   = $08;  { kein Stopbit gefunden       xxxx 1xxx }
  203.   BreakInterrupt = $10;  { Unterbrechung entdeckt      xxx1 xxxx }
  204.   THREmpty       = $20;  { Transmission-Hold-Reg. leer xx1x xxxx }
  205.   TSREmpty       = $40;  { Transmission-Shift-Reg.leer x1xx xxxx }
  206.   TimeOutError   = $80;  { Wartezeit für Verbind. überschritten  }
  207.                          {                             1xxx xxxx }
  208.  
  209.   {------------------------------------------------------------- }
  210.   { Modemsstatus-Register (Modem Status, MSR)                    }
  211.   DCTS = $01; { Delta Clear To Send, Zustand von CTS hat sich    }
  212.               { geändert                               xxxx xxx1 }
  213.   DDSR = $02; { Delta Data Set Ready, Zustand von DSR hat sich   }
  214.               { geändert                               xxxx xx1x }
  215.   DRI  = $04; { Delta Ring Indicator, Zustand von RI hat sich    }
  216.               { geändert                               xxxx x1xx }
  217.   DCD  = $08; { Delta Carrier Detect, Zustand von CD hat sich    }
  218.               { geändert                               xxxx 1xxx }
  219.   CTS  = $10; { Clear To Send, Modem zum Senden bereit xxx1 xxxx }
  220.   DSR  = $20; { Data Set Ready, Modem ist angeschalten xx1x xxxx }
  221.   RI   = $40; { Ring Indicator, eigehender Anruf       x1xx xxxx }
  222.   CD   = $80; { Carrier Detect, Verbindung aufgebaut   1xxx xxxx }
  223.  
  224.  
  225. IMPLEMENTATION {*****************************************************}
  226.  
  227. END.