Datasheet

157
ATmega48/88/168 Automotive [DATASHEET]
7530K–AVR–07/14
17.6.7 Flushing the Receive Buffer
The receiver buffer FIFO will be flushed when the receiver is disabled, i.e., the buffer will be emptied of its contents. Unread
data will be lost. If the buffer has to be flushed during normal operation, due to for instance an error condition, read the UDRn
I/O location until the RXCn flag is cleared. The following code example shows how to flush the receive buffer.
Note: 1. The example code assumes that the part specific header file is included. For I/O registers located in extended
I/O map, “IN”, “OUT”, “SBIS”, “SBIC”, “CBI”, and “SBI” instructions must be replaced with instructions that allow
access to extended I/O. Typically “LDS” and “STS” combined with “SBRS”, “SBRC”, “SBR”, and “CBR”.
17.7 Asynchronous Data Reception
The USART includes a clock recovery and a data recovery unit for handling asynchronous data reception. The clock
recovery logic is used for synchronizing the internally generated baud rate clock to the incoming asynchronous serial frames
at the RxDn pin. The data recovery logic samples and low pass filters each incoming bit, thereby improving the noise
immunity of the receiver. The asynchronous reception operational range depends on the accuracy of the internal baud rate
clock, the rate of the incoming frames, and the frame size in number of bits.
17.7.1 Asynchronous Clock Recovery
The clock recovery logic synchronizes internal clock to the incoming serial frames. Figure 17-5 illustrates the sampling
process of the start bit of an incoming frame. The sample rate is 16 times the baud rate for normal mode, and eight times the
baud rate for double speed mode. The horizontal arrows illustrate the synchronization variation due to the sampling process.
Note the larger time variation when using the double speed mode (U2Xn = 1) of operation. Samples denoted zero are
samples done when the RxDn line is idle (i.e., no communication activity).
Figure 17-5. Start Bit Sampling
When the clock recovery logic detects a high (idle) to low (start) transition on the RxDn line, the start bit detection sequence
is initiated. Let sample 1 denote the first zero-sample as shown in the figure. The clock recovery logic then uses samples 8,
9, and 10 for normal mode, and samples 4, 5, and 6 for double speed mode (indicated with sample numbers inside boxes on
the figure), to decide if a valid start bit is received. If two or more of these three samples have logical high levels (the majority
wins), the start bit is rejected as a noise spike and the receiver starts looking for the next high to low-transition. If however, a
valid start bit is detected, the clock recovery logic is synchronized and the data recovery can begin. The synchronization
process is repeated for each start bit.
Assembly Code Example
(1)
USART_Flush:
sbis UCSRnA, RXCn
ret
in r16, UDRn
rjmp USART_Flush
C Code Example
(1)
void USART_Flush( void )
{
unsigned char dummy;
while ( UCSRnA & (1<<RXCn) ) dummy = UDRn;
}
0
IDLERxD
Sample
(U2X = 0)
Sample
(U2X = 1)
START BIT 0
0 1 2 3 4 5 6 7 8 1 2
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3