malcnorth wrote:
Having read this post further I have decided to switch to the SC28L92 or SC26C92 DUARTs. which are 44pin PLCC unfortunately, but fast (10nS for SC28L92) WRb. Will take a closer look at the datasheet but really impressed with the content of this thread, so useful.
I am currently using the 28L92 in my POC V1.1 unit at 12.5 MHz, with both channels running at 115.2Kbps without error, using the built-in hardware flow control features. My driver code fully utilizes the RxD and TxD FIFOs to reduce the volume of IRQs during extended data transfers. The 28L92 replaced the 26C92 that I ran for several years—it was a drop-in replacement, with a minor code tweak.
The 28L92's counter/timer is programmed to generate a 100 Hz jiffy IRQ for timekeeping purposes. The interrupt service routine maintains a UNIX-style
time_t date counter—the epoch is October 1 00:00:00 UTC 1752, so
time_t is always a positive value—and an up-time counter. There also is a 16 bit down-counter for time delay functions. Long term timekeeping drift is pretty good, averaging no more than two seconds per month—stability is as good as the 3.6864 MHz oscillator driving the UART.
As far as the hardware interface goes, it's actually quite easy. The 28L92 has two possible bus modes: x86 and Motorola 68K. In one of those oddities that come up now and then, x86 is somewhat easier to correctly implement, though requiring an inverted reset signal, and the generation of separate
/RD and
/WD read/write signals (qualified by Ø2), which is easy to achieve with basic glue logic. The rest of it is the usual chip select and addressing.