diff options
Diffstat (limited to 'tmk_core')
| -rw-r--r-- | tmk_core/protocol/serial.h | 2 | ||||
| -rw-r--r-- | tmk_core/protocol/serial_uart.c | 25 | 
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 | 
