Project

General

Profile

Statistics
| Branch: | Revision:

root / arduino-1.0 / hardware / arduino / variants / mega / pins_arduino.h @ 58d82c77

History | View | Annotate | Download (11.5 KB)

1 58d82c77 Tom Mullins
/*
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_BUILTIN = 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