Hardware manual
Check /proc/interrupts to see if the IRQ is currently in use by another process. If it's in use by another serial
port you could try "top" (type f and then enable the TTY display) or "ps -e" to find out which serial ports are
in use. If you suspect that setserial has a wrong IRQ then see What is the current IO address and IRQ of my
Serial Port ?
18. What Are UARTs? How Do They Affect Performance?
18.1 Introduction to UARTS
UARTs (Universal Asynchronous Receiver Transmitter) are serial chips on your PC motherboard (or on an
internal modem card). The UART function may also be done on a chip that does other things as well. On older
computers like many 486's, the chips were on the disk IO controller card. Still older computer have dedicated
serial boards.
When PCs all had parallel bus architecture, the UART's purpose was to convert bytes from the PC's parallel
bus to a serial bit-stream. The cable going out of the serial port is serial and has only one wire for each
direction of flow. The serial port sends out a stream of bits, one bit at a time. Conversely, the bit stream that
enters the serial port via the external cable was converted to parallel bytes that the computer can understand.
UARTs deal with data in byte sized pieces, which is conveniently also the size of ASCII characters.
Say you have a terminal hooked up to a serial port on your PC. When you type a character, the terminal gives
that character to its transmitter (also a UART). The transmitter sends that byte out onto the serial line, one bit
at a time, at a specific rate. On the PC end, the receiving UART takes all the bits and reconstruct the byte
(parallel on older PCs) and puts it in a buffer. For newer PCs that might have a PCI-e serial port, the UART
doesn't need to convert parallel-to-serial since the PCI-e "bus" is already a serial line. But the PCI-e line
carries an encoded signal which must be decoded and then greatly slowed down to the speed of the RS-232
serial line.
Along with converting between serial and parallel, the UART does some other things as a byproduct (side
effect) of its primary task. The voltage used to represent bits is also converted (changed). Extra bits (called
start and stop bits) are added to each byte before it is transmitted. See the Serial-HOWTO section Voltage
Waveshapes for details. Also, while the flow rate (in bytes/sec) on the parallel bus inside the computer is very
high, the flow rate out the UART on the serial port side of it is much lower. The UART has a fixed set of rates
(speeds) which it can use at its serial port interface.
18.2 Two Types of UARTs
There are two basic types of UARTs: dumb UARTS and FIFO UARTS. Dumb UARTs are the 8250, 16450,
early 16550, and early 16650. They are obsolete but if you understand how they work it's easy to understand
how the modern ones work with FIFO UARTS ( late 16550, 16550A, and higher numbers). Note that the
driver for all of them is still labeled a "8250" driver in Linux where you may see it in compile options if you
compile your own kernel, etc.
There is some confusion regarding 16550. Early models had a bug and worked properly only as 16450's (no
FIFO). Later models with the bug fixed were named 16550A but many manufacturers did not accept the name
change and continued calling it a 16550. Most all 16550's in use today are like 16550A's. Linux will report it
as being a 16550A even though your hardware manual (or a label note) says it's a 16550. A similar situation
exists for the 16650 (only it's worse since the manufacturer allegedly didn't admit anything was wrong). Linux
will report a late 16650 as being a 16650V2. If it reports it as 16650 it is bad news and only is used as if it had
Serial HOWTO
17.5 Resolving Interrupt Problems 68