1108 lines
		
	
	
	
		
			43 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			1108 lines
		
	
	
	
		
			43 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| <!-- $Id: uart.sgml,v 1.5 1997-02-22 12:59:38 peter Exp $ -->
 | |
| <!-- The FreeBSD Documentation Project -->
 | |
| 
 | |
| <!--
 | |
| <!DOCTYPE linuxdoc PUBLIC "-//FreeBSD//DTD linuxdoc//EN" [
 | |
| 
 | |
| <!ENTITY % authors SYSTEM "authors.sgml">
 | |
| %authors;
 | |
| 
 | |
| ]>
 | |
| -->
 | |
| <sect2><heading>The UART: What it is and how it works<label id="uart"></heading>
 | |
| 
 | |
| <p><em>Copyright © 1996 &a.uhclem;, All Rights Reserved.<newline>
 | |
| 13 January 1996.</em>
 | |
| 
 | |
| <!-- Version 1(2) 13-Jan-96 -->
 | |
| 
 | |
| 	The Universal Asynchronous Receiver/Transmitter (UART) controller
 | |
| 	is the key component of the serial communications subsystem of a
 | |
| 	computer.  The UART takes bytes of data and transmits the individual
 | |
| 	bits in a sequential fashion.  At the destination, a second UART
 | |
| 	re-assembles the bits into complete bytes.
 | |
| 
 | |
| 	Serial transmission is commonly used with modems and for
 | |
| 	non-networked communication between computers, terminals
 | |
| 	and other devices.
 | |
| 
 | |
| 	There are two primary forms of serial transmission: Synchronous and
 | |
| 	Asynchronous.  Depending on the modes that are supported by the 
 | |
| 	hardware, the name of the communication sub-system will usually
 | |
| 	include a "A" if it supports Asynchronous communications, and a
 | |
| 	"S" if it supports Synchronous communications.  Both forms are
 | |
| 	described below.
 | |
| 
 | |
| 	Some common acronyms are:
 | |
| <quote>UART	Universal Asynchronous Receiver/Transmitter</quote>
 | |
| <quote>USART	Universal Synchronous-Asynchronous Receiver/Transmitter</quote>
 | |
| 
 | |
| 
 | |
| <sect3><heading>Synchronous Serial Transmission</heading>
 | |
| 
 | |
| 	<p>Synchronous serial transmission requires that the sender and
 | |
| 	receiver share a clock with one another, or that the sender provide
 | |
| 	a strobe or other timing signal so that the receiver knows when to
 | |
| 	"read" the next bit of the data.  In most forms of serial
 | |
| 	Synchronous communication, if there is no data available at a given
 | |
| 	instant to transmit, a fill character must be sent instead so that
 | |
| 	data is always being transmitted.   Synchronous communication is
 | |
| 	usually more efficient because only data bits are transmitted
 | |
| 	between sender and receiver, and synchronous communication can be
 | |
| 	more more costly if extra wiring and circuits are required to
 | |
| 	share a clock signal between the sender and receiver.
 | |
| 
 | |
| 	A form of Synchronous transmission is used with printers and
 | |
| 	fixed disk devices in that the data is sent on one set of wires
 | |
| 	while a clock or strobe is sent on a different wire.  Printers and
 | |
| 	fixed disk devices are not normally serial devices because most
 | |
| 	fixed disk interface standards send an entire word of data for each
 | |
| 	clock or strobe signal by using a separate wire for each bit of the
 | |
| 	word.  In the PC industry, these are known as Parallel devices.
 | |
| 
 | |
| 	The standard serial communications hardware in the PC does not
 | |
| 	support Synchronous operations.  This mode is described here for
 | |
| 	comparison purposes only.
 | |
| 
 | |
| 
 | |
| <sect3><heading>Asynchronous Serial Transmission</heading>
 | |
| 
 | |
| 	<p>Asynchronous transmission allows data to be transmitted without
 | |
| 	the sender having to send a clock signal to the receiver.  Instead,
 | |
| 	the sender and receiver must agree on timing parameters in advance
 | |
| 	and special bits are added to each word which are used to
 | |
| 	synchronize the sending and receiving units.
 | |
| 
 | |
| 	When a word is given to the UART for Asynchronous transmissions,
 | |
| 	a bit called the "Start Bit" is added to the beginning of each word 
 | |
| 	that is to be transmitted.  The Start Bit is used to alert the
 | |
| 	receiver that a word of data is about to be sent, and to force the
 | |
| 	clock in the receiver into synchronization with the clock in the
 | |
| 	transmitter.  These two clocks must be accurate enough to not 
 | |
| 	have the frequency drift by more than 10% during the transmission
 | |
| 	of the remaining bits in the word.  (This requirement was set in
 | |
| 	the days of mechanical teleprinters and is easily met by modern
 | |
| 	electronic equipment.)
 | |
| 
 | |
| 	After the Start Bit, the individual bits of the word of data are
 | |
| 	sent, with the Least Significant Bit (LSB) being sent first.  Each 
 | |
| 	bit in the transmission is transmitted for exactly the same
 | |
| 	amount of time as all of the other bits, and the receiver "looks"
 | |
| 	at the wire at approximately halfway through the period assigned
 | |
| 	to each bit to determine if the bit is a "1" or a "0".  For example,
 | |
| 	if it takes two seconds to send each bit, the receiver will examine
 | |
| 	the signal to determine if it is a "1" or a "0" after one second
 | |
| 	has passed, then it will wait two seconds and then examine the value
 | |
| 	of the next bit, and so on.
 | |
| 
 | |
| 	The sender does not know when the receiver has "looked" at the
 | |
| 	value of the bit.  The sender only knows when the clock says to
 | |
| 	begin transmitting the next bit of the word.
 | |
| 
 | |
| 	When the entire data word has been sent, the transmitter may add
 | |
| 	a Parity Bit that the transmitter generates.  The Parity Bit may
 | |
| 	be used by the receiver to perform simple error checking.  Then at
 | |
| 	least one Stop Bit is sent by the transmitter.  
 | |
| 
 | |
| 	When the receiver has received all of the bits in the data word,
 | |
| 	it may check for the Parity Bits (both sender and receiver must
 | |
| 	agree on whether a Parity Bit is to be used), and then the receiver
 | |
| 	looks for a Stop Bit.  If the Stop Bit does not appear when it is
 | |
| 	supposed to, the UART considers the entire word to be garbled and
 | |
| 	will report a Framing Error to the host processor when the data
 | |
| 	word is read.  The usual cause of a Framing Error is that the sender
 | |
| 	and receiver clocks were not running at the same speed, or that
 | |
| 	the signal was interrupted.
 | |
| 
 | |
| 	Regardless of whether the data was received correctly or not, the
 | |
| 	UART automatically discards the Start, Parity and Stop bits.  If the
 | |
| 	sender and receiver are configured identically, these bits are not
 | |
| 	passed to the host.
 | |
| 
 | |
| 	If another word is ready for transmission, the Start Bit for the new
 | |
| 	word can be sent as soon as the Stop Bit for the previous
 | |
| 	word has been sent.
 | |
| 
 | |
| 	Because asynchronous data is "self synchronizing", if there is no
 | |
| 	data to transmit, the transmission line can be idle.
 | |
| 
 | |
| 
 | |
