187
AT90PWM216/316 [DATASHEET]
7710H–AVR–07/2013
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.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.
17.8.1
Asynchronous Clock Recovery
The clock recovery logic synchronizes internal clock to the incoming serial frames.
Figure 17-6 illustrates the sam-
pling 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 (U2X = 1) of oper-
ation. Samples denoted zero are samples done when the RxD line is idle (i.e., no communication activity).
Figure 17-6. Start Bit Sampling
When the clock recovery logic detects a high (idle) to low (start) transition on the RxD 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
Assembly Code Example(1)
USART_Flush:
sbis
UCSRA, RXC0
ret
lds
r16, UDR
rjmp
USART_Flush
C Code Example
(1)
void
USART_Flush( void )
{
unsigned char
dummy;
while
( UCSRA & (1<<RXC0) ) dummy = UDR;
}
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
RxDn
Sample
(U2Xn = 0)
Sample
(U2Xn = 1)