Subject: Re: new serial driver
To: None <budd@cs.bu.edu, jonb@metronet.com, leo@dachau.marco.de>
From: Phil Budne <budd@cs.bu.edu>
List: port-pc532
Date: 11/29/1996 23:59:28
Date: Sun, 24 Nov 1996 18:35:44 -0600
From: Jon Buller <jonb@metronet.com>
Phil Budne <budd@cs.bu.edu> wrote:
> I use the special RXRDY interrupt line that George and Dave
> architected so that RXRDY interrupts are NEVER masked (and herein
> lies a problem).
Doesn't that cause problems with corrupting the shared
variables used to communicate between the interrupt routine
and the rest of the system? Or can you make all operations on
those variables atomic somehow?
Atomic; That's the beauty of the Torek code I borrowed! The high
level ISR routine only touches a "put" index into the ring buffer,
while the low level (soft int) code only touches the "get" index (and
examines the "put" index).
I had previously written;
> Ian Dall just sent me mail noting that once the ring buffer
> (or higher level structures in the line discipline) fill
> that information isn't passed down to the interrupt service
> routine to STOP removing characters from the FIFO
I realized this is a bad plan (TM); You don't want the ISR to fire
then do nothing, since the RxRDY is a wired OR of the signal for both
ports on a DUART, and the ICU is programmed for an edge sensitive
interrupt (you'll lose interrupts from the other port). Instead you
need to force the chip to not assert the interrupt condition (if using
the regular interrupt line this could be done by removing the RxRDY
condition from the per channel interrupt mask).
-phil