| <sect3><heading>Other UART Functions</heading>
 | |
| 
 | |
| 	<p>In addition to the basic job of converting data from parallel to
 | |
| 	serial for transmission and from serial to parallel on reception,
 | |
| 	a UART will usually provide additional circuits for signals that
 | |
| 	can be used to indicate the state of the transmission media, and
 | |
| 	to regulate the flow of data in the event that the remote device
 | |
| 	is not prepared to accept more data.  For example, when the 
 | |
| 	device connected to the UART is a modem, the modem may report the
 | |
| 	presence of a carrier on the phone line while the computer may be
 | |
| 	able to instruct the modem to reset itself or to not take calls
 | |
| 	by asserting or deasserting one more more of these extra signals.
 | |
| 	The function of each of these additional signals is defined in
 | |
| 	the EIA RS232-C standard.
 | |
| 
 | |
| 
 | |
| <sect3><heading>The RS232-C and V.24 Standards</heading>
 | |
| 
 | |
| 	<p>In most computer systems, the UART is connected to circuitry that
 | |
| 	generates signals that comply with the EIA RS232-C specification.
 | |
| 	There is also a CCITT standard named V.24 that mirrors the
 | |
| 	specifications included in RS232-C.
 | |
| 
 | |
| <sect4><heading>RS232-C Bit Assignments (Marks and Spaces)</heading>
 | |
| 
 | |
| 	<p>In RS232-C, a value of "1" is called a "Mark" and a value of "0"
 | |
| 	is called a "Space".  When a communication line is idle, the line
 | |
| 	is said to be "Marking", or transmitting continuous "1" values.
 | |
| 
 | |
| 	The Start bit always has a value of "0" (a Space).  The Stop Bit
 | |
| 	always has a value of "1"  (a Mark).  This means that there will
 | |
| 	always be a Mark (1) to Space (0) transition on the line at the
 | |
| 	start of every word, even when multiple word are
 | |
| 	transmitted back to back.  This guarantees that sender and
 | |
| 	receiver can resynchronize their clocks regardless of the content
 | |
| 	of the data bits that are being transmitted.
 | |
| 	
 | |
| 	The idle time between Stop and Start bits does not have
 | |
| 	to be an exact multiple (including zero) of the bit rate of the
 | |
| 	communication link, but most UARTs are designed this way for
 | |
| 	simplicity.
 | |
| 
 | |
| 	In RS232-C, the "Marking" signal (a "1") is represented by a voltage
 | |
| 	between -2 VDC and -12 VDC, and a "Spacing" signal (a "0") is
 | |
| 	represented by a voltage between 0 and +12 VDC.  The transmitter
 | |
| 	is supposed to send +12 VDC or -12 VDC, and the receiver is supposed
 | |
| 	to allow for some voltage loss in long cables.  Some transmitters
 | |
| 	in low power devices (like portable computers) sometimes use only
 | |
| 	+5 VDC and -5 VDC, but these values are still acceptable to a
 | |
| 	RS232-C receiver, provided that the cable lengths are short.
 | |
| 
 | |
| 
 | |
| <sect4><heading>RS232-C Break Signal</heading>
 | |
| 
 | |
| 	<p>RS232-C also specifies a signal called a "Break", which is caused
 | |
| 	by sending continuous Spacing values (no Start or Stop bits).  When
 | |
| 	there is no electricity present on the data circuit, the line is
 | |
| 	considered to be sending "Break". 
 | |
| 
 | |
| 	The "Break" signal must be of a duration longer than the time
 | |
| 	it takes to send a complete byte plus Start, Stop and Parity bits.
 | |
| 	Most UARTs can distinguish between a Framing Error and a
 | |
| 	Break, but if the UART cannot do this, the Framing Error detection
 | |
| 	can be used to identify Breaks.
 | |
| 
 | |
| 	In the days of teleprinters, when numerous printers around the
 | |
| 	country were wired in series (such as news services), any unit
 | |
| 	could cause a "Break" by temporarily opening the entire circuit
 | |
| 	so that no current flowed.  This was used to allow a location with
 | |
| 	urgent news to interrupt some other location that was currently
 | |
| 	sending information.
 | |
| 
 | |
| 	In modern systems there are two types of Break signals.  If the
 | |
| 	Break is longer than 1.6 seconds, it is considered a "Modem Break",
 | |
| 	and some modems can be programmed to terminate the conversation and
 | |
| 	go on-hook or enter the modems' command mode when the modem detects
 | |
| 	this signal.  If the Break is smaller than 1.6 seconds, it signifies
 | |
| 	a Data Break and it is up to the remote computer to respond to
 | |
| 	this signal.  Sometimes this form of Break is used as an Attention
 | |
| 	or Interrupt signal and sometimes is accepted as a substitute for
 | |
| 	the ASCII CONTROL-C character.
 | |
| 
 | |
| 	Marks and Spaces are also equivalent to "Holes" and "No Holes"
 | |
| 	in paper tape systems.
 | |
| 
 | |
| 	Note that Breaks cannot be generated from paper tape or from any
 | |
|  	other byte value, since bytes are always sent with Start and Stop
 | |
| 	bit.  The UART is usually capable of generating the continuous
 | |
| 	Spacing signal in response to a special command from the host
 | |
| 	processor.
 | |
| 
 | |
| <sect4><heading>RS232-C DTE and DCE Devices</heading>
 | |
| 
 | |
| 	<p>The RS232-C specification defines two types of equipment: the Data
 | |
| 	Terminal Equipment (DTE) and the Data Carrier Equipment (DCE).  
 | |
| 	Usually, the DTE device is the terminal (or computer), and the DCE
 | |
| 	is a modem.  Across the phone line at the other end of a
 | |
| 	conversation, the receiving modem is also a DCE device and the
 | |
| 	computer that is connected to that modem is a DTE device.  The DCE
 | |
| 	device receives signals on the pins that the DTE device transmits on,
 | |
| 	and vice versa.
 | |
| 
 | |
| 	When two devices that are both DTE or both DCE must be connected
 | |
| 	together without a modem or a similar media translater between them,
 | |
| 	a NULL modem must be used.  The NULL modem electrically re-arranges
 | |
| 	the cabling so that the transmitter output is connected to the
 | |
| 	receiver input on the other device, and vice versa.  Similar
 | |
| 	translations are performed on all of the control signals so that
 | |
| 	each device will see what it thinks are DCE (or DTE) signals from
 | |
| 	the other device.
 | |
| 
 | |
| 	The number of signals generated by the DTE and DCE devices are
 | |
| 	not symmetrical.  The DTE device generates fewer signals for
 | |
| 	the DCE device than the DTE device receives from the DCE.
 | |
| 
 | |
| <sect4><heading>RS232-C Pin Assignments</heading>
 | |
| 
 | |
| 	<p>The EIA RS232-C specification (and the ITU equivalent, V.24) calls
 | |
| 	for a twenty-five pin connector (usually a DB25) and defines the
 | |
| 	purpose of most of the pins in that connector.  
 | |
| 	
 | |
| 	In the IBM Personal Computer and similar systems, a subset of
 | |
| 	RS232-C signals are provided via nine pin connectors (DB9).
 | |
| 	The signals that are not included on the PC connector deal mainly
 | |
