X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=firmware%2Fserial.c;fp=firmware%2Fserial.c;h=b7219ae337381b724c0bcd0877185bbf2f8dda69;hb=d8a31ed675778c08ca781beb62863c62d6f0bd94;hp=0000000000000000000000000000000000000000;hpb=af6a469f761ceec44e94bea5fe8e5345fd368966;p=model-railway-devices.git diff --git a/firmware/serial.c b/firmware/serial.c new file mode 100644 index 0000000..b7219ae --- /dev/null +++ b/firmware/serial.c @@ -0,0 +1,36 @@ +#include +#include +#include "serial.h" + +#define BIT(n) (1<<(n)) + +static SerialCallback *serial_callback = 0; + +void serial_init(uint16_t baud) +{ + DDRD = (DDRD&~0x03) | 0x02; + PORTD &= ~0x03; + + baud = (F_CPU/16+baud/2)/baud-1; + 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); +} + +void serial_write(uint8_t c) +{ + while(!(UCSR0A&(1<