Hallo,
Kurze Frage : tmphead = ( UART_RxHead + 1) & UART_RX_BUFFER_MASK(32);
Kann doch nur den Wert "32" enthalten oder sehe ich das falsch?
CodeBox C
CodeBox C
Kurze Frage : tmphead = ( UART_RxHead + 1) & UART_RX_BUFFER_MASK(32);
Kann doch nur den Wert "32" enthalten oder sehe ich das falsch?
CodeBox C
ISR (UART0_RECEIVE_INTERRUPT) /************************************************************************* Function: UART Receive Complete interrupt Purpose: called when the UART has received a character **************************************************************************/ { unsigned char tmphead; unsigned char data; unsigned char usr; unsigned char lastRxError; /* read UART status register and UART data register */ usr = UART0_STATUS; data = UART0_DATA; /* */ #if defined( AT90_UART ) lastRxError = (usr & (_BV(FE)|_BV(DOR)) ); #elif defined( ATMEGA_USART ) lastRxError = (usr & (_BV(FE)|_BV(DOR)) ); #elif defined( ATMEGA_USART0 ) lastRxError = (usr & (_BV(FE0)|_BV(DOR0)) ); #elif defined ( ATMEGA_UART ) lastRxError = (usr & (_BV(FE)|_BV(DOR)) ); #elif defined( AT90USB_USART ) lastRxError = (usr & (_BV(FE1)|_BV(DOR1)) ); #endif /* calculate buffer index */ [B] tmphead = ( UART_RxHead + 1) & UART_RX_BUFFER_MASK(32);[/B] if ( tmphead == UART_RxTail ) { /* error: receive buffer overflow */ lastRxError = UART_BUFFER_OVERFLOW >> 8; }else{ /* store new index */ UART_RxHead = tmphead; /* store received data in buffer */ UART_RxBuf[tmphead] = data; } UART_LastRxError |= lastRxError; }
CodeBox C
unsigned int uart_getc (void) { unsigned char tmptail; unsigned char data; if ( UART_RxHead == UART_RxTail ) { return UART_NO_DATA; /* no data available */ } /* calculate /store buffer index */ tmptail = (UART_RxTail + 1) & UART_RX_BUFFER_MASK; UART_RxTail = tmptail; /* get data from receive buffer */ data = UART_RxBuf[tmptail]; data = (UART_LastRxError << 8) + data; UART_LastRxError = 0; return data; }/* uart_getc */