1
+ /*
2
+ pins_arduino.h - Pin definition functions for Arduino
3
+ Part of Arduino - http://www.arduino.cc/
4
+
5
+ Copyright (c) 2007 David A. Mellis
6
+
7
+ This library is free software; you can redistribute it and/or
8
+ modify it under the terms of the GNU Lesser General Public
9
+ License as published by the Free Software Foundation; either
10
+ version 2.1 of the License, or (at your option) any later version.
11
+
12
+ This library is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ Lesser General Public License for more details.
16
+
17
+ You should have received a copy of the GNU Lesser General
18
+ Public License along with this library; if not, write to the
19
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330,
20
+ Boston, MA 02111-1307 USA
21
+
22
+ $Id: wiring.h 249 2007-02-03 16:52:51Z mellis $
23
+ */
24
+
25
+ #ifndef Pins_Arduino_h
26
+ #define Pins_Arduino_h
27
+
28
+ #include <avr/pgmspace.h>
29
+
30
+ #define NUM_DIGITAL_PINS 70
31
+ #define NUM_ANALOG_INPUTS 16
32
+ #define analogInputToDigitalPin (p ) ((p < 16) ? (p) + 54 : -1)
33
+ #define digitalPinHasPWM (p ) (((p) >= 2 && (p) <= 13) || ((p) >= 44 && (p)<= 46))
34
+
35
+ const static uint8_t SS = 53 ;
36
+ const static uint8_t MOSI = 51 ;
37
+ const static uint8_t MISO = 50 ;
38
+ const static uint8_t SCK = 52 ;
39
+
40
+ const static uint8_t SDA = 20 ;
41
+ const static uint8_t SCL = 21 ;
42
+ const static uint8_t LED = 13 ;
43
+
44
+ const static uint8_t A0 = 54 ;
45
+ const static uint8_t A1 = 55 ;
46
+ const static uint8_t A2 = 56 ;
47
+ const static uint8_t A3 = 57 ;
48
+ const static uint8_t A4 = 58 ;
49
+ const static uint8_t A5 = 59 ;
50
+ const static uint8_t A6 = 60 ;
51
+ const static uint8_t A7 = 61 ;
52
+ const static uint8_t A8 = 62 ;
53
+ const static uint8_t A9 = 63 ;
54
+ const static uint8_t A10 = 64 ;
55
+ const static uint8_t A11 = 65 ;
56
+ const static uint8_t A12 = 66 ;
57
+ const static uint8_t A13 = 67 ;
58
+ const static uint8_t A14 = 68 ;
59
+ const static uint8_t A15 = 69 ;
60
+
61
+ // A majority of the pins are NOT PCINTs, SO BE WARNED (i.e. you cannot use them as receive pins)
62
+ // Only pins available for RECEIVE (TRANSMIT can be on any pin):
63
+ // (I've deliberately left out pin mapping to the Hardware USARTs - seems senseless to me)
64
+ // Pins: 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69
65
+
66
+ #define digitalPinToPCICR (p ) ( (((p) >= 10) && ((p) <= 13)) || \
67
+ (((p) >= 50) && ((p) <= 53)) || \
68
+ (((p) >= 62) && ((p) <= 69)) ? (&PCICR) : ((uint8_t *)0) )
69
+
70
+ #define digitalPinToPCICRbit (p ) ( (((p) >= 10) && ((p) <= 13)) || (((p) >= 50) && ((p) <= 53)) ? 0 : \
71
+ ( (((p) >= 62) && ((p) <= 69)) ? 2 : \
72
+ 0 ) )
73
+
74
+ #define digitalPinToPCMSK (p ) ( (((p) >= 10) && ((p) <= 13)) || (((p) >= 50) && ((p) <= 53)) ? (&PCMSK0) : \
75
+ ( (((p) >= 62) && ((p) <= 69)) ? (&PCMSK2) : \
76
+ ((uint8_t *)0) ) )
77
+
78
+ #define digitalPinToPCMSKbit (p ) ( (((p) >= 10) && ((p) <= 13)) ? ((p) - 6) : \
79
+ ( ((p) == 50) ? 3 : \
80
+ ( ((p) == 51) ? 2 : \
81
+ ( ((p) == 52) ? 1 : \
82
+ ( ((p) == 53) ? 0 : \
83
+ ( (((p) >= 62) && ((p) <= 69)) ? ((p) - 62) : \
84
+ 0 ) ) ) ) ) )
85
+
86
+ #ifdef ARDUINO_MAIN
87
+
88
+ const uint16_t PROGMEM port_to_mode_PGM [] = {
89
+ NOT_A_PORT ,
90
+ (uint16_t ) & DDRA ,
91
+ (uint16_t ) & DDRB ,
92
+ (uint16_t ) & DDRC ,
93
+ (uint16_t ) & DDRD ,
94
+ (uint16_t ) & DDRE ,
95
+ (uint16_t ) & DDRF ,
96
+ (uint16_t ) & DDRG ,
97
+ (uint16_t ) & DDRH ,
98
+ NOT_A_PORT ,
99
+ (uint16_t ) & DDRJ ,
100
+ (uint16_t ) & DDRK ,
101
+ (uint16_t ) & DDRL ,
102
+ };
103
+
104
+ const uint16_t PROGMEM port_to_output_PGM [] = {
105
+ NOT_A_PORT ,
106
+ (uint16_t ) & PORTA ,
107
+ (uint16_t ) & PORTB ,
108
+ (uint16_t ) & PORTC ,
109
+ (uint16_t ) & PORTD ,
110
+ (uint16_t ) & PORTE ,
111
+ (uint16_t ) & PORTF ,
112
+ (uint16_t ) & PORTG ,
113
+ (uint16_t ) & PORTH ,
114
+ NOT_A_PORT ,
115
+ (uint16_t ) & PORTJ ,
116
+ (uint16_t ) & PORTK ,
117
+ (uint16_t ) & PORTL ,
118
+ };
119
+
120
+ const uint16_t PROGMEM port_to_input_PGM [] = {
121
+ NOT_A_PIN ,
122
+ (uint16_t ) & PINA ,
123
+ (uint16_t ) & PINB ,
124
+ (uint16_t ) & PINC ,
125
+ (uint16_t ) & PIND ,
126
+ (uint16_t ) & PINE ,
127
+ (uint16_t ) & PINF ,
128
+ (uint16_t ) & PING ,
129
+ (uint16_t ) & PINH ,
130
+ NOT_A_PIN ,
131
+ (uint16_t ) & PINJ ,
132
+ (uint16_t ) & PINK ,
133
+ (uint16_t ) & PINL ,
134
+ };
135
+
136
+ const uint8_t PROGMEM digital_pin_to_port_PGM [] = {
137
+ // PORTLIST
138
+ // -------------------------------------------
139
+ PE , // PE 0 ** 0 ** USART0_RX
140
+ PE , // PE 1 ** 1 ** USART0_TX
141
+ PE , // PE 4 ** 2 ** PWM2
142
+ PE , // PE 5 ** 3 ** PWM3
143
+ PG , // PG 5 ** 4 ** PWM4
144
+ PE , // PE 3 ** 5 ** PWM5
145
+ PH , // PH 3 ** 6 ** PWM6
146
+ PH , // PH 4 ** 7 ** PWM7
147
+ PH , // PH 5 ** 8 ** PWM8
148
+ PH , // PH 6 ** 9 ** PWM9
149
+ PB , // PB 4 ** 10 ** PWM10
150
+ PB , // PB 5 ** 11 ** PWM11
151
+ PB , // PB 6 ** 12 ** PWM12
152
+ PB , // PB 7 ** 13 ** PWM13
153
+ PJ , // PJ 1 ** 14 ** USART3_TX
154
+ PJ , // PJ 0 ** 15 ** USART3_RX
155
+ PH , // PH 1 ** 16 ** USART2_TX
156
+ PH , // PH 0 ** 17 ** USART2_RX
157
+ PD , // PD 3 ** 18 ** USART1_TX
158
+ PD , // PD 2 ** 19 ** USART1_RX
159
+ PD , // PD 1 ** 20 ** I2C_SDA
160
+ PD , // PD 0 ** 21 ** I2C_SCL
161
+ PA , // PA 0 ** 22 ** D22
162
+ PA , // PA 1 ** 23 ** D23
163
+ PA , // PA 2 ** 24 ** D24
164
+ PA , // PA 3 ** 25 ** D25
165
+ PA , // PA 4 ** 26 ** D26
166
+ PA , // PA 5 ** 27 ** D27
167
+ PA , // PA 6 ** 28 ** D28
168
+ PA , // PA 7 ** 29 ** D29
169
+ PC , // PC 7 ** 30 ** D30
170
+ PC , // PC 6 ** 31 ** D31
171
+ PC , // PC 5 ** 32 ** D32
172
+ PC , // PC 4 ** 33 ** D33
173
+ PC , // PC 3 ** 34 ** D34
174
+ PC , // PC 2 ** 35 ** D35
175
+ PC , // PC 1 ** 36 ** D36
176
+ PC , // PC 0 ** 37 ** D37
177
+ PD , // PD 7 ** 38 ** D38
178
+ PG , // PG 2 ** 39 ** D39
179
+ PG , // PG 1 ** 40 ** D40
180
+ PG , // PG 0 ** 41 ** D41
181
+ PL , // PL 7 ** 42 ** D42
182
+ PL , // PL 6 ** 43 ** D43
183
+ PL , // PL 5 ** 44 ** D44
184
+ PL , // PL 4 ** 45 ** D45
185
+ PL , // PL 3 ** 46 ** D46
186
+ PL , // PL 2 ** 47 ** D47
187
+ PL , // PL 1 ** 48 ** D48
188
+ PL , // PL 0 ** 49 ** D49
189
+ PB , // PB 3 ** 50 ** SPI_MISO
190
+ PB , // PB 2 ** 51 ** SPI_MOSI
191
+ PB , // PB 1 ** 52 ** SPI_SCK
192
+ PB , // PB 0 ** 53 ** SPI_SS
193
+ PF , // PF 0 ** 54 ** A0
194
+ PF , // PF 1 ** 55 ** A1
195
+ PF , // PF 2 ** 56 ** A2
196
+ PF , // PF 3 ** 57 ** A3
197
+ PF , // PF 4 ** 58 ** A4
198
+ PF , // PF 5 ** 59 ** A5
199
+ PF , // PF 6 ** 60 ** A6
200
+ PF , // PF 7 ** 61 ** A7
201
+ PK , // PK 0 ** 62 ** A8
202
+ PK , // PK 1 ** 63 ** A9
203
+ PK , // PK 2 ** 64 ** A10
204
+ PK , // PK 3 ** 65 ** A11
205
+ PK , // PK 4 ** 66 ** A12
206
+ PK , // PK 5 ** 67 ** A13
207
+ PK , // PK 6 ** 68 ** A14
208
+ PK , // PK 7 ** 69 ** A15
209
+ };
210
+
211
+ const uint8_t PROGMEM digital_pin_to_bit_mask_PGM [] = {
212
+ // PIN IN PORT
213
+ // -------------------------------------------
214
+ _BV ( 0 ) , // PE 0 ** 0 ** USART0_RX
215
+ _BV ( 1 ) , // PE 1 ** 1 ** USART0_TX
216
+ _BV ( 4 ) , // PE 4 ** 2 ** PWM2
217
+ _BV ( 5 ) , // PE 5 ** 3 ** PWM3
218
+ _BV ( 5 ) , // PG 5 ** 4 ** PWM4
219
+ _BV ( 3 ) , // PE 3 ** 5 ** PWM5
220
+ _BV ( 3 ) , // PH 3 ** 6 ** PWM6
221
+ _BV ( 4 ) , // PH 4 ** 7 ** PWM7
222
+ _BV ( 5 ) , // PH 5 ** 8 ** PWM8
223
+ _BV ( 6 ) , // PH 6 ** 9 ** PWM9
224
+ _BV ( 4 ) , // PB 4 ** 10 ** PWM10
225
+ _BV ( 5 ) , // PB 5 ** 11 ** PWM11
226
+ _BV ( 6 ) , // PB 6 ** 12 ** PWM12
227
+ _BV ( 7 ) , // PB 7 ** 13 ** PWM13
228
+ _BV ( 1 ) , // PJ 1 ** 14 ** USART3_TX
229
+ _BV ( 0 ) , // PJ 0 ** 15 ** USART3_RX
230
+ _BV ( 1 ) , // PH 1 ** 16 ** USART2_TX
231
+ _BV ( 0 ) , // PH 0 ** 17 ** USART2_RX
232
+ _BV ( 3 ) , // PD 3 ** 18 ** USART1_TX
233
+ _BV ( 2 ) , // PD 2 ** 19 ** USART1_RX
234
+ _BV ( 1 ) , // PD 1 ** 20 ** I2C_SDA
235
+ _BV ( 0 ) , // PD 0 ** 21 ** I2C_SCL
236
+ _BV ( 0 ) , // PA 0 ** 22 ** D22
237
+ _BV ( 1 ) , // PA 1 ** 23 ** D23
238
+ _BV ( 2 ) , // PA 2 ** 24 ** D24
239
+ _BV ( 3 ) , // PA 3 ** 25 ** D25
240
+ _BV ( 4 ) , // PA 4 ** 26 ** D26
241
+ _BV ( 5 ) , // PA 5 ** 27 ** D27
242
+ _BV ( 6 ) , // PA 6 ** 28 ** D28
243
+ _BV ( 7 ) , // PA 7 ** 29 ** D29
244
+ _BV ( 7 ) , // PC 7 ** 30 ** D30
245
+ _BV ( 6 ) , // PC 6 ** 31 ** D31
246
+ _BV ( 5 ) , // PC 5 ** 32 ** D32
247
+ _BV ( 4 ) , // PC 4 ** 33 ** D33
248
+ _BV ( 3 ) , // PC 3 ** 34 ** D34
249
+ _BV ( 2 ) , // PC 2 ** 35 ** D35
250
+ _BV ( 1 ) , // PC 1 ** 36 ** D36
251
+ _BV ( 0 ) , // PC 0 ** 37 ** D37
252
+ _BV ( 7 ) , // PD 7 ** 38 ** D38
253
+ _BV ( 2 ) , // PG 2 ** 39 ** D39
254
+ _BV ( 1 ) , // PG 1 ** 40 ** D40
255
+ _BV ( 0 ) , // PG 0 ** 41 ** D41
256
+ _BV ( 7 ) , // PL 7 ** 42 ** D42
257
+ _BV ( 6 ) , // PL 6 ** 43 ** D43
258
+ _BV ( 5 ) , // PL 5 ** 44 ** D44
259
+ _BV ( 4 ) , // PL 4 ** 45 ** D45
260
+ _BV ( 3 ) , // PL 3 ** 46 ** D46
261
+ _BV ( 2 ) , // PL 2 ** 47 ** D47
262
+ _BV ( 1 ) , // PL 1 ** 48 ** D48
263
+ _BV ( 0 ) , // PL 0 ** 49 ** D49
264
+ _BV ( 3 ) , // PB 3 ** 50 ** SPI_MISO
265
+ _BV ( 2 ) , // PB 2 ** 51 ** SPI_MOSI
266
+ _BV ( 1 ) , // PB 1 ** 52 ** SPI_SCK
267
+ _BV ( 0 ) , // PB 0 ** 53 ** SPI_SS
268
+ _BV ( 0 ) , // PF 0 ** 54 ** A0
269
+ _BV ( 1 ) , // PF 1 ** 55 ** A1
270
+ _BV ( 2 ) , // PF 2 ** 56 ** A2
271
+ _BV ( 3 ) , // PF 3 ** 57 ** A3
272
+ _BV ( 4 ) , // PF 4 ** 58 ** A4
273
+ _BV ( 5 ) , // PF 5 ** 59 ** A5
274
+ _BV ( 6 ) , // PF 6 ** 60 ** A6
275
+ _BV ( 7 ) , // PF 7 ** 61 ** A7
276
+ _BV ( 0 ) , // PK 0 ** 62 ** A8
277
+ _BV ( 1 ) , // PK 1 ** 63 ** A9
278
+ _BV ( 2 ) , // PK 2 ** 64 ** A10
279
+ _BV ( 3 ) , // PK 3 ** 65 ** A11
280
+ _BV ( 4 ) , // PK 4 ** 66 ** A12
281
+ _BV ( 5 ) , // PK 5 ** 67 ** A13
282
+ _BV ( 6 ) , // PK 6 ** 68 ** A14
283
+ _BV ( 7 ) , // PK 7 ** 69 ** A15
284
+ };
285
+
286
+ const uint8_t PROGMEM digital_pin_to_timer_PGM [] = {
287
+ // TIMERS
288
+ // -------------------------------------------
289
+ NOT_ON_TIMER , // PE 0 ** 0 ** USART0_RX
290
+ NOT_ON_TIMER , // PE 1 ** 1 ** USART0_TX
291
+ TIMER3B , // PE 4 ** 2 ** PWM2
292
+ TIMER3C , // PE 5 ** 3 ** PWM3
293
+ TIMER0B , // PG 5 ** 4 ** PWM4
294
+ TIMER3A , // PE 3 ** 5 ** PWM5
295
+ TIMER4A , // PH 3 ** 6 ** PWM6
296
+ TIMER4B , // PH 4 ** 7 ** PWM7
297
+ TIMER4C , // PH 5 ** 8 ** PWM8
298
+ TIMER2B , // PH 6 ** 9 ** PWM9
299
+ TIMER2A , // PB 4 ** 10 ** PWM10
300
+ TIMER1A , // PB 5 ** 11 ** PWM11
301
+ TIMER1B , // PB 6 ** 12 ** PWM12
302
+ TIMER0A , // PB 7 ** 13 ** PWM13
303
+ NOT_ON_TIMER , // PJ 1 ** 14 ** USART3_TX
304
+ NOT_ON_TIMER , // PJ 0 ** 15 ** USART3_RX
305
+ NOT_ON_TIMER , // PH 1 ** 16 ** USART2_TX
306
+ NOT_ON_TIMER , // PH 0 ** 17 ** USART2_RX
307
+ NOT_ON_TIMER , // PD 3 ** 18 ** USART1_TX
308
+ NOT_ON_TIMER , // PD 2 ** 19 ** USART1_RX
309
+ NOT_ON_TIMER , // PD 1 ** 20 ** I2C_SDA
310
+ NOT_ON_TIMER , // PD 0 ** 21 ** I2C_SCL
311
+ NOT_ON_TIMER , // PA 0 ** 22 ** D22
312
+ NOT_ON_TIMER , // PA 1 ** 23 ** D23
313
+ NOT_ON_TIMER , // PA 2 ** 24 ** D24
314
+ NOT_ON_TIMER , // PA 3 ** 25 ** D25
315
+ NOT_ON_TIMER , // PA 4 ** 26 ** D26
316
+ NOT_ON_TIMER , // PA 5 ** 27 ** D27
317
+ NOT_ON_TIMER , // PA 6 ** 28 ** D28
318
+ NOT_ON_TIMER , // PA 7 ** 29 ** D29
319
+ NOT_ON_TIMER , // PC 7 ** 30 ** D30
320
+ NOT_ON_TIMER , // PC 6 ** 31 ** D31
321
+ NOT_ON_TIMER , // PC 5 ** 32 ** D32
322
+ NOT_ON_TIMER , // PC 4 ** 33 ** D33
323
+ NOT_ON_TIMER , // PC 3 ** 34 ** D34
324
+ NOT_ON_TIMER , // PC 2 ** 35 ** D35
325
+ NOT_ON_TIMER , // PC 1 ** 36 ** D36
326
+ NOT_ON_TIMER , // PC 0 ** 37 ** D37
327
+ NOT_ON_TIMER , // PD 7 ** 38 ** D38
328
+ NOT_ON_TIMER , // PG 2 ** 39 ** D39
329
+ NOT_ON_TIMER , // PG 1 ** 40 ** D40
330
+ NOT_ON_TIMER , // PG 0 ** 41 ** D41
331
+ NOT_ON_TIMER , // PL 7 ** 42 ** D42
332
+ NOT_ON_TIMER , // PL 6 ** 43 ** D43
333
+ TIMER5C , // PL 5 ** 44 ** D44
334
+ TIMER5B , // PL 4 ** 45 ** D45
335
+ TIMER5A , // PL 3 ** 46 ** D46
336
+ NOT_ON_TIMER , // PL 2 ** 47 ** D47
337
+ NOT_ON_TIMER , // PL 1 ** 48 ** D48
338
+ NOT_ON_TIMER , // PL 0 ** 49 ** D49
339
+ NOT_ON_TIMER , // PB 3 ** 50 ** SPI_MISO
340
+ NOT_ON_TIMER , // PB 2 ** 51 ** SPI_MOSI
341
+ NOT_ON_TIMER , // PB 1 ** 52 ** SPI_SCK
342
+ NOT_ON_TIMER , // PB 0 ** 53 ** SPI_SS
343
+ NOT_ON_TIMER , // PF 0 ** 54 ** A0
344
+ NOT_ON_TIMER , // PF 1 ** 55 ** A1
345
+ NOT_ON_TIMER , // PF 2 ** 56 ** A2
346
+ NOT_ON_TIMER , // PF 3 ** 57 ** A3
347
+ NOT_ON_TIMER , // PF 4 ** 58 ** A4
348
+ NOT_ON_TIMER , // PF 5 ** 59 ** A5
349
+ NOT_ON_TIMER , // PF 6 ** 60 ** A6
350
+ NOT_ON_TIMER , // PF 7 ** 61 ** A7
351
+ NOT_ON_TIMER , // PK 0 ** 62 ** A8
352
+ NOT_ON_TIMER , // PK 1 ** 63 ** A9
353
+ NOT_ON_TIMER , // PK 2 ** 64 ** A10
354
+ NOT_ON_TIMER , // PK 3 ** 65 ** A11
355
+ NOT_ON_TIMER , // PK 4 ** 66 ** A12
356
+ NOT_ON_TIMER , // PK 5 ** 67 ** A13
357
+ NOT_ON_TIMER , // PK 6 ** 68 ** A14
358
+ NOT_ON_TIMER , // PK 7 ** 69 ** A15
359
+ };
360
+
361
+ #endif
362
+
363
+ #endif
0 commit comments