By the way, the "industrial" moniker comes from the fact that these UARTs have been widely used in TIA-232/422/485 factory networks to communicate with machines. Reliability and performance are major concerns in such electrically hostile environments, things that Philips addressed long ago in their line of UARTs. My experience with Philips UARTs date back some 25 years, and I have long recommended they be used in place of the 65C51 or 6850, both of which represent the state of the art of the 1970s.
The 26C92 and 28L92 that I have used in my POC units are part of a family of UARTs that come in single, dual, quadruple and octal channel models. For our purposes, the following single, dual and quad units are best used (see attached data sheets):
- 28L91 — single channel UART with 16-deep receive and transmit FIFOs, in a PLCC-44 package. Use with a MAX-232 transceiver to implement TIA-232 with hardware handshaking. I recommend this device in place of the 16550, the latter which is a bit of a pain to program.
- 26C92 — dual channel UART with 8-deep receive and transmit FIFOs, in a PLCC-44 package. Use with a MAX-238 transceiver to implement TIA-232 with hardware handshaking.
- 28L92 — dual channel UART with 16-deep receive and transmit FIFOs, in a PLCC-44 package. Use with a MAX-238 transceiver to implement TIA-232 with hardware handshaking.
- 28C94 — quadruple channel UART with 8-deep receive and transmit FIFOs, in a PLCC-52 package. Use with a MAX-248 transceiver to implement TIA-232 with hardware handshaking.
All of these UARTs are capable of a maximum of 921 Kbps CBAT simultaneously on all channels, assuming the host system has enough performance to process the interrupts. In addition to their serial capabilities, the 28L91, 26C92 and 28L92 have a 16 bit counter/timer that can be used for a variety of timing purposes, such as generating a jiffy IRQ. The 28C94 has two such counter/timers. Also present are some programmable I/O pins that can be used for various things.
A 3.6864 MHz clock is used by these UARTs to drive the baud rate generator(s) and perform internal sequencing. Hence these UARTs run asynchronously relative to the 65xx Ø2 clock, which has some hardware interfacing implications. Use of the 65C816's VDA/VPA address qualifying outputs is mandatory with these devices to avoid errors when certain registers are accessed.
The attached driver code includes a file named ASSEMBLE_DRIVER.asm, which can be loaded into the Kowalski assembler/simulator and assembled once some (obvious) dependencies are resolved. Pay particular attention to the following line of code in that file:
Code: Select all
.include "include\hardware\nxp\28l92.asm"As this is not a trivial piece of software, you will need to study it in some detail in order to successfully adapt it to your system. For example, there are stubs in the interrupt handlers that will need to be resolved before successful assembly can occur. Also, I have not created a setup table for the 28C94, which is noted in source comments (it's something that can be created from the existing dual channel table).
If you have any questions on this driver, please post them here and I'll try to give you some help.
——————————————————————————————————————————————————————