| 	with synchronous operation, and this transmission mode is not
 | |
| 	supported by the UART that IBM selected for use in the IBM PC.
 | |
| 
 | |
| 	Depending on the computer manufacturer, a DB25, a DB9, or
 | |
| 	both types of connector may be used for RS232-C communications.
 | |
| 	(The IBM PC also uses a DB25 connector for the parallel printer
 | |
| 	interface which causes some confusion.)
 | |
| 
 | |
| 	Below is a table of the RS232-C signal assignments in the DB25
 | |
| 	and DB9 connectors.
 | |
| 
 | |
| <verb>
 | |
| DB25	DB9	EIA	CCITT	Common	Signal	Description
 | |
| RS232-C	IBM PC	Circuit	Circuit	Name	Source
 | |
| Pin	Pin	Symbol	Symbol	
 | |
| 
 | |
| 1	-	AA	101	PG/FG	---	Frame/Protective Ground
 | |
| 2	3	BA	103	TD	DTE	Transmit Data
 | |
| 3	2	BB	104	RD	DCE	Receive Data
 | |
| 4	7	CA	105	RTS	DTE	Request to Send
 | |
| 5	8	CB	106	CTS	DCE	Clear to Send
 | |
| 6	6	CC	107	DSR	DCE	Data Set Ready
 | |
| 7	5	AV	102	SG/GND	---	Signal Ground
 | |
| 8	1	CF	109	DCD/CD	DCE	Data Carrier Detect
 | |
| 9	-	-	-	-	-	Reserved for Test
 | |
| 10	-	-	-	-	-	Reserved for Test
 | |
| 11	-	-	-	-	-	Unassigned
 | |
| 12	-	CI	122	SRLSD	DCE	Sec. Recv. Line Signal Detector
 | |
| 13	-	SCB	121	SCTS	DCE	Secondary Clear To Send
 | |
| 14	-	SBA	118	STD	DTE	Secondary Transmit Data
 | |
| 15	-	DB	114	TSET	DCE	Trans. Sig. Element Timing
 | |
| 16	-	SBB	119	SRD	DCE	Secondary Received Data
 | |
| 17	-	DD	115	RSET	DCE	Receiver Signal Element Timing
 | |
| 18	-	-	141	LOOP	DTE	Local Loopback 
 | |
| 19	-	SCA	120	SRS	DTE	Secondary Request to Send
 | |
| 20	4	CD	108.2	DTR	DTE	Data Terminal Ready
 | |
| 21	-	-	-	RDL	DTE	Remote Digital Loopback
 | |
| 22	9	CE	125	RI	DCE	Ring Indicator
 | |
| 23	-	CH	111	DSRS	DTE	Data Signal Rate Selector
 | |
| 24	-	DA	113	TSET	DTE	Trans. Sig. Element Timing
 | |
| 25	-	-	142	-	DCE	Test Mode
 | |
| </verb>
 | |
| 
 | |
| 
 | |
|     <sect3><heading>Bits, Baud and Symbols</heading>
 | |
| 
 | |
| 	<p>Baud is a measurement of transmission speed in asynchronous
 | |
| 	communication.  Because of advances in modem communication
 | |
| 	technology, this term is frequently misused when describing
 | |
| 	the data rates in newer devices.
 | |
| 	
 | |
| 	Traditionally, a Baud Rate represents the number of bits that are
 | |
| 	actually being sent over the media, not the amount of data
 | |
| 	that is actually moved from one DTE device to the other.  The
 | |
| 	Baud count includes the overhead bits Start, Stop and Parity
 | |
| 	that are generated by the sending UART and removed by the
 | |
| 	receiving UART.  This means that seven-bit words of data
 | |
| 	actually take 10 bits to be completely transmitted.
 | |
| 	Therefore, a modem capable of moving 300 bits per second from one
 | |
| 	place to another can normally only move 30 7-bit words if
 | |
| 	Parity is used and one Start and Stop bit are present.  
 | |
| 	
 | |
| 	If 8-bit data words are used and Parity bits are also used, the
 | |
| 	data rate falls to 27.27 words per second, because it now
 | |
| 	takes 11 bits to send the eight-bit words, and the modem still
 | |
| 	only sends 300 bits per second.
 | |
| 
 | |
| 	The formula for converting bytes per second into a baud rate
 | |
| 	and vice versa was simple until error-correcting modems
 | |
| 	came along.  These modems receive the serial stream of bits
 | |
| 	from the UART in the host computer (even when internal modems
 | |
| 	are used the data is still frequently serialized) and converts
 | |
| 	the bits back into bytes.  These bytes are then combined into
 | |
| 	packets and sent over the phone line using a Synchronous
 | |
| 	transmission method.  This means that the Stop, Start, and Parity
 | |
| 	bits added by the UART in the DTE (the computer) were removed by
 | |
| 	the modem before transmission by the sending modem.  When these
 | |
| 	bytes are received by the remote modem, the remote modem adds
 | |
| 	Start, Stop and Parity bits to the words, converts them to a
 | |
| 	serial format and then sends them to the receiving UART in the remote
 | |
| 	computer, who then strips the Start, Stop and Parity bits.
 | |
| 
 | |
| 	The reason all these extra conversions are done is so that the
 | |
| 	two modems can perform error correction, which means that the
 | |
| 	receiving modem is able to ask the sending modem to resend a
 | |
| 	block of data that was not received with the correct checksum.
 | |
| 	This checking is handled by the modems, and the DTE devices are
 | |
| 	usually unaware that the process is occurring.
 | |
| 
 | |
| 	By striping the Start, Stop and Parity bits, the additional bits of
 | |
| 	data that the two modems must share between themselves to perform
 | |
| 	error-correction are mostly concealed from the effective
 | |
| 	transmission rate seen by the sending and receiving DTE equipment.
 | |
| 	For example, if a modem sends ten 7-bit words to another modem
 | |
| 	without including the Start, Stop and Parity bits, the sending
 | |
| 	modem will be able to add 30 bits of its own information that
 | |
| 	the receiving modem can use to do error-correction without
 | |
| 	impacting the transmission speed of the real data.
 | |
| 
 | |
| 	The use of the term Baud is further confused by modems that perform
 | |
| 	compression.  A single 8-bit word passed over the telephone
 | |
| 	line might represent a dozen words that were transmitted to
 | |
| 	the sending modem.  The receiving modem will expand the data back
 | |
| 	to its original content and pass that data to the receiving DTE.
 | |
| 
 | |
| 	Modern modems also include buffers that allow the rate that
 | |
| 	bits move across the phone line (DCE to DCE) to be a different speed
 | |
| 	than the speed that the bits move between the DTE and DCE on both
 | |
| 	ends of the conversation.  Normally the speed between the DTE and
 | |
| 	DCE is higher than the DCE to DCE speed because of the use of
 | |
| 	compression by the modems.
 | |
| 
 | |
| 	Because the number of bits needed to describe a byte varied
 | |
| 	during the trip between the two machines plus the differing 
 | |
| 	bits-per-seconds speeds that are used present on the DTE-DCE and
 | |
| 	DCE-DCE links, the usage of the term Baud to describe the
 | |
| 	overall communication speed causes problems and can misrepresent
 | |
| 	the true transmission speed.  So Bits Per Second (bps) is the correct
 | |
