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:
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;
}
}
(Aus RP6uart.c)
In RP6RobotBaseLib.c wird in initRobotBase() der entsprechende Receive-Interrupt freigegeben:
UCSRB = (1 << TXEN) | (1 << RXEN) | (1 << RXCIE);
Lesezeichen