The steps followed by the idle-line mode:
- SCI wakes up after receipt of the block-start
signal.
- The processor recognizes the next SCI
interrupt.
- The interrupt service routine compares the received address (sent by a remote
transmitter) to the ISR address.
- If the CPU is being addressed, the service
routine clears the SLEEP bit and receives the rest
of the data block.
- If the CPU is not being addressed, the SLEEP bit
remains set. This lets the CPU continue to execute
the main program without being interrupted by the
SCI port until the next detection of a block
start.
Note: In IDLE mode, if the SCI is taking greater than 10 bit periods to
read all the RXDATA from the FIFO, the SCI can miss the immediate block start to be
detected.
The RXWAKE logic asserts only
one time when the SCI identifies 10 bit periods of IDLE. The SCI does not assert again if
RXBUF is read (which clears the WAKE condition) even if the line continues to be idle
after RXBUF read.
So, if the ISR is
taking more than 10 bit periods of time to read all the RXDATA from the FIFO using RXBUF,
the SCI can miss to detect the next block start. This is applicable for both FIFO and
Non-FIFO mode when the CPU takes greater than 10 bit clocks of SCI to read the data from
RXBUF/FIFO.
To avoid this, either of
the following is recommended:
- Set SCICTL1.SWRESET after reading all
RX data at the end of the ISR.
- Read and check the RXWAKE status bit
before reading the RXBUF register. If RXWAKE is set, do not set the SLEEP bit for RX at
the end of the ISR.