English
Language : 

MEGA128CAN Datasheet, PDF (182/413 Pages) ATMEL Corporation – Microcontroller WITH 128K BYTES OF ISP FLASH AND CAN CONTROLLER
The following code example shows a simple USART0 receive function that handles both
nine bit characters and the status bits.
Assembly Code Example(1)
USART0_Receive:
; Wait for data to be received
lds r18, UCSR0A
sbrs r18, RXC0
rjmp USART0_Receive
; Get status and 9th bit, then data from buffer
lds r17, UCSR0B
lds r16, UDR0
; If error, return -1
andi r18, (1<<FE0) | (1<<DOR0) | (1<<UPE0)
breq USART0_ReceiveNoError
ldi r17, HIGH(-1)
ldi r16, LOW(-1)
USART0_ReceiveNoError:
; Filter the 9th bit, then return
lsr r17
andi r17, 0x01
ret
C Code Example(1)
unsigned int USART0_Receive( void )
{
unsigned char status, resh, resl;
/* Wait for data to be received */
while ( ! (UCSR0A & (1<<RXC0)))
;
/* Get status and 9th bit, then data */
/* from buffer */
status = UCSR0A;
resh = UCSR0B;
resl = UDR0;
/* If error, return -1 */
if ( status & (1<<FE0)|(1<<DOR0)|(1<<UPE0) )
return -1;
/* Filter the 9th bit, then return */
resh = (resh >> 1) & 0x01;
return ((resh << 8) | resl);
}
Note: 1. The example code assumes that the part specific header file is included.
The receive function example reads all the I/O Registers into the Register File before
any computation is done. This gives an optimal receive buffer utilization since the buffer
location read will be free to accept new data as early as possible.
182 AT90CAN128
4250E–CAN–12/04