|
@@ -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
|