Datasheet

193
ATtiny828 [DATASHEET]
8371A–AVR–08/12
Note: 1. See “Code Examples” on page 7.
18.6 Data Transfer
Using the USART in MSPI mode requires the transmitter to be enabled, i.e. the TXEN bit to be set. When the transmitter
is enabled, the normal port operation of the TxD pin is overridden and given the function as the transmitter's serial output.
Enabling the receiver is optional and is done by setting the RXEN bit. When the receiver is enabled, the normal pin
operation of the RxD pin is overridden and given the function as the receiver's serial input. The XCK 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 writing to UDR. This is the
case for both sending and receiving data since the transmitter controls the transfer clock. The data written to UDR is
moved from the transmit buffer to the shift register when the shift register is ready to send a new frame.
Note: To keep the input buffer in sync with the number of data bytes transmitted, UDR must be read once for each byte trans-
mitted. The input buffer operation is identical to normal USART mode, i.e. if an overflow occurs the character last
received will be lost, not the first data in the buffer. This means that if four bytes are transferred, byte 1 first, then byte
2, 3, and 4, and the UDR is not read before all transfers are completed, then byte 3 to be received will be lost, and not
byte 1.
The following code examples show a simple USART in MSPIM mode transfer function based on polling of the Data
Register Empty flag (UDRE) and the Receive Complete flag (RXC). The USART has to be initialized before the function
can be used. For the assembly code, the data to be sent is assumed to be stored in register R16 and the data received
will be available in the same register (R16) after the function returns.
The function simply waits for the transmit buffer to be empty by checking the UDRE flag, before loading it with new data
to be transmitted. The function then waits for data to be present in the receive buffer by checking the RXC flag, before
reading the buffer and returning the value..
C Code Example
(1)
void USART_Init( unsigned int baud )
{
UBRR = 0;
/* Setting the XCK port pin as output, enables master mode. */
XCK_DDR |= (1<<XCK);
/* Set MSPI mode of operation and SPI data mode 0. */
UCSRC = (1<<UMSEL1)|(1<<UMSEL0)|(0<<UCPHA)|(0<<UCPOL);
/* Enable receiver and transmitter. */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set baud rate. */
/* IMPORTANT: Baud Rate must be set after transmitter is enabled */
UBRR = baud;
}