185
7679H–CAN–08/08
AT90CAN32/64/128
17.7.2
Sending Frames with 9 Data Bit
If 9-bit characters are used (UCSZn = 7), the ninth bit must be written to the TXB8n bit in UCS-
RnB before the low byte of the character is written to UDRn. The following code examples show
a transmit function that handles 9-bit characters. For the assembly code, the data to be sent is
assumed to be stored in registers R17:R16.
Notes:
1. These transmit functions are written to be general functions. They can be optimized if the con-
tents of the UCSR0B is static. For example, only the TXB80 bit of the UCSRB0 Register is
used after initialization.
2. The example code assumes that the part specific header file is included.
The ninth bit can be used for indicating an address frame when using multi processor communi-
cation mode or for other protocol handling as for example synchronization.
17.7.3
Transmitter Flags and Interrupts
The USARTn Transmitter has two flags that indicate its state: USART Data Register Empty
(UDREn) and Transmit Complete (TXCn). Both flags can be used for generating interrupts.
Assembly Code Example
USART0_Transmit:
;
Wait for empty transmit buffer
lds
r18, UCSR0A
sbrs
r18, UDRE0
rjmp
USART0_Transmit
;
Copy 9th bit from r17-bit0 to TXB80 via T-bit of SREG
lds
r18, UCSR0B
bst
r17, 0
bld
r18, TXB80
sts
UCSR0B, r18
;
Put LSB data (r16) into buffer, sends the data
sts
UDR0, r16
ret
C Code Example
void
USART0_Transmit (
unsigned int
data)
{
/*
Wait for empty transmit buffer
*/
while
( !( UCSR0A & (1<<UDRE0)));
/*
Copy 9th bit to TXB8
*/
UCSR0B &= ~(1<<TXB80);
if
( data & 0x0100 )
UCSR0B |= (1<<TXB80);
/*
Put data into buffer, sends the data
*/
UDR0 = data;
}
Содержание AVR AT90CAN128
Страница 414: ...414 7679H CAN 08 08 AT90CAN32 64 128 32 2 QFN64...
Страница 415: ...415 7679H CAN 08 08 AT90CAN32 64 128...