[comp.os.msdos.programmer] U8250 - Enabling THRE

viraf@seas.gwu.edu (Viraf Bankwalla) (01/17/91)

Hi,

  The Waite Group's, MS-DOS Developer's Guide,
  Chapter 8, Programming the Serial Port, pg 471, has the
  following isr:

  /*----------------  C O D E --------------------*

  void interrupt far s_inthndlr(void)
  {
	int c;
	register int int_id, intmask;

	_enable();		/*  Enable interrupts immediately */

	while(TRUE)
	{
		ini_id = inp(IIR);
		if (bit0(int_id) == 1)
		{
			/* If bit 0 is 1, then no interrupts pending.
			** Send an end of interrupt signal to the 
			** 8259A Programmable Interrupt Controller
			** and return.
			*/
			outp(P8259_0, END_OF_INT);
			return;
		}
		/* If it is receive data ready interrupt
		** enable interrupts for "transmit holding
		** register empty"
		*/
		if (int_id >= RXDATARDY)
			turnon_int(THREINT, intmask);

		/* Process interrupt according to ID.  The
		** following list is in increasing order of
		** priority.
		*/
		switch(int_id)
		{
		    case MDMSTAT:	/* Read modem status */
			s_modemstatus = inp(MSR);
			break;

		    case TXREGEMPTY:
			s_trmty();
			break;

		    case RXDATAREADY:
			s_rda();
			break;

		    case RLINESTATUS:	/* Read line status */
			s_linestatus = inp(LSR);
			break;

		}
	}
  }
  /*----------------  E N D  C O D E --------------------*

My question is, why are THRE interrupts enabled, if (int_id > RXDATAREADY).
Is it to do with the interrupt priority ?.  

Any help would be greatly appreciated.

Thanks in advance.

viraf bankwalla
viraf@seas.gwu.edu
...!uunet!gwusun!viraf