home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_10_09
/
1009040a
< prev
next >
Wrap
Text File
|
1992-04-03
|
8KB
|
245 lines
/*** LISTING 1 ***/
/*** ***/
/*** serial.h ***/
#include <dos.h>
#define COM1 0
#define COM2 1
#define COM3 2
#define COM4 3
#define COM1BASE 0x3F8 /* Base address for COM1 */
#define COM2BASE 0x2F8 /* Base address for COM2 */
#define COM3BASE 0x3E8 /* Base address for COM3 */
#define COM4BASE 0X2E8 /* Base address for COM4 */
/*** ****************************************** ***/
/*** 8250 UART user accessible registers ***/
/*** offsets relative to COMBASE address. ***/
/*** ****************************************** ***/
#define TXR 0 /* Transmit register (WRITE) */
#define RXR 0 /* Receive register (READ) */
#define IER 1 /* Interrupt Enable */
#define IIR 2 /* Interrupt ID */
#define LCR 3 /* Line control */
#define MCR 4 /* Modem control */
#define LSR 5 /* Line Status */
#define MSR 6 /* Modem Status */
#define SRP 7 /* Scratch Pad */
#define DLL 0 /* Divisor Latch Low */
#define DLH 1 /* Divisor latch High */
/*** ****************************************** ***/
/*** INTERRUPT ENABLE REGISTER (OFFSET 1) ***/
/*** ****************************************** **
Bit values of the Interrupt Enable Register (IER).
bit meaning
--- -------
0 Interrupt when byte is recieved.
1 Interrupt when transmitter hold-
ing register is empty.
2 Interrupt when there is an error
in data reception.
3 Interrupt when any RS-232 inputs
change states.
4-7 Not used. (Always 0)
*/
#define RX_INT 0x01
#define TBE_INT 0x02
#define ERR_INT 0x03
#define RS_INT 0x04
/*** ***************************************** ***/
/* INTERRUPT IDENTIFICATION REGISTER (OFFSET 2) */
/*** ***************************************** **
Bit values of the Interrupt Identification (IIR).
bit meaning
--- -------
0 0 = Interrupt pending.
1-2 Interrupt ID code
00 = RS-232 input
01 = Transmitter buffer empty
10 = Data received (RX_ID)
11 = Reception error, or BREAK.
3-7 Not used. */
#define RX_ID 0x04
#define RX_MASK 0x07
/*** ***************************************** ***/
/*** LINE CONTROL REGISTER (OFFSET 3) ***/
/*** ***************************************** **
Bit values of the Line Control Register (LCR).
bit meaning
--- -------
0-1 00 = 5 bits
01 = 6 bits
10 = 7 bits
11 = 8 bits.
2 Stop bits.
3 0 = parity off
1 = parity on.
4 0 = parity odd
1 = parity even.
5 Sticky parity.
6 Set break.
7 Toggle port addresses. (DLAB) */
#define NO_PARITY 0x00
#define EVEN_PARITY 0x18
#define ODD_PARITY 0x08
#define DLAB 0x80
/*** ***************************************** ***/
/*** MODEM CONTROL REGISTER (OFFSET 4) ***/
/*** ***************************************** **
Bit values of the Modem Control Register (MCR).
bit meaning
--- -------
0 1 assert DTR (Data Terminal Ready)
1 1 assert RTS (Request to Send)
2 User definable output. (GPO1)
3 Enable Interrupts on 8250. (GPO2)
4 Local Loopback Test.
5-7 Not used. (Always 0)
*/
#define DTR 0x01
#define RTS 0x02
#define GPO1 0x04
#define GPO2 0x08
#define EN_INT 0x08
/*** ***************************************** ***/
/*** LINE STATUS REGISTER (OFFSET 5) ***/
/*** ***************************************** **
Bit values held in the Line Status Register (LSR).
bit meaning
--- -------
0 Data ready.
1 Overrun error.
2 Parity error.
3 Framing error.
4 Break detect.
5 Transmitter buffer empty.
6 Transmitter empty.
7 Time out. */
#define RCVRDY 0x01
#define OVRERR 0x02
#define PRTYERR 0x04
#define FRMERR 0x08
#define BRKERR 0x10
#define XMTRDY 0x20
#define XMTRSR 0x40
#define TIMEOUT 0x80
/*** ***************************************** ***/
/*** MODEM STATUS REGISTER (OFFSET 6) ***/
/*** ***************************************** **
Bit values held in the Modem Status Register (MSR).
bit meaning
--- -------
0 Delta CTS.
1 Delta DSR.
2 Delta RI.
3 Delta DCD.
4 CTS (Clear to Send).
5 DSR (Data Set Ready).
6 RI (Ring indicator).
7 DCD (Data Carrier Detected). */
#define D_CTS 0x01
#define D_DSR 0x02
#define D_RI 0x04
#define D_DCD 0x08
#define CTS 0x10
#define DSR 0x20
#define RI 0x40
#define DCD 0x80
/*** ***************************************** ***/
/*** SCRATCH PAD REGISTER (OFFSET 7) ***/
/*** ***************************************** **
This register has no function and may be use
as any other byte of RAM, but note that this
register does not exist on early versions of
the 8250.
*/
/*** ***************************************** ***/
/*** LSB & MSB BAUD RATE DIVISOR LATCH ***/
/*** (REGISTER 8 & 9) ***/
/*** ***************************************** **
These two register are use to generate the
baud rates. They are reached by setting the
DLAB bit of the LINE CONTROL REGISTER to a one
and addressing Register 8 as an OFFSET of 0
and Register 9 as an OFFSET of 1. */
/*** ***************************************** ***/
/*** These are the port addresses of the 8259 ***/
/*** Programmable Interrupt Controller (PIC). ***/
/*** ***************************************** ***/
#define IMR 0x21 /* Interrupt Mask Register Port*/
#define ICR 0x20 /* Interrupt Control Port */
/*** An end of interrupt needs to be sent to ***/
/*** the Control Port of the 8259 when a ***/
/*** hardware interrupt ends. ***/
#define EOI 0x20 /* End Of Interrupt */
/*** The (IMR) tells the (PIC) to service an ***/
/*** interrupt only if it is not masked (FALSE).**/
/*** ***************************************** ***/
/*** INTERRUPT ADDRESS FOR COM PORTS ***/
/*** ***************************************** ***/
#define IRQ4 0xEF /*** COM1 & COM3 ***/
#define IRQ3 0xF7 /*** COM2 & COM4 ***/
/*** ***************************************** ***/
/*** GENERAL DEFINE STATEMENTS ***/
/*** ***************************************** ***/
#define SBUFSIZ 4000
/*** ***************************************** ***/
/*** PROTOTYPES ***/
/*** ***************************************** ***/
int SerialOut(char Char_Value);
int SerialIn(void);
void interrupt far ReceiveData(void);
int IntSerialIn(void);
int SetPort (int ComPort);
int SetBaud(long Baud);
int SetOthers(int Parity, int DataBits, int StopBits);
int SetSerial(int ComPort, long Baud, int Parity,
int DataBits, int StopBits);
void Setvects(int ComPort);
void Resvects(int ComPort);
void EnableInt(int ComPort);
void DisableInt(void);
void InitSerial(int ComPort);
void CloseSerial(int ComPort);
void Assert(int request);
void Assert_Off(int request);
int Status(int request);