176
ATmega64A [DATASHEET]
8160D–AVR–02/2013
21.7.6
Disabling the Receiver
In contrast to the Transmitter, disabling of the Receiver will be immediate. Data from ongoing receptions will there-
fore be lost. When disabled (that is, the RXENn is set to zero) the receiver will no longer override the normal
function of the RxD port pin. The receiver buffer FIFO will be flushed when the Receiver is disabled. Remaining
data in the buffer will be lost
21.7.7
Flushing the Receive Buffer
The receiver buffer FIFO will be flushed when the Receiver is disabled, that is, the buffer will be emptied of its con-
tents. 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 examples show how to
flush the receive buffer.
Note:
21.8
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 asynchro-
nous serial frames at the RxD 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.
21.8.1
Asynchronous Clock Recovery
The Clock Recovery logic synchronizes internal clock to the incoming serial frames.
Figure 21-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 varia-
tion 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 RxD line is idle (that is, no communication activity).
Figure 21-5. Start Bit Sampling
USART_Flush:
sbis
UCSRnA, RXCn
ret
in
r16, UDRn
rjmp
USART_Flush
void
USART_Flush( void )
{
unsigned char
dummy;
while
( UCSRnA & (1<<RXCn) ) dummy = UDRn;
}
12
34
56
7
8
9
10
11
12
13
14
15
16
12
START
IDLE
0
BIT 0
3
123
4
5
678
12
0
RxD
Sample
(U2X = 0)
Sample
(U2X = 1)