| 	term to use to describe the transmission rate seen at the
 | |
| 	DCE to DCE interface and Baud or Bits Per Second are acceptable
 | |
| 	terms to use when a connection is made between two systems with a
 | |
| 	wired connection, or if a modem is in use that is not performing
 | |
| 	error-correction or compression.
 | |
| 
 | |
| 	Modern high speed modems (2400, 9600, 14,400, and 19,200bps) in
 | |
| 	reality still operate at or below 2400 baud, or more accurately,
 | |
| 	2400 Symbols per second.  High speed modem are able to encode more
 | |
| 	bits of data into each Symbol using a technique called Constellation
 | |
| 	Stuffing, which is why the effective bits per second rate of the
 | |
| 	modem is higher, but the modem continues to operate within the
 | |
| 	limited audio bandwidth that the telephone system provides.
 | |
| 	Modems operating at 28,800 and higher speeds have variable Symbol
 | |
| 	rates, but the technique is the same.
 | |
| 
 | |
|     <sect3><heading>The IBM Personal Computer UART</heading>
 | |
| 
 | |
| 	<p>Starting with the original IBM Personal Computer, IBM selected
 | |
| 	the National Semiconductor INS8250 UART for use in the IBM PC
 | |
| 	Parallel/Serial Adapter.  Subsequent generations of compatible
 | |
| 	computers from IBM and other vendors continued to use the INS8250
 | |
| 	or improved versions of the National Semiconductor UART family.
 | |
| 
 | |
| 
 | |
| <sect4><heading>National Semiconductor UART Family Tree</heading>
 | |
| 
 | |
| 	<p>There have been several versions and subsequent generations of
 | |
| 	the INS8250 UART.  Each major version is described below.
 | |
| 
 | |
| <verb>
 | |
| 	INS8250  -> INS8250B 
 | |
| 	    \
 | |
|               \
 | |
| 	        \-> INS8250A -> INS82C50A 
 | |
| 		        \
 | |
|           	          \
 | |
| 		            \-> NS16450 -> NS16C450
 | |
| 				   \
 | |
| 			             \
 | |
| 				       \-> NS16550 -> NS16550A -> PC16550D
 | |
| </verb>
 | |
| 
 | |
| <descrip>
 | |
| 	<tag>INS8250</tag>This part was used in the original IBM PC and
 | |
| 	IBM PC/XT.  The original name for this part was the INS8250 ACE
 | |
| 	(Asynchronous Communications Element) and it is made from NMOS
 | |
| 	technology.
 | |
| 	
 | |
| 	The 8250 uses eight I/O ports and has a one-byte send and
 | |
| 	a one-byte receive buffer.  This original UART has several
 | |
| 	race conditions and other flaws.  The original IBM BIOS
 | |
| 	includes code to work around these flaws, but this made
 | |
| 	the BIOS dependent on the flaws being present, so subsequent
 | |
| 	parts like the 8250A, 16450  or 16550 could not be used in
 | |
| 	the original IBM PC or IBM PC/XT.
 | |
| 
 | |
| 	<tag>INS8250-B</tag>This is the slower speed of the INS8250 made
 | |
| 	from NMOS technology.  It contains the same problems as the original
 | |
| 	INS8250.
 | |
| 	
 | |
| 	<tag>INS8250A</tag>An improved version of the INS8250 using XMOS
 | |
| 	technology with various functional flaws corrected.  The INS8250A
 | |
| 	was used initially in PC clone computers by vendors who used
 | |
| 	"clean" BIOS designs.  Because of the corrections in the chip, this
 | |
| 	part could not be used with a BIOS compatible with the INS8250
 | |
| 	or INS8250B.
 | |
| 
 | |
| 	<tag>INS82C50A</tag>This is a CMOS version (low power consumption)
 | |
| 	of the INS8250A and has similar functional characteristics.
 | |
| 
 | |
| 	<tag>NS16450</tag>Same as NS8250A with improvements so it can be
 | |
| 	used with faster CPU bus designs.  IBM used this part in the IBM AT
 | |
| 	and updated the IBM BIOS to no longer rely on the bugs in the
 | |
| 	INS8250.
 | |
| 
 | |
| 	<tag>NS16C450</tag>This is a CMOS version (low power consumption)
 | |
| 	of the NS16450.
 | |
| 
 | |
| 	<tag>NS16550</tag>Same as NS16450 with a 16-byte send and receive
 | |
| 	buffer but the buffer design was flawed and could not be reliably
 | |
| 	be used.
 | |
| 
 | |
| 	<tag>NS16550A</tag>Same as NS16550 with the buffer flaws corrected.
 | |
| 	The 16550A and its successors have become the most popular UART
 | |
| 	design in the PC industry, mainly due it its ability to reliably
 | |
| 	handle higher data rates on operating systems with sluggish interrupt
 | |
| 	response times.
 | |
| 
 | |
| 	<tag>NS16C552</tag>This component consists of two NS16C550A CMOS
 | |
| 	UARTs in a single package.  
 | |
| 
 | |
| 	<tag>PC16550D</tag>Same as NS16550A with subtle flaws corrected.  This
 | |
| 	is revision D of the 16550 family and is the latest design available
 | |
| 	from National Semiconductor.  
 | |
| </descrip>
 | |
| 
 | |
| <sect4><heading>The NS16550AF and the PC16550D are the same thing</heading>
 | |
| 
 | |
| 	<p>National reorganized their part numbering system a few years ago,
 | |
| 	and the NS16550AFN no longer exists by that name.  (If you
 | |
| 	have a NS16550AFN, look at the date code on the part, which is a
 | |
| 	four digit number that usually starts with a nine.  The first two
 | |
| 	digits of the number are the year, and the last two digits are the
 | |
| 	week in that year when the part was packaged.  If you have a
 | |
| 	NS16550AFN, it is probably a few years old.)  
 | |
| 
 | |
| 	The new numbers are like PC16550DV, with minor differences in the
 | |
| 	suffix letters depending on the package material and its shape.
 | |
| 	(A description of the numbering system can be found below.)  
 | |
| 	
 | |
| 	It is important to understand that in some stores, you may pay
 | |
| 	$15(US) for a NS16550AFN made in 1990 and in the next bin are the
 | |
| 	new PC16550DN parts with minor fixes that National has made since the
 | |
| 	AFN part was in production, the PC16550DN was probably made in the
 | |
| 	past six months and it costs half (as low as $5(US) in volume) as
 | |
| 	much as the NS16550AFN because they are readily available.
 | |
| 
 | |
| 	As the supply of NS16550AFN chips continues to shrink, the price will
 | |
| 	probably continue to increase until more people discover and accept
 | |
| 	that the PC16550DN really has the same function as the old part
 | |
| 	number.
 | |
| 
 | |
| <sect4><heading>National Semiconductor Part Numbering System</heading>
 | |
| 
 | |
| 	<p>The older  NS<em>nnnnnrqp</em>  part numbers are now of the
 | |
| 	format  PC<em>nnnnnrgp</em>.
 | |
| 
 | |
| 	The "<em>r</em>" is the revision field.  The current revision of
 | |
| 	the 16550 from National Semiconductor is "D".  
 | |
| 
 | |
| 	The "<em>p</em>" is the package-type field.  The types are:
 | |
