aboutsummaryrefslogtreecommitdiff
path: root/quantum/split_common/serial.c
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/split_common/serial.c')
-rw-r--r--quantum/split_common/serial.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/quantum/split_common/serial.c b/quantum/split_common/serial.c
index 74bcbb6bf..f34f824d7 100644
--- a/quantum/split_common/serial.c
+++ b/quantum/split_common/serial.c
@@ -14,6 +14,59 @@
14 14
15#ifndef USE_I2C 15#ifndef USE_I2C
16 16
17#ifndef SOFT_SERIAL_PIN
18 #error quantum/split_common/serial.c need SOFT_SERIAL_PIN define
19#endif
20
21#ifdef __AVR_ATmega32U4__
22 // if using ATmega32U4 I2C, can not use PD0 and PD1 in soft serial.
23 #ifdef USE_I2C
24 #if SOFT_SERIAL_PIN == D0 || SOFT_SERIAL_PIN == D1
25 #error Using ATmega32U4 I2C, so can not use PD0, PD1
26 #endif
27 #endif
28
29 #if SOFT_SERIAL_PIN >= D0 && SOFT_SERIAL_PIN <= D3
30 #define SERIAL_PIN_DDR DDRD
31 #define SERIAL_PIN_PORT PORTD
32 #define SERIAL_PIN_INPUT PIND
33 #if SOFT_SERIAL_PIN == D0
34 #define SERIAL_PIN_MASK _BV(PD0)
35 #define EIMSK_BIT _BV(INT0)
36 #define EICRx_BIT (~(_BV(ISC00) | _BV(ISC01)))
37 #define SERIAL_PIN_INTERRUPT INT0_vect
38 #elif SOFT_SERIAL_PIN == D1
39 #define SERIAL_PIN_MASK _BV(PD1)
40 #define EIMSK_BIT _BV(INT1)
41 #define EICRx_BIT (~(_BV(ISC10) | _BV(ISC11)))
42 #define SERIAL_PIN_INTERRUPT INT1_vect
43 #elif SOFT_SERIAL_PIN == D2
44 #define SERIAL_PIN_MASK _BV(PD2)
45 #define EIMSK_BIT _BV(INT2)
46 #define EICRx_BIT (~(_BV(ISC20) | _BV(ISC21)))
47 #define SERIAL_PIN_INTERRUPT INT2_vect
48 #elif SOFT_SERIAL_PIN == D3
49 #define SERIAL_PIN_MASK _BV(PD3)
50 #define EIMSK_BIT _BV(INT3)
51 #define EICRx_BIT (~(_BV(ISC30) | _BV(ISC31)))
52 #define SERIAL_PIN_INTERRUPT INT3_vect
53 #endif
54 #elif SOFT_SERIAL_PIN == E6
55 #define SERIAL_PIN_DDR DDRE
56 #define SERIAL_PIN_PORT PORTE
57 #define SERIAL_PIN_INPUT PINE
58 #define SERIAL_PIN_MASK _BV(PE6)
59 #define EIMSK_BIT _BV(INT6)
60 #define EICRx_BIT (~(_BV(ISC60) | _BV(ISC61)))
61 #define SERIAL_PIN_INTERRUPT INT6_vect
62 #else
63 #error invalid SOFT_SERIAL_PIN value
64 #endif
65
66#else
67 #error serial.c now support ATmega32U4 only
68#endif
69
17// Serial pulse period in microseconds. Its probably a bad idea to lower this 70// Serial pulse period in microseconds. Its probably a bad idea to lower this
18// value. 71// value.
19#define SERIAL_DELAY 24 72#define SERIAL_DELAY 24