summaryrefslogtreecommitdiff
path: root/tmk_core
diff options
context:
space:
mode:
Diffstat (limited to 'tmk_core')
-rw-r--r--tmk_core/protocol/serial.h2
-rw-r--r--tmk_core/protocol/serial_uart.c25
2 files changed, 26 insertions, 1 deletions
diff --git a/tmk_core/protocol/serial.h b/tmk_core/protocol/serial.h
index b70d117d7c..0204b84a92 100644
--- a/tmk_core/protocol/serial.h
+++ b/tmk_core/protocol/serial.h
@@ -37,6 +37,8 @@ POSSIBILITY OF SUCH DAMAGE.
#pragma once
+#define SERIAL_UART_DATA UDR1
+
/* host role */
void serial_init(void);
uint8_t serial_recv(void);
diff --git a/tmk_core/protocol/serial_uart.c b/tmk_core/protocol/serial_uart.c
index a15124193a..4fe059e7d9 100644
--- a/tmk_core/protocol/serial_uart.c
+++ b/tmk_core/protocol/serial_uart.c
@@ -40,6 +40,22 @@ POSSIBILITY OF SUCH DAMAGE.
#include <avr/interrupt.h>
#include "serial.h"
+#ifndef SERIAL_UART_BAUD
+# define SERIAL_UART_BAUD 9600
+#endif
+
+#define SERIAL_UART_UBRR (F_CPU / (16UL * SERIAL_UART_BAUD) - 1)
+#define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1))
+#define SERIAL_UART_RXD_VECT USART1_RX_vect
+
+#ifndef SERIAL_UART_INIT_CUSTOM
+# define SERIAL_UART_INIT_CUSTOM \
+ /* enable TX */ \
+ UCSR1B = _BV(TXEN1); \
+ /* 8-bit data */ \
+ UCSR1C = _BV(UCSZ11) | _BV(UCSZ10);
+#endif
+
#if defined(SERIAL_UART_RTS_LO) && defined(SERIAL_UART_RTS_HI)
// Buffer state
// Empty: RBUF_SPACE == RBUF_SIZE(head==tail)
@@ -61,7 +77,14 @@ POSSIBILITY OF SUCH DAMAGE.
# define rbuf_check_rts_hi()
#endif
-void serial_init(void) { SERIAL_UART_INIT(); }
+void serial_init(void) {
+ do {
+ // Set baud rate
+ UBRR1L = SERIAL_UART_UBRR;
+ UBRR1L = SERIAL_UART_UBRR >> 8;
+ SERIAL_UART_INIT_CUSTOM;
+ } while (0);
+}
// RX ring buffer
#define RBUF_SIZE 256