| <verb>	"F"	QFP	(quad flat pack) L lead type
 | |
| 	"N"	DIP	(dual inline package) through hole straight lead type
 | |
| 	"V"	LPCC	(lead plastic chip carrier) J lead type</verb>
 | |
| 
 | |
| 	The "<em>g</em>" is the product grade field.  If an "I" precedes
 | |
| 	the package-type letter, it indicates an "industrial" grade part,
 | |
| 	which has higher specs than a standard part but not as high as
 | |
| 	Military Specification (Milspec) component.  This is an optional field.
 | |
| 
 | |
| 	So what we used to call a NS16550AFN (DIP Package) is now called a
 | |
| 	PC16550DN or PC16550DIN.
 | |
| 
 | |
| 
 | |
|     <sect3><heading>Other Vendors and Similar UARTs</heading>
 | |
| 
 | |
| 	<p>Over the years, the 8250, 8250A, 16450 and 16550 have been licensed
 | |
| 	or copied by other chip vendors.  In the case of the 8250, 8250A
 | |
| 	and 16450, the exact circuit (the "megacell") was licensed to many
 | |
| 	vendors, including Western Digital and Intel.  Other vendors
 | |
| 	reverse-engineered the part or produced emulations that had similar
 | |
| 	behavior. 
 | |
| 
 | |
| 	In internal modems, the modem designer will frequently emulate the
 | |
| 	8250A/16450 with the modem microprocessor, and the emulated UART will
 | |
| 	frequently have a hidden buffer consisting of several hundred bytes.
 | |
| 	Because of the size of the buffer, these emulations can be as
 | |
| 	reliable as a 16550A in their ability to handle high speed data.
 | |
| 	However, most operating systems will still report that
 | |
| 	the UART is only a 8250A or 16450, and may not make effective use
 | |
| 	of the extra buffering present in the emulated UART unless special
 | |
| 	drivers are used.
 | |
| 
 | |
| 	Some modem makers are driven by market forces to abandon a design
 | |
| 	that has hundreds of bytes of buffer and instead use a 16550A UART
 | |
| 	so that the product will compare favorably in market comparisons
 | |
| 	even though the effective performance may be lowered by this action.
 | |
| 
 | |
| 	A common misconception is that all parts with "16550A" written on
 | |
| 	them are identical in performance.  There are differences, and in
 | |
| 	some cases, outright flaws in most of these 16550A clones.
 | |
| 
 | |
| 	When the NS16550 was developed, the National Semiconductor obtained
 | |
| 	several patents on the design and they also limited licensing, making
 | |
| 	it harder for other vendors to provide a chip with similar features.
 | |
| 	Because of the patents, reverse-engineered designs and emulations
 | |
| 	had to avoid infringing the claims covered by the patents.
 | |
| 	Subsequently, these copies almost never perform exactly the same as
 | |
| 	the NS16550A or PC16550D, which are the parts most computer and
 | |
| 	modem makers want to buy but are sometimes unwilling to pay the
 | |
| 	price required to get the genuine part.  
 | |
| 
 | |
| 	Some of the differences in the clone 16550A parts are unimportant,
 | |
| 	while others can prevent the device from being used at all with a
 | |
| 	given operating system or driver.  These differences may show up
 | |
| 	when using other drivers, or when particular combinations of events
 | |
| 	occur that were not well tested or considered in the Windows driver.
 | |
| 	This is because most modem vendors and 16550-clone makers use the
 | |
| 	Microsoft drivers from Windows for Workgroups 3.11 and the Microsoft
 | |
| 	MSD utility as the primary tests for compatibility with the
 | |
| 	NS16550A.  This over-simplistic criteria means that if a different
 | |
| 	operating system is used, problems could appear due to subtle
 | |
| 	differences between the clones and genuine components.
 | |
| 
 | |
| 	National Semiconductor has made available a program named COMTEST
 | |
| 	that performs compatibility tests independent of any OS drivers.
 | |
| 	It should be remembered that the purpose of this type of program is
 | |
| 	to demonstrate the flaws in the products of the competition, so the
 | |
| 	program will report major as well as extremely subtle differences in
 | |
| 	behavior in the part being tested.
 | |
| 
 | |
| 	In a series of tests performed by the author of this document in
 | |
| 	1994, components made by National Semiconductor, TI, StarTech, and
 | |
| 	CMD as well as megacells and emulations embedded in internal modems
 | |
| 	were tested with COMTEST.  A difference count for some of these
 | |
| 	components is listed below.  Because these tests were performed in
 | |
| 	1994, they may not reflect the current performance of the given
 | |
| 	product from a vendor.
 | |
| 
 | |
| 	It should be noted that COMTEST normally aborts when an excessive
 | |
| 	number or certain types of problems have been detected.  As part of
 | |
| 	this testing, COMTEST was modified so that it would not abort no
 | |
| 	matter how many differences were encountered.
 | |
| 
 | |
| 
 | |
| <verb>Vendor		Part number		Errors aka "differences" reported
 | |
| National	(PC16550DV) 			0 *
 | |
| 
 | |
| National	(NS16550AFN)			0
 | |
| 
 | |
| National	(NS16C552V)			0 *
 | |
| 
 | |
| TI		(TL16550AFN)			3
 | |
| 
 | |
| CMD		(16C550PE)			19
 | |
| 
 | |
| StarTech	(ST16C550J)			23
 | |
| 
 | |
| Rockwell	reference modem
 | |
| 		with internal 16550 or an
 | |
| 		emulation (RC144DPi/C3000-25) 	117
 | |
| 
 | |
| Sierra		modem with an internal
 | |
| 		16550 (SC11951/SC11351)		91</verb>
 | |
| 
 | |
| 	<p>It is important to understand that a simple count of differences
 | |
| 	from COMTEST does not reveal a lot about what differences are
 | |
| 	important and which are not.  For example, about half of the
 | |
| 	differences reported in the two modems listed above that have
 | |
| 	internal UARTs were caused by the clone UARTs not supporting
 | |
| 	five- and six-bit character modes.  The real 16550, 16450, and
 | |
| 	8250 UARTs all support these modes and COMTEST checks the
 | |
| 	functionality of these modes so over fifty differences are
 | |
| 	reported.  However, almost no modern modem supports five- or
 | |
| 	six-bit characters, particularly those with error-correction
 | |
| 	and compression capabilities.   This means that the differences
 | |
| 	related to five- and six-bit character modes can be discounted.
 | |
| 
 | |
| 	Many of the differences COMTEST reports have to do with timing.  In
 | |
| 	many of the clone designs, when the host reads from one port, the
 | |
| 	status bits in some other port may not update in the same amount
 | |
| 	of time (some faster, some slower) as a <em>real</em> NS16550AFN
 | |
| 	and COMTEST looks for these differences.  This means that the number
 | |
| 	of differences can be misleading in that one device may only have
 | |
| 	one or two differences but they are extremely serious, and some
 | |
| 	other device that updates the status registers faster or slower
 | |
| 	than the reference part (that would probably never affect the
 | |
| 	operation of a properly written driver) could have dozens of
 | |
| 	differences reported.
 | |
| 
 | |
| 	* To date, the author of this document has not found any non-National
 | |
| 	parts that report zero differences using the COMTEST program.  It
 | |
| 	should also be noted that National has had five versions of the
 | |
