205
8272E–AVR–04/2013
ATmega164A/PA/324A/PA/644A/PA/1284/P
Note:
20.6
Data Transfer
Using the USART in MSPI mode requires the Transmitter to be enabled, that is, the TXENn bit in
the UCSRnB register is set to one. When the Transmitter is enabled, the normal port operation
of the TxDn pin is overridden and given the function as the Transmitter's serial output. Enabling
the receiver is optional and is done by setting the RXENn bit in the UCSRnB register to one.
When the receiver is enabled, the normal pin operation of the RxDn pin is overridden and given
the function as the Receiver's serial input. The XCKn will in both cases be used as the transfer
clock.
After initialization the USART is ready for doing data transfers. A data transfer is initiated by writ-
ing to the UDRn I/O location. This is the case for both sending and receiving data since the
Assembly Code Example
USART_Init:
clr
r18
out
UBRRnH,r18
out
UBRRnL,r18
; Setting the XCKn port pin as output, enables master mode.
sbi
XCKn_DDR, XCKn
; Set MSPI mode of operation and SPI data mode 0.
ldi
r18, (1<<UMSELn1)|(1<<UMSELn0)|(0<<UCPHAn)|(0<<UCPOLn)
out
UCSRnC,r18
; Enable receiver and transmitter.
ldi
r18, (1<<RXENn)|(1<<TXENn)
out
UCSRnB,r18
; Set baud rate.
; IMPORTANT: The Baud Rate must be set after the transmitter is enabled!
out
UBRRnH, r17
out
UBRRnL, r18
ret
C Code Example
void
USART_Init( unsigned int baud )
{
UBRRn = 0;
/* Setting the XCKn port pin as output, enables master mode. */
XCKn_DDR |= (1<<XCKn);
/* Set MSPI mode of operation and SPI data mode 0. */
UCSRnC = (1<<UMSELn1)|(1<<UMSELn0)|(0<<UCPHAn)|(0<<UCPOLn);
/* Enable receiver and transmitter. */
UCSRnB = (1<<RXENn)|(1<<TXENn);
/* Set baud rate. */
/* IMPORTANT: The Baud Rate must be set after the transmitter is enabled
*/
UBRRn = baud;
}