16C552 Dual UART and LPT

Pinout

PEMD --> -- -- -- -- -- -- -- -- -- +                      
TRI --> -- -- -- -- -- -- -- -- + | + -- -- -- -- -- -- -- -- <-- !ACK
!CS1 --> -- -- -- -- -- -- -- + | | | + -- -- -- -- -- -- -- <-- PE
CLK --> -- -- -- -- -- -- + | | | | | + -- -- -- -- -- -- <-- BUSY
!DSR1 --> -- -- -- -- -- + | | | | | | | + -- -- -- -- -- <-- SLCT
!RI1 --> -- -- -- -- + | | | | | | | | | + -- -- -- -- --- VDD
GND --- -- -- -- + | | | | | | | | | | | + -- -- -- <-- !ERR
!DCD1 --> -- -- + | | | | | | | | | | | | | + -- -- <-- SIN1
!RXRDY0 <-- -- + | | | | | | | | | | | | | | | + -- --> !RXRDY1
      9 8 7 6 5 4 3 2 1 68 67 66 65 64 63 62 61      
SOUT1 <-- 10 16C552
(PLCC68)
60 --> INT1
!DTR1 <-- 11 59 --> INT2
!RTS1 <-- 12 58 <-> SLIN
!CTS1 --> 13 57 <-> !INIT
D0 <-> 14 56 <-> !AFD
D1 <-> 15 55 <-> !STB
D2 <-> 16 54 --- GND
D3 <-> 17 53 <-> PD0
D4 <-> 18 52 <-> PD1
D5 <-> 19 51 <-> PD2
D6 <-> 20 50 <-> PD3
D7 <-> 21 49 <-> PD4
TXRDY0 <-- 22 48 <-> PD5
VDD <-- 23 47 <-> PD6
!RTS0 <-- 24 46 <-> PD7
!DTR0 <-- 25 45 --> INT0
SOUT0 <-- 26 44 --> BD0
      27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43      
GND --- -- + | | | | | | | | | | | | | | | + -- <-- !EN_IRQ
!CTS0 --> -- -- + | | | | | | | | | | | | | + -- -- --> !TXRDY0
!DCD0 --> -- -- -- + | | | | | | | | | | | + -- -- -- <-- SIN0
!RI0 --> -- -- -- -- + | | | | | | | | | + -- -- -- -- <-- VDD
!DSR0 --> -- -- -- -- -- + | | | | | | | + -- -- -- -- -- <-- !RESET
!CS0 --> -- -- -- -- -- -- + | | | | | + -- -- -- -- -- -- <-- !CS2
A2 --> -- -- -- -- -- -- -- + | | | + -- -- -- -- -- -- -- <-- !IOR
A1 --> -- -- -- -- -- -- -- -- + | + -- -- -- -- -- -- -- -- <-- !IOW
                      + -- -- -- -- -- -- -- -- -- <-- A0

  61 63 65 67 01 03 05 07 09  
60 62 64 66 68 02 04 06 08 11 10
58 59 Bottom
view of
PLCC68
socket
13 12
56 57 15 14
54 55 17 16
52 53 19 18
50 51 21 20
48 49 23 22
46 47 25 24
44 45 42 40 38 36 34 32 30 28 26
  43 41 39 37 35 33 31 29 27  

Hardware structure

Approximate VHDL entity only!

entity UART16C552 is	--
port(
	n_IOR: in	std_logic;			-- Not I/O Read strobe.
	n_IOW: in	std_logic;			-- Not I/O Write strobe.
	n_RESET: in	std_logic;			-- Not Reset.
	CLK:	in	std_logic;			-- Clock. CLK is the external clock input to the baud rate divisor of each ACE.
	BDO:	out	std_logic;			-- Bus buffer. Active-high output, asserted when either the device is read.
	A:	in	std_logic_vector(2 downto 0);	-- Address.
	D:	inout	std_logic_vector(7 downto 0);	-- Data.
	CS:	in	std_logic_vector(2 downto 0);	-- Chip select.
	INT:	out	std_logic_vector(2 downto 0);	-- Interrupts.
	ENIRQ:	in	std_logic;			-- Parallel port interrupt source mode selection. 
							-- low for AT mode, high for PS-2 mode
	RXRDY:	in	std_logic_vector(1 downto 0);	-- Receiver ready. For DMA.
	TXRDY:	in	std_logic_vector(1 downto 0);	-- Transmitter ready. For DMA.
	PEMD:	in	std_logic;			-- Printer enhancement mode. 
	TRI:	in	std_logic;			-- 3-state output control input. c. 5k pullup.

	-- serial ports
	RI:	in	std_logic_vector(1 downto 0);	-- Ring Indicator.
	CTS:	in	std_logic_vector(1 downto 0);	-- Clear To Send.
	DCD:	in	std_logic_vector(1 downto 0);	-- Data Carrier Detect.
	DSR:	in	std_logic_vector(1 downto 0);	-- Data Set Ready. 
	SIN:	in	std_logic_vector(1 downto 0);	-- Serial In. 

	SOUT:	out	std_logic_vector(1 downto 0);	-- Serial Out. 
	DTR:	out	std_logic_vector(1 downto 0);	-- Data Terminal Ready. 
	RTS:	out	std_logic_vector(1 downto 0);	-- Ready To Send.

	-- Printer port
	-- the inout signals are normally used as outputs
	SLIN:	inout	std_logic;			-- Select In to printer . Open drain, c. 10k pullup.
	n_INIT:	inout	std_logic;			-- Not Init. Open drain
	n_STB:	inout	std_logic;			-- Not Strobe. Open drain, c. 10k pullup.
	n_AFD:	inout	std_logic;			-- Autofeed. Open-drain, c.10k pullup.
	PD:	inout	std_logic_vector(7 downto 0);	-- Printer Data.

	BUSY:	in	std_logic;			-- Busy. High when the printer is not ready to accept data.
	PE:	in	std_logic;			-- Paper Empty
	SLCT:	in	std_logic;			-- Select In. Open drain, c. 10k pullup.
	n_ERR: 	in	std_logic;			-- Not Error.
	n_ACK:	in	std_logic;			-- Line printer acknowledge.

	);
end entity UART16C552;

When low, PEMD enables the write data register to the PD0 –PD7 lines.
A high on PEMD allows direction control of the PD0 –PD7 port by the DIR bit in the control register.
PEMD is usually tied low for the printer operation.

TRI controls the 3-state control of all I/O and output terminals. When TRI is asserted, all I/Os and outputs are in the high-impedance state allowing board level testers to drive the outputs without overdriving internal buffers.


Register Set

7......0  
  R0
  R1
  R2
  R3
  R4
  R5
  R6
  R7