Hardware manual

For the obsolete serial ports, only one character gets thru every several seconds. This is so slow that it seems
almost like nothing is working (especially if the character that gets thru is invisible (such a space or newline).
For the modern ports with FIFO buffers you will likely see bursts of up to 16 characters every several
seconds.
If you have a modem on the port and dial a number, it seemingly may not connect since the CONNECT
message may not make it thru. But after a long wait it may finally connect and you may see part of a login
message (or the like). The response from your side of the connection may be so delayed that the other side
gives up and disconnects you, resulting in a NO CARRIER message.
If you use minicom, a common test to see if things are working is to type the simplest "AT" command and see
if the modem responds. Typing just at<enter> should normally (if interrupts are OK) result in an immediate
"OK" response from the modem. With bad interrupts you type at<enter> and may see nothing. But then after
10 seconds or so you see the cursor drop down one line. What is going on is that the FIFO is behaving like it
can only hold one byte. The "at" you typed caused it to overrun and both letters were lost. But the final
<enter> eventually got thru and you "see" this invisible character by noticing that the cursor jumped down one
line. If you were to type a single letter and then wait about 10 seconds, you should see it echo back to the
screen. This is fine if your typing speed is less that one word per minute :-)
17.3 Mis-set Interrupts
If you don't understand what an interrupt does see Interrupts. If a serial port has one IRQ set in the hardware
but a different one set in the device driver, the device driver will not catch any interrupts sent by the serial
port. Since the serial port uses interrupts to call its driver to service the port (fetching bytes from its 16-byte
receive buffer or putting another 16-bytes in its transmit buffer) one might expect that the serial port would
not work at all.
But it still may work anyway --sort of. Why? Well, besides the interrupt method of servicing the port there's
an undocumented slow polling method that doesn't need interrupts. The way it works is that every so often the
device driver checks the serial port to see if it needs anything such as if it has some bytes that need fetching
from its receive buffer. If interrupts don't work, the serial driver falls back to this polling method. But this
polling method was not intended to be used a substitute for interrupts. It's so slow that it's not practical to use
and may cause buffer overruns. Its purpose may have been to get things going again if just one interrupt is lost
or fails to do the right thing. It's also useful in showing you that interrupts have failed. Don't confuse this slow
polling method with the fast polling method that operates on ports that have their IRQs set to 0.
For the 16-byte transmit buffer, 16 bytes will be transmitted and then it will wait until the next polling takes
place (several seconds later) before the next 16 bytes are sent out. Thus transmission is very slow and in small
chunks. Receiving is slow too since bytes that are received by the receive buffer are likely to remain there for
several seconds until it is polled.
This explains why it takes so long before you see what you typed. When you type say AT to a modem, the AT
goes out the serial port to the modem. The modem then echos the AT back thru the serial port to the screen.
Thus the AT characters have to pass twice thru the serial port. Normally this happens so fast that AT seems to
appear on the screen at the same time you hit the keys on the keyboard. With slow polling delays at the serial
port, you don't see what you typed until perhaps 15 seconds later. Even then, you don't often see all you typed
but only the first several characters.
What about overruns of the 16-byte receive buffer? This will happen with an external modem since the
modem just sends to the serial port at high speed which is likely to overrun the 16-byte buffer. But for an
Serial HOWTO
17.2 Symptoms of Mis-set or Conflicting Interrupts 66