🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by ROsman%ASS%SwRI05 Thu, 20 Jun 1991 00:13
Halp!?
#756
Author: ROsman%ASS%SwRI05
Date: Thu, 20 Jun 1991 00:13
78 lines
2460 bytes
I have a few problems that are nagging me, and I'm looking for
ideas.  I have a device that generates an interrupt every 300 +/-
5 milliseconds.

Okay, here's the code in question:

+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
=+=+=+=

void (_interrupt _far tite_handler (void))

{
/*
	Cycle the board through mode 3 to clear the pending in-
terrupt
	I should use card_off() here, but fear of stack check-
ing...
*/

access = inpw(ACCESS_REGISTER);
command_word = inpw (COMM_DATA_RAM);
outpw (CARD_CONFIG, 0x0310 );

_disable();

	/* and clear the Peripheral Interrupt Controller */

	if (pic_addr > LO_PIC_ADDR)
		 {
		 outp ( LO_PIC_ADDR , END_OF_INTERRUPT );
		 }

	outp ( PIC_EOI , END_OF_INTERRUPT );

_enable();

/*
access_flag indicates the number of unserviced interrupts. The
interrupt
service routine zeros it after service is complete.
*/

access_flag++;

}

+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=

I have two possibly related problems.

First, the output of this routine is checked in a do forever type
loop that checks "access_flag".  I'm doing this so I can safely
use library routines like printf.  When I print "access_flag"
from this loop, it's value is ALWAYS 2.  Interrupts from the card
being serviced are re-enabled at the end of the servicing code
just after the statement:

	access_flag = 0;


Second, when I use interrupt lines associated with PIC1 (irqs 5
and 7), the thing hangs without an interrupt occuring after five
or so interrupts.  If I use interrupt lines associated with PIC2
(irqs 10, 11, 12 and 14) the thing runs for thousands of cycles
(10,000 so far) without a hitch.

Watching the hardware with a 'scope indicates that the response
time is no more than 50 microseconds, and is usually less than 20.
The interrupt line transitions are clean and I see an edge ONLY
once every every 300 +/- 5 milliseconds.

The machine is 25 MHz EISA 486.

Thanks in advance for any help,

Rich Osman

Please reply to >INTERNET:Oz@SwRI.edu
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads