TDS971 IEEE-488/RS232C
COMMUNICATIONS BOARD
DESCRIPTION
This product is obsolescent and should not be used for
new designs with a long lifetime.
This is a Eurocard communications board for TDS2020F or TDS9092 computers (or earlier types).
It contains an IEEE-488 Talker/Listener interface and two RS232 ports with all
baud rates from 75 to 38400. A DIP switch on the board selects the IEEE address.
The board comes complete with 45cm ribbon cable terminated in an IEEE-488 specification
socket for mounting on your instrument.
ADDRESS DECODING
The facilities of the board are memory mapped with the following
addresses:
Addr
|
Chip
|
Control Reg
|
Function
|
0100
|
IEEE
|
Write
|
Interrupt mask register
|
0100
|
IEEE
|
Read
|
Interrupt status register
|
0101
|
IEEE
|
Read
|
Command status register
|
0102
|
IEEE
|
Write
|
Address mode register
|
0102
|
IEEE
|
Read
|
Address status register
|
0103
|
IEEE
|
Read/Write
|
Auxiliary command register
|
0104
|
IEEE
|
Read
|
Address switch register
|
0104
|
IEEE
|
Write
|
Address register
|
0105
|
IEEE
|
Read/Write
|
Serial poll register
|
0106
|
IEEE
|
Write
|
Parallel poll register
|
0106
|
IEEE
|
Read
|
Command pass through register
|
0107
|
IEEE
|
Read/Write
|
Data in/out register
|
010E
|
ACIA (front)
|
Read/Write
|
Control/Status registers
|
010F
|
ACIA (front)
|
Read/Write
|
Data input/output registers
|
0116
|
ACIA (rear)
|
Read/Write
|
Control/Status registers
|
0117
|
ACIA (rear)
|
Read/Write
|
Data input/output registers
|
USE OF TDS9092 WITH TDS971
The TDS971 addresses are already used on the TDS9092 for internal
RAM. Interchange the signals to pins a4 and a5 of the TDS971 (address lines
A8 and A9). This will change the address of the board from 01xx to 02xx, and
examples in this section have been changed to reflect this.
PIN CONNECTIONS
The board is single Eurocard format (160mm x 100mm) and has
a DIN 41612 type C connector (two rows of 32 pins 5.04mm apart). Its pin connections
correspond with both the TDS2020F
and TDS9092 and are given below. You will need the TDS9092-PLUG type to work
with this board.
The IEEE-488 interface is brought to a 24-pin DIL socket on
the solder side of the board into which the ribbon cable assembly provided with
the board is plugged. The other end of the ribbon is an IEEE-488 24-pin socket
for mounting on the case of the instrument. Put in the DIL plug so that the
ribbon cable faces to the rear of the board. The IEEE-488 connections will then
be correct on the other end of the ribbon cable.
A third connector is a 9-pin D-type socket on the front of the
board. It carries one of the two RS232 ports and also power from the computer
which can be led to a remote location. Two uncommitted signal wires go from
this socket to the backplane. Pin connections are:
REAR DIN 41612 TYPE C PLUG
Pin
|
Function
|
Pin
|
Function
|
a1
|
Addr 14
|
c1
|
Addr 15
|
a2
|
Addr 12
|
c2
|
Addr 13
|
a3-a13
|
Addr 10 to 0
|
c3
|
Addr 11
|
a14-a21
|
Data 7 to 0
|
c7
|
Front D3
|
a22
|
E* clock input
|
c14
|
IEEE trigger out
|
a23
|
R/W* input
|
c22
|
E clock input
|
a24
|
+5V input
|
c23
|
Reset* input
|
a25
|
RS232 data input
|
c24
|
-12V input
|
a29
|
RS232 RTS output
|
c25
|
RS232 data out
|
a31
|
Front D6
|
c26
|
IRQ* output
|
a32
|
VIN (+12V)
|
c29
|
RS232 CTS input
|
|
|
c32
|
GND
|
FRONT 9-PIN D-SOCKET
Pin
|
Function
|
Pin
|
Function
|
D1, D2
|
+12V output
|
D3
|
Rear c7
|
D4, D5, D8
|
Ground
|
D6
|
Rear a31
|
D7
|
RS232 Data out
|
D9
|
RS232 Data in
|
SERIAL RS232C INPUT/OUTPUT
For full details of use of an ACIA see the manufacturer's data
sheet (e.g. Motorola MC68A50 or Hitachi HD68A50). The following is an example
of its use. There are two of these devices on the board implementing RS232 ports
at both the front and rear of the board. In the initialisation sequence of the
application it is essential to reset the serial chip. Note from the data sheet
and circuit diagram that this device has a software, not hardware, reset. Then
it is set up according to the desired protocol. For example:
HEX 0216 CONSTANT SERCTL ( Serial control & status
( registers
0217 CONSTANT SERDATA ( Serial input & output
( data regs
: INITIALISE ( . other initialisations .
17 SERCTL C! ( reset
serial ACIA device
15 SERCTL C! ; ( Initialise serial chip to
( divide by 16, 8 bit serial
( data, 1 stop bit, and
( disable interrupts
Data can now be sent and received as follows:
: SENDBYTE ( b - Send byte b from RS232C port
BEGIN SERCTL C@ 2 AND
UNTIL ( Wait till last byte sent
SERDATA C! ; ( Send
byte b
: RECEIVEBYTE ( - b Get byte b from RS232C port
BEGIN SERCTL C@ 1 AND
UNTIL ( Wait
till data received
SERDATA C@ ; ( Get
byte to top of stack
On the board are two DIL switches to set the baud rates of the
serial ports. Only one of each switch must be closed and the associated rates
are printed on the board alongside. One switch is for the front
port the other for the rear one. Baud rates from 300 to 38400
can be set. They derive from the E* clock. These rates assume that the 68A50
was set for divide by 16. If divide by 64 is set then positions 1 and 2 make
extra baud rates of 75 and 150 available respectively.
IEEE-488 (GP-IB) INTERFACE
This is implemented using a Motorola MC68A488 chip (or equivalent).
See the manufacturer's data and application notes for full programming information.
Some of the usual uses of the interface are shown in the following examples.
In the initialisation routine executed after power-up note that the reading
from the IEEE address switches has to be inverted to compensate for the inverting
buffer connecting them to the data bus. The IEEE chip has a software reset and
this has to be included in initialisations.
HEX
0200 CONSTANT IEEE.CTL ( IEEE status register
0201 CONSTANT COMSTATUS ( IEEE command status reg
0203 CONSTANT AUXCMD ( IEEE aux command reg
0204 CONSTANT ADDRREG ( IEEE address switch reg
0205 CONSTANT POLL ( IEEE serial poll reg
0207 CONSTANT IEEE.DATA ( IEEE data register
: INITIALISE ( . other
initialisations .
ADDRREG C@ FF XOR 1F AND
ADDRREG C! ( Set
IEEE address
80 AUXCMD C!
0 AUXCMD C! ( reset
IEEE chip
3 POLL C! ; ( Set
serial poll register
( to
desired default
: ?INIEEE ( - f Flag true if data available
( from
IEEE bus
IEEE.CTL C@ 1 AND ;
: GETIEEE ( - c Get latest char c from IEEE bus
IEEE.DATA C@ ;
: @IEEE ( - c Wait for character from IEEE bus
BEGIN ?INIEEE UNTIL GETIEEE
;
: ?OUTIEEE ( - f Flag true if ok to send byte
( to
IEEE bus
IEEE.CTL C@ 40 AND ;
: !IEEE ( c - Send character c to IEEE bus
BEGIN ?OUTIEEE UNTIL ( Wait till last char sent
POLL C@ 40 OR POLL C! ( Issue service request
( - optional
IEEE.DATA C! ;
The above assumes that the IEEE bus controller is correctly
programmed for the data expected from the Forth system. In practice the Forth
system may try to send when the controller is not at a READ statement. It may therefore hold in ?OUTIEEE indefinitely.
Alternatively the controller may be in the middle of sending a string when the
Forth system wants to transmit. To avoid complicating the BASIC programming
of the controller the following alternative definition of !IEEE can be used.
: SENT ( Waits till byte transmitted, or time-out
1000 0 DO ?OUTIEEE IF LEAVE THEN LOOP ;
: !IEEE ( c - Send character c to IEEE bus
POLL C@ 40 OR POLL C! ( Issue service request
( - optional
BEGIN ?INIEEE WHILE @IEEE DROP
REPEAT ( reject
input data
IEEE.DATA C! SENT ; ( Output
character and
( hold
till gone
TDS971 circuit diagram
Click the diagram for more detail, or to save a copy: 1. in Internet Explorer right click on the picture and select "Save Target as..." 2. in Netscape double-click the picture to open the file, then under "File" select the "Save As" option.
|