| 	16550 over the years and the newest parts behave a bit differently
 | |
| 	than the classic NS16550AFN that is considered the benchmark for
 | |
| 	functionality.  COMTEST appears to turn a blind eye to the
 | |
| 	differences within the National product line and reports no errors
 | |
| 	on the National parts (except for the original 16550) even when
 | |
| 	there are official erratas that describe bugs in the A, B and C 
 | |
| 	revisions of the parts, so this bias in COMTEST must be taken into
 | |
| 	account.
 | |
| 
 | |
| 	COMTEST can be used as a screening tool to alert the administrator
 | |
| 	to the presence of potentially incompatible components
 | |
| 	that might cause problems or have to be handled as a special case.
 | |
| 
 | |
| 	If you run COMTEST on a 16550 that is in a modem or a modem is
 | |
| 	attached to the serial port, you need to first issue a ATE0&W
 | |
| 	command to the modem so that the modem will not echo any of the test
 | |
| 	characters.  If you forget to do this, COMTEST will report at least
 | |
| 	this one difference:
 | |
| 	<quote>Error (6)...Timeout interrupt failed: IIR = c1  LSR = 61</quote>
 | |
| 
 | |
| 
 | |
| 	<sect3><heading>8250/16450/16550 Registers</heading>
 | |
| 
 | |
| 	<p>The 8250/16450/16550 UART occupies eight contiguous I/O port
 | |
| 	addresses.  In the IBM PC, there are two defined locations for
 | |
| 	these eight ports and they are known collectively as COM1 and COM2.
 | |
| 	The makers of PC-clones and add-on cards have created two additional
 | |
| 	areas known as COM3 and COM4, but these extra COM ports conflict
 | |
| 	with other hardware on some systems.  The most common conflict is
 | |
| 	with video adapters that provide IBM 8514 emulation.
 | |
| 
 | |
| <verb>
 | |
| COM1 is located from 0x3f8 to 0x3ff and normally uses IRQ 4
 | |
| COM2 is located from 0x2f8 to 0x2ff and normally uses IRQ 3
 | |
| COM3 is located from 0x3e8 to 0x3ef and has no standardized IRQ
 | |
| COM4 is located from 0x2e8 to 0x2ef and has no standardized IRQ
 | |
| </verb>
 | |
| <p>A description of the I/O ports of the 8250/16450/16550 UART is
 | |
| provided below.
 | |
| 
 | |
| <verb>
 | |
| I/O	Access		Description 
 | |
| Port	Allowed
 | |
| 
 | |
| +0x00	write		Transmit Holding Register (THR)
 | |
| 	(DLAB==0)	Information written to this port are treated
 | |
| 			as data words and will be transmitted by the
 | |
| 			UART.
 | |
| 
 | |
| +0x00	read		Receive Buffer Register (RBR)
 | |
| 	(DLAB==0)	Any data words received by the UART from the
 | |
| 			serial link are accessed by the host by
 | |
| 			reading this port.
 | |
| 
 | |
| 
 | |
| +0x00	write/read	Divisor Latch LSB (DLL)
 | |
| 	(DLAB==1)	This value will be divided from the master
 | |
| 			input clock (in the IBM PC, the master
 | |
| 			clock is 1.8432MHz) and the resulting clock
 | |
| 			will determine the baud rate of the UART.
 | |
| 			This register holds bits 0 thru 7 of the
 | |
| 			divisor.
 | |
| 
 | |
| 
 | |
| +0x01	write/read	Divisor Latch MSB (DLH)
 | |
| 	(DLAB==1)	This value will be divided from the master
 | |
| 			input clock (in the IBM PC, the master
 | |
| 			clock is 1.8432MHz) and the resulting clock
 | |
| 			will determine the baud rate of the UART.
 | |
| 			This register holds bits 8 thru 15 of the
 | |
| 			divisor.
 | |
| 
 | |
| 
 | |
| +0x01	write/read	Interrupt Enable Register (IER)
 | |
| 	(DLAB==0)	The 8250/16450/16550 UART classifies events into
 | |
| 			one of four categories.  Each category can be
 | |
| 			configured to generate an interrupt when any of
 | |
| 			the events occurs.  The 8250/16450/16550 UART
 | |
| 			generates a single external interrupt signal
 | |
| 			regardless of how many events in the enabled
 | |
| 			categories have occurred.  It is up to the host
 | |
| 			processor to respond to the interrupt and then
 | |
| 			poll the enabled interrupt categories (usually
 | |
| 			all categories have interrupts enabled) to
 | |
| 			determine the true cause(s) of the interrupt.
 | |
| 
 | |
| 			Bit 7	Reserved, always 0.
 | |
| 
 | |
| 			Bit 6	Reserved, always 0.
 | |
| 
 | |
| 			Bit 5	Reserved, always 0.
 | |
| 
 | |
| 			Bit 4	Reserved, always 0.
 | |
| 
 | |
| 			Bit 3	Enable Modem Status Interrupt (EDSSI)
 | |
| 				Setting this bit to "1" allows the UART
 | |
| 				to generate an interrupt when a
 | |
| 				change occurs on one or more of the
 | |
| 				status lines.
 | |
| 
 | |
| 			Bit 2	Enable Receiver Line Status 
 | |
| 				Interrupt (ELSI)
 | |
| 				Setting this bit to "1" causes the UART
 | |
| 				to generate an interrupt when the
 | |
| 				an error (or a BREAK signal) has been
 | |
| 				detected in the incoming data.
 | |
| 
 | |
| 			Bit 1	Enable Transmitter Holding Register
 | |
| 				Empty Interrupt (ETBEI)
 | |
| 				Setting this bit to "1" causes the UART
 | |
| 				to generate an interrupt when the
 | |
| 				UART has room for one or more
 | |
| 				additional characters that are to
 | |
| 				be transmitted.
 | |
| 
 | |
| 			Bit 0	Enable Received Data Available
 | |
| 				Interrupt (ERBFI)
 | |
| 				Setting this bit to "1" causes the UART
 | |
| 				to generate an interrupt when the UART
 | |
| 				has received enough characters to exceed
 | |
| 				the trigger level of the FIFO, or the
 | |
| 				FIFO timer has expired (stale data), or
 | |
| 				a single character has been received
 | |
| 				when the FIFO is disabled.
 | |
| 
 | |
| 
 | |
| +0x02	write		FIFO Control Register (FCR)
 | |
| 			(This port does not exist on the 8250 and 16450
 | |
| 			 UART.)
 | |
| 			
 | |
| 			Bit 7	Receiver Trigger Bit #1
 | |
| 			Bit 6	Receiver Trigger Bit #0
 | |
| 				These two bits control at what point the
 | |
| 				receiver is to generate an interrupt when
 | |
| 				the FIFO is active.
 | |
| 
 | |
| 				7 6	How many words are received
 | |
| 					before an interrupt is generated.
 | |
| 				0 0	1
 | |
| 
 | |
| 				0 1	4
 | |
| 
 | |
| 				1 0	8
 | |
| 
 | |
| 				1 1	14
 | |
| 
 | |
| 			Bit 5	Reserved, always 0.
 | |
| 
 | |
| 			Bit 4	Reserved, always 0.
 | |
| 
 | |
