Intelligent Eight-Channel Communications Controller
—
CD1865
Datasheet
61
Special character detection
Break detect
Note:
Data cannot be read from the Receive FIFO or the Receive Status FIFO except when the CD1865
is within the context of a Receive Data Service Request for a specific channel.
7.1.5
Receive Good Data
Service Request
A Receive Good Data Service Request is asserted for any of the following three conditions:
1. Receive FIFO threshold reached, and the FIFO contains Good Data.
2. Receive FIFO threshold not reached, but the FIFO contains Good Data and the Receive Data
Timer times-out.
3. Receive FIFO threshold not reached, but the FIFO contains Good Data and the newly arrived
data contains an exception condition.
When any of these conditions occur, the modified service request vector indicates to the host that
the service request is for Good Data.
It is not necessary to take all or any of the available Good Data when a Good Data Service Request
is received. If a host buffer is too full to accept 8 bytes, a smaller number (even a
‘
0
’
) can be read.
Service request context is then left, and the host buffer is dealt with first. The CD1865 generates
another Good Data Service Request when any of the three conditions listed above are met.
The CD1865 immediately generates another service request if the condition that caused it in the
first place remains true. If no data is read, this is always the case. If some, but not all of the
available data is read, Conditions 1 and 2 are not true; but Condition 3 may be true if an exception
condition caused the Good Data Service Request. If this is a problem, one solution is to temporarily
disable Receive Service Requests on that channel. To avoid FIFO overflow, do not delay handling
the channel for too long.
7.1.6
Receive Exception Service Request
Unusual or exception conditions are reported to the host one character at a time through the
Receive Exception Service Request. As with normal receive processing, the host determines the
requesting channel by reading the GCR. It can then determine the specific exception(s) by reading
the Receive Character Status register before performing the appropriate action. Receive Exceptions
are always 1-byte deep; multiple bytes of exception conditions causes multiple Receive Exception
Service Requests.
For many exceptions, it is not necessary to read the Receive Data register after the Receive Status
register is read. For example, if special character detection is enabled, and the service request is for
recognition of a special character, the character is known by definition because the exception code
indicates the detected character or character sequence.
However, for every exception a byte is placed in the Data FIFO, even though the contents of that
byte may be suspect data, and the byte is discarded at the end of the exception service routine
regardless of whether it was read by the host or not. This is done to keep the Status and Data FIFOs
in lock-step with each other. This is different in the case of a Receive Good Data Service Request
where the user is free to read as many or as few bytes as required.