
CD1865
—
Intelligent Eight-Channel Communications Controller
90
Datasheet
Set_Byte(SCHR4, 0x13);
Set_Byte(RTPR, 0x05);
// Set timeout value
Set_Byte(TBPRH,0x00);
33 MHz
Set_Byte(TBPRL,0x12);
Set_Byte(RBPRH,0x00);
33 MHz
Set_Byte(RBPRL,0x12);
// Set Tx baud rate 115200 (devisor 0x12) at
// Set Rx baud rate 115200 (devisor 0x12) at
8.11.3
Basic I/O Operations
All the example routines for accessing and programming the board resources are written in
Borland
C++, but can be easily ported to other languages. Specific device programming is not
included in this document; refer to the device data book for general programming information.
Read_Byte
routine is used to read a register within the CD1865. The sequence is shown below:
// Read the content of assigned register
unsigned char Read_Byte( unsigned char addr )
{
return ( inportb( BASE_ADDR+addr ) );
}
Set_Byte
routine is used to write to the register and is a similar operation as the Read_Byte.
// Set the content of assigned register
void Set_Byte( unsigned char addr, unsigned char data)
{
outportb(BASE_ADDR+addr, data);
}
8.11.4
Interrupt Response Operations
The CD1865 evaluation board generates a single interrupt to the ISA bus in response to an interrupt
from any of the three possible sources within the CD1865 device. The interrupt sources are from
the receive system, the transmit system, or the modem functions from any of the available
channels. This single interrupt can be user selected to any of the three ISA -bus interrupt sources as
described in the configuration section. Note that due to all the interrupt signals being OR
’
ed
together, the PC motherboard 8259A PIC must be programmed in level sensitive rather than edge-
sensitive mode.
Determining the Interrupt Source
The host
’
s response to an interrupt from the board is to call an interrupt service routine that
determines the type of interrupt pending and services the request. The example below shows one
way to perform the interrupt determination using the Interrupt Status register.
while ( (int_status = Read_Byte( SRSR )) & 0x15 ){
// Case of Receiving interrupt
if ( int_status & 0x10 )
Service_Rx(chan);
// Case of transmitting interrupt
if ( int_status & 0x04 )
Service_Tx(chan);