UARTs (Universal Asynchronous Receiver Transmitters) or
SIO*'s (Serial Input Output) or
ACIA*'s (Asynchronous Communication Interface Adapters)
are used to send data serially over one single line per direction.
The protocol that is used is simple:
There is also a synchronous protocol and many UART's can handle this too,
but it is seldomly used since it requires both sides to have synchronized
UART's are generally used with RS-232 hardware which converts
the 5V to -12V and the 0V to +12V and vice-versa.
If -12V and +12V is available in a system, then an 1488 and 1489 are generally
used as driver and receiver.
Otherwise the MAX232 is a good solution because it generates it's own -12V and +12V from 0 and 5V and because it integrates both driver and receiver.
Early UART's like General Instruments' AY5-1013A used to be stand-alone
devices which could be used in processorless printers for example.
Later UART's had a processor interface which means that the processor
can instruct the UART what to do by filling memory-like registers
with commands and settings.
|Other (mainly compatible) stand-alone UART's are:|
|SMC||COM2017, COM2502, COM8017, COM8502|
If you need a UART for some project the 16450, 16550, 2661, 2681,
2698, 6551(?), 6850, 68661(?), 68681, 8250(+), 8251 or Z8530
are likely candidates. Each with their own pro's and con's.
The main design choices are, I guess:
Most controllers today already contain one UART and sometimes two.
If you need an external UART, you will likely choose a UART with an
internal Baudrate* generator unless you will use it for Midi for
example which always operates at the same Baudrate* (32 kbps (?)).
In some UART's you can choose from a preprogrammed range of
external clock to Baudrate* divisors, which forces you to supply
the correct external clock rate.
More universal UART's let you program the divisor from 1 to 64k,
with sometimes even an added predivisor with a factor of 1, 4, 16 or 64.
If you need a single UART, have a look at the 8250(+), which was
used in the PC, so can easily be found second hand at PC-fairs etc.
(Just buy a cheap PC-com-board with one on it.
When you want a dual* UART have a look at the 'industry standard' Z8530.
If you need a lot of UART channels, try the 2698 Octal* UART, which contains
four 2681 Dual* UART's or the very recent OX10864 from Oxford Semiconductor.
|Some relevant abbreviations:|
|ACIA*||Asynchronous Communications Interface Adapter (=UART)|
|DART*||Dual* Asynchronous Receiver Transmitter (=2*UART)|
|DUART*||Dual* Universal Asynchronous Receiver Transmitter (=2*UART)|
|MUART*||Multifunctions Universal Asynchronous Receiver Transmitter|
|SIO*||Serial Input Output (=UART)|
|UART||Universal Asynchronous Receiver Transmitter|
|USART*||Universal Synchronous/Asynchronous Receiver/Transmitter|
Date: 19951214 From: Ulf Samuelsson To: firstname.lastname@example.org Subject: New UART NSC is releasing a new UART for Infrared communication. This is the PC87108. It is upwards compatible with the NS16550 UART but will allow higher speed than the typical 115kbps available with the NS16550. Best Regards Ulf SamuelssonIRaD (?) is (also) claiming to do 1 Mb/s and 4 Mb/s.
|www.cs.utk.edu/~shuford/terminal/blum_serial_port.txt||FAQ about the serial port by Christian Blum, very thorough!|
|www.faqs.org/faqs/windows/programming/vcomm/||MS-Windows COM and NS16550A UART FAQ|
Date: 19960306 From: yishai kagan To: email@example.com Subject: Startech X-Url: www.hitex.com../f/uart.htm If you look at the Exar (www.exar.com/) page, you will find some great UARTs made by Startech: 16C654, 68C654
Date: 19970618 From: James Lewis <firstname.lastname@example.org> To: email@example.com Subject: UARTs Please take a look at Oxford Semiconductor's revised web pages. We now offer the world's fastest 8-channel UART (OX10864) and the world's fastest PC compatible 2-channel UART (OX16C952). Full information is on our web site at: www.oxsemi.com/ -- JAMES LEWIS Marketing Director ========================================================== Oxford Semiconductor Ltd Tel: +44 (0)1235 861461 68 Milton Park Fax: +44 (0)1235 821141 Abingdon Oxfordshire OX14 4RX E-mail: firstname.lastname@example.org United Kingdom www.oxsemi.com/ ==========================================================
Date: 20000223 From: Chipdir [mailto:email@example.com] To: Ewen Dave Subject: Re: Chip QuestionOn 20000223 Ewen Dave wrote:
Would you happen to know if there is a way to tell when a 16550-compatible UART is ready to accept one more TX character? I am looking at the 16550 status bits and it seems you can tell that the TX fifo is empty but there is no way to tell when it is full. This seems strange to me.You seem to be right. I just checked the datasheet again. Was some years ago that I programmed for it and that was mostly before the FIFO* was commonly present in PC's...
From: ChipdirOn 20000224 Ewen Dave wrote:
Thank you for the response. I guess it is as you say -- everyone uses interrupts. I just don't see as much need for TX interrupts as I do for RX interrupts.
You're right. When I was porting my software on a new
embedded platform I would do it in the following order:
|www.pccard.co.uk/asic/vpu16550.php||Elan has released a single UART with a PCMCIA interface|