RoboAide
Project to improve a DIY robotic arm used for mobility assistance
interrupt_pins.h
Go to the documentation of this file.
1 // interrupt pins for known boards
2 
3 // Teensy (and maybe others) define these automatically
4 #if !defined(CORE_NUM_INTERRUPT)
5 
6 // Wiring boards
7 #if defined(WIRING)
8  #define CORE_NUM_INTERRUPT NUM_EXTERNAL_INTERRUPTS
9  #if NUM_EXTERNAL_INTERRUPTS > 0
10  #define CORE_INT0_PIN EI0
11  #endif
12  #if NUM_EXTERNAL_INTERRUPTS > 1
13  #define CORE_INT1_PIN EI1
14  #endif
15  #if NUM_EXTERNAL_INTERRUPTS > 2
16  #define CORE_INT2_PIN EI2
17  #endif
18  #if NUM_EXTERNAL_INTERRUPTS > 3
19  #define CORE_INT3_PIN EI3
20  #endif
21  #if NUM_EXTERNAL_INTERRUPTS > 4
22  #define CORE_INT4_PIN EI4
23  #endif
24  #if NUM_EXTERNAL_INTERRUPTS > 5
25  #define CORE_INT5_PIN EI5
26  #endif
27  #if NUM_EXTERNAL_INTERRUPTS > 6
28  #define CORE_INT6_PIN EI6
29  #endif
30  #if NUM_EXTERNAL_INTERRUPTS > 7
31  #define CORE_INT7_PIN EI7
32  #endif
33 
34 // Arduino Uno, Duemilanove, Diecimila, LilyPad, Mini, Fio, etc...
35 #elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328PB__) ||defined(__AVR_ATmega168__) || defined(__AVR_ATmega8__)
36  #define CORE_NUM_INTERRUPT 2
37  #define CORE_INT0_PIN 2
38  #define CORE_INT1_PIN 3
39 
40 // Arduino Mega
41 #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
42  #define CORE_NUM_INTERRUPT 6
43  #define CORE_INT0_PIN 2
44  #define CORE_INT1_PIN 3
45  #define CORE_INT2_PIN 21
46  #define CORE_INT3_PIN 20
47  #define CORE_INT4_PIN 19
48  #define CORE_INT5_PIN 18
49 
50 // Arduino Nano Every, Uno R2 Wifi
51 #elif defined(__AVR_ATmega4809__)
52  #define CORE_NUM_INTERRUPT 13
53  #define CORE_INT0_PIN 0
54  #define CORE_INT1_PIN 1
55  #define CORE_INT2_PIN 2
56  #define CORE_INT3_PIN 3
57  #define CORE_INT4_PIN 4
58  #define CORE_INT5_PIN 5
59  #define CORE_INT6_PIN 6
60  #define CORE_INT7_PIN 7
61  #define CORE_INT8_PIN 8
62  #define CORE_INT9_PIN 9
63  #define CORE_INT10_PIN 10
64  #define CORE_INT11_PIN 11
65  #define CORE_INT12_PIN 12
66  #define CORE_INT13_PIN 13
67 
68 // Arduino Leonardo (untested)
69 #elif defined(__AVR_ATmega32U4__) && !defined(CORE_TEENSY)
70  #define CORE_NUM_INTERRUPT 5
71  #define CORE_INT0_PIN 3
72  #define CORE_INT1_PIN 2
73  #define CORE_INT2_PIN 0
74  #define CORE_INT3_PIN 1
75  #define CORE_INT4_PIN 7
76 
77 // Sanguino (untested) and ATmega1284P
78 #elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__) || defined(__AVR_ATmega1284P__)
79  #define CORE_NUM_INTERRUPT 3
80  #define CORE_INT0_PIN 10
81  #define CORE_INT1_PIN 11
82  #define CORE_INT2_PIN 2
83 
84 // ATmega32u2 and ATmega32u16 based boards with HoodLoader2
85 #elif defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U2__)
86  #define CORE_NUM_INTERRUPT 8
87  #define CORE_INT0_PIN 8
88  #define CORE_INT1_PIN 17
89  #define CORE_INT2_PIN 13
90  #define CORE_INT3_PIN 14
91  #define CORE_INT4_PIN 15
92  #define CORE_INT5_PIN 16
93  #define CORE_INT6_PIN 19
94  #define CORE_INT7_PIN 20
95 
96 // Chipkit Uno32 - attachInterrupt may not support CHANGE option
97 #elif defined(__PIC32MX__) && defined(_BOARD_UNO_)
98  #define CORE_NUM_INTERRUPT 5
99  #define CORE_INT0_PIN 38
100  #define CORE_INT1_PIN 2
101  #define CORE_INT2_PIN 7
102  #define CORE_INT3_PIN 8
103  #define CORE_INT4_PIN 35
104 
105 // Chipkit Uno32 - attachInterrupt may not support CHANGE option
106 #elif defined(__PIC32MX__) && defined(_BOARD_MEGA_)
107  #define CORE_NUM_INTERRUPT 5
108  #define CORE_INT0_PIN 3
109  #define CORE_INT1_PIN 2
110  #define CORE_INT2_PIN 7
111  #define CORE_INT3_PIN 21
112  #define CORE_INT4_PIN 20
113 
114 // http://hlt.media.mit.edu/?p=1229
115 #elif defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
116  #define CORE_NUM_INTERRUPT 1
117  #define CORE_INT0_PIN 2
118 
119 // ATtiny441 ATtiny841
120 #elif defined(__AVR_ATtiny441__) || defined(__AVR_ATtiny841__)
121  #define CORE_NUM_INTERRUPT 1
122  #define CORE_INT0_PIN 9
123 
124 //https://github.com/SpenceKonde/ATTinyCore/blob/master/avr/extras/ATtiny_x313.md
125 #elif defined(__AVR_ATtinyX313__)
126  #define CORE_NUM_INTERRUPT 2
127  #define CORE_INT0_PIN 4
128  #define CORE_INT1_PIN 5
129 
130 // Attiny167 same core as abobe
131 #elif defined(__AVR_ATtiny167__)
132  #define CORE_NUM_INTERRUPT 2
133  #define CORE_INT0_PIN 14
134  #define CORE_INT1_PIN 3
135 
136 
137 // Arduino Due
138 #elif defined(__SAM3X8E__)
139  #define CORE_NUM_INTERRUPT 54
140  #define CORE_INT0_PIN 0
141  #define CORE_INT1_PIN 1
142  #define CORE_INT2_PIN 2
143  #define CORE_INT3_PIN 3
144  #define CORE_INT4_PIN 4
145  #define CORE_INT5_PIN 5
146  #define CORE_INT6_PIN 6
147  #define CORE_INT7_PIN 7
148  #define CORE_INT8_PIN 8
149  #define CORE_INT9_PIN 9
150  #define CORE_INT10_PIN 10
151  #define CORE_INT11_PIN 11
152  #define CORE_INT12_PIN 12
153  #define CORE_INT13_PIN 13
154  #define CORE_INT14_PIN 14
155  #define CORE_INT15_PIN 15
156  #define CORE_INT16_PIN 16
157  #define CORE_INT17_PIN 17
158  #define CORE_INT18_PIN 18
159  #define CORE_INT19_PIN 19
160  #define CORE_INT20_PIN 20
161  #define CORE_INT21_PIN 21
162  #define CORE_INT22_PIN 22
163  #define CORE_INT23_PIN 23
164  #define CORE_INT24_PIN 24
165  #define CORE_INT25_PIN 25
166  #define CORE_INT26_PIN 26
167  #define CORE_INT27_PIN 27
168  #define CORE_INT28_PIN 28
169  #define CORE_INT29_PIN 29
170  #define CORE_INT30_PIN 30
171  #define CORE_INT31_PIN 31
172  #define CORE_INT32_PIN 32
173  #define CORE_INT33_PIN 33
174  #define CORE_INT34_PIN 34
175  #define CORE_INT35_PIN 35
176  #define CORE_INT36_PIN 36
177  #define CORE_INT37_PIN 37
178  #define CORE_INT38_PIN 38
179  #define CORE_INT39_PIN 39
180  #define CORE_INT40_PIN 40
181  #define CORE_INT41_PIN 41
182  #define CORE_INT42_PIN 42
183  #define CORE_INT43_PIN 43
184  #define CORE_INT44_PIN 44
185  #define CORE_INT45_PIN 45
186  #define CORE_INT46_PIN 46
187  #define CORE_INT47_PIN 47
188  #define CORE_INT48_PIN 48
189  #define CORE_INT49_PIN 49
190  #define CORE_INT50_PIN 50
191  #define CORE_INT51_PIN 51
192  #define CORE_INT52_PIN 52
193  #define CORE_INT53_PIN 53
194 
195 // ESP8266 (https://github.com/esp8266/Arduino/)
196 #elif defined(ESP8266)
197  #define CORE_NUM_INTERRUPT EXTERNAL_NUM_INTERRUPTS
198  #define CORE_INT0_PIN 0
199  #define CORE_INT1_PIN 1
200  #define CORE_INT2_PIN 2
201  #define CORE_INT3_PIN 3
202  #define CORE_INT4_PIN 4
203  #define CORE_INT5_PIN 5
204  // GPIO6-GPIO11 are typically used to interface with the flash memory IC on
205  // most esp8266 modules, so we should avoid adding interrupts to these pins.
206  #define CORE_INT12_PIN 12
207  #define CORE_INT13_PIN 13
208  #define CORE_INT14_PIN 14
209  #define CORE_INT15_PIN 15
210 
211 // ESP32 (https://github.com/espressif/arduino-esp32)
212 #elif defined(ESP32)
213 
214  #define CORE_NUM_INTERRUPT 40
215  #define CORE_INT0_PIN 0
216  #define CORE_INT1_PIN 1
217  #define CORE_INT2_PIN 2
218  #define CORE_INT3_PIN 3
219  #define CORE_INT4_PIN 4
220  #define CORE_INT5_PIN 5
221  // GPIO6-GPIO11 are typically used to interface with the flash memory IC on
222  // esp32, so we should avoid adding interrupts to these pins.
223  #define CORE_INT12_PIN 12
224  #define CORE_INT13_PIN 13
225  #define CORE_INT14_PIN 14
226  #define CORE_INT15_PIN 15
227  #define CORE_INT16_PIN 16
228  #define CORE_INT17_PIN 17
229  #define CORE_INT18_PIN 18
230  #define CORE_INT19_PIN 19
231  #define CORE_INT21_PIN 21
232  #define CORE_INT22_PIN 22
233  #define CORE_INT23_PIN 23
234  #define CORE_INT25_PIN 25
235  #define CORE_INT26_PIN 26
236  #define CORE_INT27_PIN 27
237  #define CORE_INT32_PIN 32
238  #define CORE_INT33_PIN 33
239  #define CORE_INT34_PIN 34
240  #define CORE_INT35_PIN 35
241  #define CORE_INT36_PIN 36
242  #define CORE_INT39_PIN 39
243 
244 
245 // Arduino Zero - TODO: interrupts do not seem to work
246 // please help, contribute a fix!
247 #elif defined(__SAMD21G18A__) || defined(__SAMD51__)
248  #define CORE_NUM_INTERRUPT 20
249  #define CORE_INT0_PIN 0
250  #define CORE_INT1_PIN 1
251  #define CORE_INT2_PIN 2
252  #define CORE_INT3_PIN 3
253  #define CORE_INT5_PIN 5
254  #define CORE_INT6_PIN 6
255  #define CORE_INT7_PIN 7
256  #define CORE_INT8_PIN 8
257  #define CORE_INT9_PIN 9
258  #define CORE_INT10_PIN 10
259  #define CORE_INT11_PIN 11
260  #define CORE_INT12_PIN 12
261  #define CORE_INT13_PIN 13
262  #define CORE_INT14_PIN 14
263  #define CORE_INT15_PIN 15
264  #define CORE_INT16_PIN 16
265  #define CORE_INT17_PIN 17
266  #define CORE_INT18_PIN 18
267  #define CORE_INT19_PIN 19
268 
269 // Arduino 101
270 #elif defined(__arc__)
271  #define CORE_NUM_INTERRUPT 14
272  #define CORE_INT2_PIN 2
273  #define CORE_INT5_PIN 5
274  #define CORE_INT7_PIN 7
275  #define CORE_INT8_PIN 8
276  #define CORE_INT10_PIN 10
277  #define CORE_INT11_PIN 11
278  #define CORE_INT12_PIN 12
279  #define CORE_INT13_PIN 13
280 
281 //OpenCR
282 #elif defined(__OPENCR__) || defined(__OPENCM904__)
283  #define CORE_NUM_INTERRUPT 9
284  #define CORE_INT0_PIN 0
285  #define CORE_INT1_PIN 1
286  #define CORE_INT2_PIN 2
287  #define CORE_INT3_PIN 3
288  #define CORE_INT4_PIN 4
289  #define CORE_INT5_PIN 5
290  #define CORE_INT6_PIN 6
291  #define CORE_INT7_PIN 7
292  #define CORE_INT8_PIN 8
293 
294 #endif
295 #endif
296 
297 #if !defined(CORE_NUM_INTERRUPT)
298 #error "Interrupts are unknown for this board, please add to this code"
299 #endif
300 #if CORE_NUM_INTERRUPT <= 0
301 #error "Encoder requires interrupt pins, but this board does not have any :("
302 #error "You could try defining ENCODER_DO_NOT_USE_INTERRUPTS as a kludge."
303 #endif
304