#include <avr/io.h>
-#include <avr/interrupt.h>
#include "serial.h"
#define BIT(n) (1<<(n))
-static SerialCallback *serial_callback = 0;
-
void serial_init(uint16_t baud)
{
DDRD = (DDRD&~0x03) | 0x02;
UBRR0H = baud>>8;
UBRR0L = baud;
UCSR0C = BIT(UCSZ00) | BIT(UCSZ01); // 8N1
- UCSR0B = BIT(RXEN0) | BIT(TXEN0);
-}
-
-void serial_set_callback(SerialCallback *cb)
-{
- serial_callback = cb;
- UCSR0B |= BIT(RXCIE0);
+ UCSR0B = BIT(RXEN0) | BIT(TXEN0) | BIT(RXCIE0);
}
void serial_write(uint8_t c)
while(!(UCSR0A&(1<<UDRE0))) ;
UDR0 = c;
}
-
-ISR(USART_RX_vect)
-{
- serial_callback(UDR0);
-}