2 #include <avr/interrupt.h>
5 #define BIT(n) (1<<(n))
7 static SerialCallback *serial_callback = 0;
9 void serial_init(uint16_t baud)
11 DDRD = (DDRD&~0x03) | 0x02;
14 baud = (F_CPU/16+baud/2)/baud-1;
17 UCSR0C = BIT(UCSZ00) | BIT(UCSZ01); // 8N1
18 UCSR0B = BIT(RXEN0) | BIT(TXEN0);
21 void serial_set_callback(SerialCallback *cb)
24 UCSR0B |= BIT(RXCIE0);
27 void serial_write(uint8_t c)
29 while(!(UCSR0A&(1<<UDRE0))) ;
35 serial_callback(UDR0);