Serielle Schnittstelle — Änderungen 6584 → 8319

Zeile 1: Zeile 1:
−
Die '''serielle Schnittstelle''' (Abkürzung: '''COM''' oder '''RS232''') scheint veraltet ist aber sehr nützlich um z.B. den [[Kernel]] im frühen Entwicklungstand zu [[Debugging | debuggen]], denn der Bildschirm kann nur begrenzt Text anzeigen. Außerdem sollte bei keinem Betriebssystem ein Treiber für die serielle Schnittstelle fehlen, da sie heute auch noch oft Anwendung findet und leicht zu programmieren ist.
+
Die '''serielle Schnittstelle''' (Abkürzung: '''COM''' von ''Communication'' oder '''RS232''', heute '''EIA232''' genannt) ist eine 1980 eingeführte Schnittstelle für die Übertragung von Daten, meist von Computer zu Computer.  
  
−
==Basis-I/O-Ports finden==
+
 
 +
== Funktionsweise ==
 +
Daten werden bei der seriellen Schnittstellen als Wörter übertragen, welche je nach Konfiguration fünf bis neun Bits entsprechen. Codiert werden diese Wörter nach dem ASCII-Zeichensatz. Der wichtigste Unterschied zur [[parallelen Schnittstelle]] ist, dass die Bits nacheinander übertragen werden.
 +
 
 +
== Aufbau ==
 +
=== Basis-I/O-Ports ===
 
Normalerweise haben die COM-Ports folgende Basis-I/O-Ports:
 
Normalerweise haben die COM-Ports folgende Basis-I/O-Ports:
 
{| {{prettytable}}
 
{| {{prettytable}}
Zeile 16: Zeile 21:
 
Man sollte die Basis-I/O-Ports aber aus der [[BIOS Data Area]] auslesen.
 
Man sollte die Basis-I/O-Ports aber aus der [[BIOS Data Area]] auslesen.
  
−
==Offsets der einzelnen Register==
+
=== Offsets der einzelnen Register ===
 
Da ein COM-Port mehrere Register benutzt, braucht er auch mehrere I/O-Ports. Die oben angegebenen I/O-Ports sind nur die Basis-I/O-Ports. Man muss also nachher noch das Offset der einzelnen Register addieren. Folgende Register verbergen sich hinter den Offsets:
 
Da ein COM-Port mehrere Register benutzt, braucht er auch mehrere I/O-Ports. Die oben angegebenen I/O-Ports sind nur die Basis-I/O-Ports. Man muss also nachher noch das Offset der einzelnen Register addieren. Folgende Register verbergen sich hinter den Offsets:
  
Zeile 127: Zeile 132:
 
  }
 
  }
 
   
 
   
−
  // Ob man schreiben kann
+
  // Prüft, ob man bereits schreiben kann
 
  uint8_t is_transmit_empty(u16 base) {
 
  uint8_t is_transmit_empty(u16 base) {
 
   return inb(base+LSR)&0x20;
 
   return inb(base+LSR)&0x20;
Zeile 138: Zeile 143:
 
  }
 
  }
 
   
 
   
−
  // Ob man lesen kann
+
  // Prüft, ob man bereits lesen kann
 
  uint8_t serial_received(uint16_t base) {
 
  uint8_t serial_received(uint16_t base) {
 
   return inb(base+LSR)&1;
 
   return inb(base+LSR)&1;
Zeile 151: Zeile 156:
  
 
==Weblinks==
 
==Weblinks==
−
* http://www.nondot.org/sabre/os/files/Communication/CP_serial.pdf
+
* [http://www.nondot.org/sabre/os/files/Communication/CP_serial.pdf Tutorial zur seriellen Schnittstelle]
 +
* [http://www.camiresearch.com/Data_Com_Basics/RS232_standard.html Tutorial zum RS232-Standard]
  
 
[[Category:Hardware]]
 
[[Category:Hardware]]