| 			Bit 3	DMA Mode Select 
 | |
| 				If Bit 0 is set to "1" (FIFOs enabled),
 | |
| 				setting this bit changes the operation
 | |
| 				of the -RXRDY and -TXRDY signals from
 | |
| 				Mode 0 to Mode 1.
 | |
| 
 | |
| 			Bit 2	Transmit FIFO Reset
 | |
| 				When a "1" is written to this bit, 
 | |
| 				the contents of the FIFO are discarded.
 | |
| 				Any word currently being transmitted
 | |
| 				will be sent intact.  This function is
 | |
| 				useful in aborting transfers.
 | |
| 
 | |
| 			Bit 1	Receiver FIFO Reset
 | |
| 				When a "1" is written to this bit,
 | |
| 				the contents of the FIFO are discarded.
 | |
| 				Any word currently being assembled
 | |
| 				in the shift register will be received
 | |
| 				intact.  
 | |
| 
 | |
| 			Bit 0	16550 FIFO Enable
 | |
| 				When set, both the transmit and receive
 | |
| 				FIFOs are enabled.  Any contents in the
 | |
| 				holding register, shift registers or
 | |
| 				FIFOs are lost when FIFOs are enabled or
 | |
| 				disabled.
 | |
| 
 | |
| 
 | |
| +0x02	read		Interrupt Identification Register (IIR)
 | |
| 
 | |
| 			Bit 7	FIFOs enabled.
 | |
| 				On the 8250/16450 UART, this bit is zero.
 | |
| 
 | |
| 			Bit 6	FIFOs enabled.
 | |
| 				On the 8250/16450 UART, this bit is zero.
 | |
| 
 | |
| 			Bit 5	Reserved, always 0.
 | |
| 
 | |
| 			Bit 4	Reserved, always 0.
 | |
| 
 | |
| 			Bit 3	Interrupt ID Bit #2
 | |
| 				On the 8250/16450 UART, this bit is zero.
 | |
| 			Bit 2	Interrupt ID Bit #1
 | |
| 			Bit 1	Interrupt ID Bit #0
 | |
| 				These three bits combine to report
 | |
| 				the category of event that caused the
 | |
| 				interrupt that is in progress.  These
 | |
| 				categories have priorities, so if 
 | |
| 				multiple categories of events occur at
 | |
| 				the same time, the UART will report the
 | |
| 				more important events first and the host
 | |
| 				must resolve the events in the order they
 | |
| 				are reported.  All events that caused the
 | |
| 				current interrupt must be resolved before
 | |
| 				any new interrupts will be generated.  
 | |
| 				(This is a limitation of the PC
 | |
| 				architecture.)
 | |
| 
 | |
| 				2 1 0	Priority	Description
 | |
| 
 | |
| 				0 1 1	First		Receiver Error
 | |
| 							(OE, PE, BI or FE)
 | |
| 							
 | |
| 				0 1 0	Second		Received Data
 | |
| 							Available
 | |
| 
 | |
| 				1 1 0	Second		Trigger level 
 | |
| 							identification
 | |
| 							(Stale data in
 | |
| 							 receive buffer)
 | |
| 
 | |
| 				0 0 1	Third		Transmitter has
 | |
| 							room for more
 | |
| 							words (THRE)
 | |
| 
 | |
| 				0 0 0	Fourth		Modem Status
 | |
| 							Change (-CTS,
 | |
| 							-DSR, -RI, or
 | |
| 							-DCD)
 | |
| 
 | |
| 			Bit 0	Interrupt Pending Bit
 | |
| 				If this bit is set to "0", then at least
 | |
| 				one interrupt is pending.
 | |
| 
 | |
| 
 | |
| +0x03	write/read	Line Control Register (LCR)
 | |
| 
 | |
| 			Bit 7	Divisor Latch Access Bit (DLAB)
 | |
| 				When set, access to the data
 | |
| 				transmit/receive register (THR/RBR) and
 | |
| 				the Interrupt Enable Register (IER) is
 | |
| 				disabled.  Any access to these ports is
 | |
| 				now redirected to the Divisor Latch
 | |
| 				Registers.  Setting this bit, loading
 | |
| 				the Divisor Registers, and clearing
 | |
| 				DLAB should be done with interrupts
 | |
| 				disabled.
 | |
| 
 | |
| 			Bit 6	Set Break
 | |
| 				When set to "1", the transmitter begins
 | |
| 				to transmit continuous Spacing until
 | |
| 				this bit is set to "0".  This overrides
 | |
| 				any bits of characters that are being
 | |
| 				transmitted.
 | |
| 
 | |
| 			Bit 5	Stick Parity
 | |
| 				When parity is enabled, setting this
 | |
| 				bit causes parity to always be "1" or
 | |
| 				"0", based on the value of Bit 4.
 | |
| 
 | |
| 			Bit 4	Even Parity Select (EPS)
 | |
| 				When parity is enabled and Bit 5 is "0",
 | |
| 				setting this bit causes even parity
 | |
| 				to be transmitted and expected.  
 | |
| 				Otherwise, odd parity is used.
 | |
| 
 | |
| 			Bit 3	Parity Enable (PEN)
 | |
| 				When set to "1", a parity bit is
 | |
| 				inserted between the last bit of the
 | |
| 				data and the Stop Bit.  The UART will
 | |
| 				also expect parity to be present in
 | |
| 				the received data.
 | |
| 
 | |
| 			Bit 2	Number of Stop Bits (STB)
 | |
| 				If set to "1" and using 5-bit data words,
 | |
| 				1.5 Stop Bits are transmitted and 
 | |
| 				expected in each data word.  For 6, 7
 | |
| 				and 8-bit data words, 2 Stop Bits are
 | |
| 				transmitted and expected.  When this bit
 | |
| 				is set to "0", one Stop Bit is used on
 | |
| 				each data word.
 | |
| 
 | |
| 			Bit 1	Word Length Select Bit #1 (WLSB1)
 | |
| 			Bit 0	Word Length Select Bit #0 (WLSB0)
 | |
| 				Together these bits specify the number
 | |
| 				of bits in each data word.
 | |
| 
 | |
| 				1 0	Word Length
 | |
| 
 | |
| 				0 0	5 Data Bits
 | |
| 				0 1	6 Data Bits
 | |
| 				1 0	7 Data Bits
 | |
| 				1 1	8 Data Bits
 | |
| 
 | |
| 
 | |
| +0x04	write/read	Modem Control Register (MCR)
 | |
| 
 | |
| 			Bit 7	Reserved, always 0.
 | |
| 
 | |
| 			Bit 6	Reserved, always 0.
 | |
| 
 | |
| 			Bit 5	Reserved, always 0.
 | |
| 
 | |
| 			Bit 4	Loop-Back Enable 
 | |
| 				When set to "1", the UART transmitter
 | |
| 				and receiver are internally connected
 | |
| 				together to allow diagnostic operations.
 | |
| 				In addition, the UART modem control
 | |
| 				outputs are connected to the UART modem 
 | |
| 				control inputs.  CTS is connected to RTS,
 | |
| 				DTR is connected to DSR, OUT1 is
 | |
| 				connected to RI, and OUT 2 is connected
 | |
| 				to DCD.
 | |
| 
 | |
| 			Bit 3	OUT 2
 | |
