diff options
Diffstat (limited to 'quantum/split_common')
-rw-r--r-- | quantum/split_common/serial.c | 53 | ||||
-rw-r--r-- | quantum/split_common/serial.h | 23 | ||||
-rw-r--r-- | quantum/split_common/serial_backward_compatibility.h | 11 | ||||
-rw-r--r-- | quantum/split_common/split_util.h | 3 |
4 files changed, 77 insertions, 13 deletions
diff --git a/quantum/split_common/serial.c b/quantum/split_common/serial.c index 74bcbb6bf6..f34f824d7d 100644 --- a/quantum/split_common/serial.c +++ b/quantum/split_common/serial.c @@ -14,6 +14,59 @@ #ifndef USE_I2C +#ifndef SOFT_SERIAL_PIN + #error quantum/split_common/serial.c need SOFT_SERIAL_PIN define +#endif + +#ifdef __AVR_ATmega32U4__ + // if using ATmega32U4 I2C, can not use PD0 and PD1 in soft serial. + #ifdef USE_I2C + #if SOFT_SERIAL_PIN == D0 || SOFT_SERIAL_PIN == D1 + #error Using ATmega32U4 I2C, so can not use PD0, PD1 + #endif + #endif + + #if SOFT_SERIAL_PIN >= D0 && SOFT_SERIAL_PIN <= D3 + #define SERIAL_PIN_DDR DDRD + #define SERIAL_PIN_PORT PORTD + #define SERIAL_PIN_INPUT PIND + #if SOFT_SERIAL_PIN == D0 + #define SERIAL_PIN_MASK _BV(PD0) + #define EIMSK_BIT _BV(INT0) + #define EICRx_BIT (~(_BV(ISC00) | _BV(ISC01))) + #define SERIAL_PIN_INTERRUPT INT0_vect + #elif SOFT_SERIAL_PIN == D1 + #define SERIAL_PIN_MASK _BV(PD1) + #define EIMSK_BIT _BV(INT1) + #define EICRx_BIT (~(_BV(ISC10) | _BV(ISC11))) + #define SERIAL_PIN_INTERRUPT INT1_vect + #elif SOFT_SERIAL_PIN == D2 + #define SERIAL_PIN_MASK _BV(PD2) + #define EIMSK_BIT _BV(INT2) + #define EICRx_BIT (~(_BV(ISC20) | _BV(ISC21))) + #define SERIAL_PIN_INTERRUPT INT2_vect + #elif SOFT_SERIAL_PIN == D3 + #define SERIAL_PIN_MASK _BV(PD3) + #define EIMSK_BIT _BV(INT3) + #define EICRx_BIT (~(_BV(ISC30) | _BV(ISC31))) + #define SERIAL_PIN_INTERRUPT INT3_vect + #endif + #elif SOFT_SERIAL_PIN == E6 + #define SERIAL_PIN_DDR DDRE + #define SERIAL_PIN_PORT PORTE + #define SERIAL_PIN_INPUT PINE + #define SERIAL_PIN_MASK _BV(PE6) + #define EIMSK_BIT _BV(INT6) + #define EICRx_BIT (~(_BV(ISC60) | _BV(ISC61))) + #define SERIAL_PIN_INTERRUPT INT6_vect + #else + #error invalid SOFT_SERIAL_PIN value + #endif + +#else + #error serial.c now support ATmega32U4 only +#endif + // Serial pulse period in microseconds. Its probably a bad idea to lower this // value. #define SERIAL_DELAY 24 diff --git a/quantum/split_common/serial.h b/quantum/split_common/serial.h index e566eb8a06..0b99f352d0 100644 --- a/quantum/split_common/serial.h +++ b/quantum/split_common/serial.h @@ -1,21 +1,18 @@ #ifndef MY_SERIAL_H #define MY_SERIAL_H -#include "config.h" #include <stdbool.h> -/* TODO: some defines for interrupt setup */ -#define SERIAL_PIN_DDR DDRD -#define SERIAL_PIN_PORT PORTD -#define SERIAL_PIN_INPUT PIND -#define SERIAL_PIN_MASK _BV(PD0) -#define SERIAL_PIN_INTERRUPT INT0_vect - -#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 -#define SERIAL_MASTER_BUFFER_LENGTH 1 - -// Address location defines -#define SERIAL_BACKLIT_START 0x00 +// ///////////////////////////////////////////////////////////////// +// Need Soft Serial defines in config.h +// ///////////////////////////////////////////////////////////////// +// ex. +// /* Configuration of lower interface with the lower layer(hardware) of serial.c */ +// #define SOFT_SERIAL_PIN ?? // ?? = D0,D1,D2,D3,E6 +// +// /* Configuration of upper interface with the upper layer of serial.c */ +// #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 +// #define SERIAL_MASTER_BUFFER_LENGTH 1 // Buffers for master - slave communication extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH]; diff --git a/quantum/split_common/serial_backward_compatibility.h b/quantum/split_common/serial_backward_compatibility.h new file mode 100644 index 0000000000..216b6c41ff --- /dev/null +++ b/quantum/split_common/serial_backward_compatibility.h @@ -0,0 +1,11 @@ +/* serial.h backward compatibility */ + +// #ifndef SOFT_SERIAL_PIN +// #define SOFT_SERIAL_PIN D0 +// #endif + +#ifndef SERIAL_SLAVE_BUFFER_LENGTH + #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 + #define SERIAL_MASTER_BUFFER_LENGTH 1 +#endif + diff --git a/quantum/split_common/split_util.h b/quantum/split_common/split_util.h index d6cf3e72a9..45e8db0f2f 100644 --- a/quantum/split_common/split_util.h +++ b/quantum/split_common/split_util.h @@ -7,6 +7,9 @@ #include <stdlib.h> #include "eeconfig.h" +// backlight level store index in serial_master_buffer[] for slave to read +#define SERIAL_BACKLIT_START 0x00 + #define SLAVE_I2C_ADDRESS 0x32 extern volatile bool isLeftHand; |