Der USART kann einen Interrupt auslösen, wenn er ein Zeichen empfangen hat:
http://www.rn-wissen.de/index.php/UA...Mit_Interrupts
http://www.tschallener.net/AVR/intr_usart.pdf
Der RP6 verwendet das offensichtlich schon in seiner Lib:
(Aus RP6uart.c)Code:/** * UART receive ISR. * Handles reception to circular buffer. */ ISR(USART_RXC_vect) { static volatile uint8_t dummy; if(((uint8_t)(write_size - read_size)) < UART_RECEIVE_BUFFER_SIZE) { uart_receive_buffer[write_pos++] = UDR; write_size++; if(write_pos > UART_RECEIVE_BUFFER_SIZE) write_pos = 0; } else { dummy = UDR; uart_status = UART_BUFFER_OVERFLOW; } }
In RP6RobotBaseLib.c wird in initRobotBase() der entsprechende Receive-Interrupt freigegeben:
UCSRB = (1 << TXEN) | (1 << RXEN) | (1 << RXCIE);







Zitieren

Lesezeichen