| 				An auxiliary output that the host
 | |
| 				processor may set high or low.
 | |
| 				In the IBM PC serial adapter (and most
 | |
| 				clones), OUT 2 is used to tri-state 
 | |
| 				(disable) the interrupt signal from the
 | |
| 				8250/16450/16550 UART.
 | |
| 
 | |
| 			Bit 2	OUT 1
 | |
| 				An auxiliary output that the host
 | |
| 				processor may set high or low.
 | |
| 				This output is not used on the IBM PC
 | |
| 				serial adapter.
 | |
| 
 | |
| 			Bit 1	Request to Send (RTS)
 | |
| 				When set to "1", the output of the UART
 | |
| 				-RTS line is Low (Active).
 | |
| 
 | |
| 			Bit 0	Data Terminal Ready (DTR)
 | |
| 				When set to "1", the output of the UART
 | |
| 				-DTR line is Low (Active).
 | |
| 
 | |
| 
 | |
| +0x05	write/read	Line Status Register (LSR)
 | |
| 
 | |
| 			Bit 7	Error in Receiver FIFO
 | |
| 				On the 8250/16450 UART, this bit is zero.
 | |
| 				This bit is set to "1" when any of
 | |
| 				the bytes in the FIFO have one or more
 | |
| 				of the following error conditions: PE,
 | |
| 				FE, or BI.
 | |
| 
 | |
| 			Bit 6	Transmitter Empty (TEMT)
 | |
| 				When set to "1", there are no words 
 | |
| 				remaining in the transmit FIFO or the
 | |
| 				transmit shift register.  The
 | |
| 				transmitter is completely idle.
 | |
| 
 | |
| 			Bit 5	Transmitter Holding Register Empty (THRE)
 | |
| 				When set to "1", the FIFO (or holding
 | |
| 				register) now has room for at least one
 | |
| 				additional word to transmit.  The
 | |
| 				transmitter may still be transmitting
 | |
| 				when this bit is set to "1".
 | |
| 
 | |
| 			Bit 4	Break Interrupt (BI)
 | |
| 				The receiver has detected a Break signal.
 | |
| 
 | |
| 			Bit 3	Framing Error (FE)
 | |
| 				A Start Bit was detected but the Stop
 | |
| 				Bit did not appear at the expected time.
 | |
| 				The received word is probably garbled.
 | |
| 
 | |
| 			Bit 2	Parity Error (PE)
 | |
| 				The parity bit was incorrect for the
 | |
| 				word received.
 | |
| 
 | |
| 			Bit 1	Overrun Error (OE)
 | |
| 				A new word was received and there
 | |
| 				was no room in the receive buffer.  The
 | |
| 				newly-arrived word in the shift
 | |
| 				register is discarded.  On 8250/16450
 | |
| 				UARTs, the word in the holding
 | |
| 				register is discarded and the newly-
 | |
| 				arrived word is put in the holding
 | |
| 				register.
 | |
| 
 | |
| 			Bit 0	Data Ready (DR)
 | |
| 				One or more words are in the
 | |
| 				receive FIFO that the host may read.
 | |
| 				A word must be completely received
 | |
| 				and moved from the shift register into
 | |
| 				the FIFO (or holding register for
 | |
| 				8250/16450 designs) before this bit is
 | |
| 				set.
 | |
| 
 | |
| 
 | |
| +0x06	write/read	Modem Status Register (MSR)
 | |
| 			
 | |
| 			Bit 7	Data Carrier Detect (DCD)
 | |
| 				Reflects the state of the DCD line
 | |
| 				on the UART.
 | |
| 
 | |
| 			Bit 6	Ring Indicator (RI)
 | |
| 				Reflects the state of the RI line on
 | |
| 				the UART.
 | |
| 
 | |
| 			Bit 5	Data Set Ready (DSR)
 | |
| 				Reflects the state of the DSR line on
 | |
| 				the UART.
 | |
| 
 | |
| 			Bit 4	Clear To Send (CTS)
 | |
| 				Reflects the state of the CTS line on
 | |
| 				the UART.
 | |
| 
 | |
| 			Bit 3	Delta Data Carrier Detect (DDCD)
 | |
| 				Set to "1" if the -DCD line has changed
 | |
| 				state one more more times since the last
 | |
| 				time the MSR was read by the host.
 | |
| 
 | |
| 			Bit 2	Trailing Edge Ring Indicator (TERI)
 | |
| 				Set to "1" if the -RI line has had a
 | |
| 				low to high transition since the last
 | |
| 				time the MSR was read by the host.
 | |
| 
 | |
| 			Bit 1	Delta Data Set Ready (DDSR)
 | |
| 				Set to "1" if the -DSR line has changed
 | |
| 				state one more more times since the last
 | |
| 				time the MSR was read by the host.
 | |
| 
 | |
| 			Bit 0	Delta Clear To Send (DCTS)
 | |
| 				Set to "1" if the -CTS line has changed
 | |
| 				state one more more times since the last
 | |
| 				time the MSR was read by the host.
 | |
| 
 | |
| 
 | |
| +0x07	write/read	Scratch Register (SCR)
 | |
| 			This register performs no function in the
 | |
| 			UART.  Any value can be written by the host to
 | |
| 			this location and read by the host later on.
 | |
| </verb>
 | |
| 
 | |
|     <sect3><heading>Beyond the 16550A UART</heading>
 | |
| 
 | |
| 	<p>Although National Semiconductor has not offered any components
 | |
| 	compatible with the 16550 that provide additional features,
 | |
| 	various other vendors have.  Some of these components are described
 | |
| 	below.   It should be understood that to effectively utilize these
 | |
| 	improvements, drivers may have to be provided by the chip vendor
 | |
| 	since most of the popular operating systems do not support features
 | |
| 	beyond those provided by the 16550.
 | |
| 
 | |
| <descrip>
 | |
| <tag>ST16650</tag>By default this part is similar to the NS16550A, but an
 | |
| 		extended 32-byte send and receive buffer can be optionally
 | |
| 		enabled.  Made by Startech.   
 | |
| 
 | |
| <tag>TIL16660</tag>By default this part behaves similar to the NS16550A,
 | |
| 		but an extended 64-byte send and receive buffer can be
 | |
| 		optionally enabled.  Made by Texas Instruments.  
 | |
| 
 | |
| <tag>Hayes ESP</tag>This proprietary plug-in card contains a 2048-byte
 | |
| 		send and receive buffer, and supports data rates
 | |
| 		to 230.4Kbit/sec.  Made by Hayes.
 | |
| </descrip>
 | |
| 
 | |
| 	<p>In addition to these "dumb" UARTs, many vendors produce
 | |
| 	intelligent serial communication boards.  This type of design
 | |
| 	usually provides a microprocessor that interfaces with several
 | |
| 	UARTs, processes and buffers the data, and then alerts the main
 | |
| 	PC processor when necessary.  Because the UARTs are not directly
 | |
| 	accessed by the PC processor in this type of communication system,
 | |
| 	it is not necessary for the vendor to use UARTs that are compatible
 | |
| 	with the 8250, 16450, or the 16550 UART.   This leaves the
 | |
| 	designer free to components that may have better performance
 | |
| 	characteristics. 
 | |
| 
 | |
| <!-- 601131 ? -->
 | |
| 
 |