Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!uunet!hayes!tnixon From: tnixon@hayes.uucp Newsgroups: comp.dcom.modems Subject: Re: UARTS and Buffers... Message-ID: <3892.27f875f4@hayes.uucp> Date: 2 Apr 91 12:15:48 GMT References: <9104010808.AA05643@ucbvax.Berkeley.EDU> Organization: Hayes Microcomputer Products, Norcross, GA Lines: 44 In article <9104010808.AA05643@ucbvax.Berkeley.EDU>, ST7021@SIUCVMB.BITNET writes: > Recently someone brushed on two different UARTs, the 16450 and the 16550. > Can someone give me an idea of what the difference between these two chips > is? It seemed that what brand you get makes a big difference. The primary difference is that the 16550 has a 16-byte FIFO buffer. This allows the main CPU to put off respond to interrupts with less risk of losing data, and also allows a reduction in interrupt processing overhead (because multiple bytes can be transferred for each interrupt). > One last question - why doesn't the everyday serial port have a small buffer > on it? It would seem that putting even a small buffer on the serial port > would be a great relief to a CPU (espically one that is multi-tasking), as > opposed to having to tend to an interrupt everytime a new character comes in. > All at a cost of one or two dollars (or less?). Do modems with buffering > overcome this problem? Back when the 8250 was selected for the IBM PC serial port, most people were using 300bps modems, and 1200bps modems were just becoming available. I suppose IBM simply didn't foresee the days of V.42bis, V.32bis, and 57600bps data transfers! Modem technology has improved much faster than serial port technology. The requirement for backward compatibility with existing comm software has held back advances in comm ports, although the Hayes ESP attempts to provide a transition by supporting both backward compatible modes _and_ enhanced modes (with 1K-byte FIFOs, automatic flow control, DMA transfers, etc.) Having buffering in modems does NOT help this problem at all. If you're using a 16450, all you have to do is receive TWO characters without the main CPU processing an interrupt and you have a receive data overrun. There's almost no way for any flow control scheme to operate to prevent this from happening -- additional buffering in the UART (or on the card, operating independently of the main CPU), combined with automatic flow control, is the only real solution. -- Toby Nixon, Principal Engineer | Voice +1-404-840-9200 Telex 151243420 Hayes Microcomputer Products Inc. | Fax +1-404-447-0178 CIS 70271,404 P.O. Box 105203 | UUCP uunet!hayes!tnixon AT&T !tnixon Atlanta, Georgia 30348 USA | Internet hayes!tnixon@uunet.uu.net