Praktikum zur Vorlesung Technische Grundlagen der Informatik
Prof. Dr. A. Bode

Die serielle Schnittstelle

  Contents                
   
   
 
 
  Die serielle Ein-/Ausgabe übernimmt im PC ein Baustein namens Universal Asnyncronous Receiver/Transmitter, kurz UART. Die gängigen Chips haben die Bauteilbezeichnungen 8250, 82450, 16450 oder 16550. Alle UARTS haben im Prinzip dieselbe Schnittstelle. Zwar gibt es kleinere Unterschiede; diese sind aber im Rahmen des Praktikums nicht relevant.

Für jede serielle Schnittstelle gibt es einen UART. Die vorhandenen UARTs werden während des Boot-Vorgangs erkannt. Die Basisadressen der UAARTS stehen an folgenden Adressen im RAM: 

 

Adresse serieller Port
0040:0000H COM1
0040:0002H COM2
0040:0004H COM3
0040:0006H COM4

Der Zugriff auf den UART erfolgt über acht aufeinanderfolgende I/O Ports, die relativ zur Basisadresse über ein Offset adressiert werden. Bei Offset 3 liegt das Line Control Register. Sein höchstwertiges Byte (most significant byte, MSB) ist das divisor latch access bit, kurz DLAB. Dieses Bit legt fest, auf welchen Registersatz bei den Offsets 0 und 1 zugegriffen wird. Aus Tab. 3.6 ist zu entnehmen, auf welches Register mit unterschiedlichen Kombinationen von Offset, DLAB, und Read/Write zugegriffen wird.
 
 

 

Table 3.6: Adressierung der Register des UART
Offset DLAB Read/Write Register
 0  0 Read Empfangspuffer (Receive Buffer)
 0 Write Senderegister (Transmitter Holding Register, THR)
 0 1 Read/Write Divisor Latch (niedrigstwertiges Byte, least significand byte, LSB
1  0 Read/Write Interrupt Enable Register (IER)
1 1 Read/Write Divisor Latch (höchstwertiges Byte, most significand byte, MSB)
2 X Read Interrupt Identification Regiser (IIR)
2 X Write FIFO channel (nicht bei allen Chips)
3 X Read/Write Line Control Register (LCR)
4 X Read/Write Modem Control Register (MCR)
5 X Read Line Status Register (LSR)
6 X Read/Write Modem Status Regiser (MSR)
7 X Read/Write Scratch (nicht bei allen Chips)

Im Empfangspuffer (Receive Buffer) steht das zu lesende Byte. Werden weniger als 8 bit gelesen, sind die höherwertigen Bits undefiniert und müssen von der verarbeitenden Software maskiert werden.

Der Sendepuffer (Transmitter Holding Register, THR) enthält das nächste zu sendende Byte. Wenn das vorherige Byte noch nicht gesendet wurde, wird es überschrieben. Diesen transmitter overrun erkennt der UART nicht.

Das Divisor Latch legt die Übertragungsrate fest. Ein Divisor d entspricht einer Übertragungsrate von 115 200 / d bits pro Sekunde. Für die Übertragungsrate b ist ein Divisor von 115 200 / b einzustellen.

Das Interrupt Enable Register legt fest welche Ereignisse einen Interrupt seitens des UART auslösen. Das Registerformat ist in Tab. 3.7 beschrieben.
 
 

 

Table 3.7: Das Interrupt Enable Register
Bits Bedeutung
7-4 immer gelöscht
3 Zustandsänderung an "`Modem Input"' löst Interrupt aus
2 BREAK, parity error, overrun error, framing error lösen Interrupt aus
1 Transmitter Buffer Empty (TBE) löst Interrupt aus
 0 Receive Data Ready (RxRDY) löst Interrupt aus

Eine Zustandsänderung bei "`Modem Input"' liegt vor, wenn eines der folgenden Signale seinen Zustand geändert hat: CD (Carrier Detect), RI (Ring Indicator), DSR (Data Set Ready), CTS (Clear to Send).

Der TBE Interrupt zeigt an, daß das nächste zu sendende Byte aus dem Transmitter Holding Register in das interne Transmitter Shift Register übernommen wurde, so daß nun der nächste Wert in das THR geschrieben werden kann.

Ein RxRDY Interrupt bedeutet, daß Daten im Empfangspuffer zum Lesen bereitliegen.

Das Interrupt Identification Register ist nur lesbar (read only Register). Es zeigt an ob ein Interrupt anhängig (pending) ist, und gibt von den anhängigen Interrupts den mit der höchsten Priorität an (die höchste Priorität ist 0. Tab. 3.8.
 
 

 

Table 3.8: Das Interrupt Identification Register
Bit Bedeutung
7 FIFO enable
6 FIFO enable
5-4 Null (unbenutzt)
3-1 Interrupt source
  000     Modem Input Change (Priorität 3)
  001     TBE (Priorität 2)
  010     RXRDY (Priorität 1)
  011     BREAK on error (Priorität 0)
  100     illegal
  101     illegal
  110     RxRDY (FIFO) (Priorität 1)
  111     illegal
 0 Interrupt pending
  0     Interrupt pending
  1     No interrupt pending

Das FIFO Control Register ist nur schreibar (write only Register). Nicht alle UARTs haben FIFOs. Deshalb gehen wir hier nicht näher auf das Register ein.




 
  back - Home - TUM 11.12.2000- webmaster