~ubuntu-branches/debian/experimental/arduino/experimental

« back to all changes in this revision

Viewing changes to hardware/arduino/variants/leonardo/pins_arduino.h

  • Committer: Package Import Robot
  • Author(s): Scott Howard
  • Date: 2012-03-11 18:19:42 UTC
  • mfrom: (1.1.5) (5.1.14 sid)
  • Revision ID: package-import@ubuntu.com-20120311181942-be2clnbz1gcehixb
Tags: 1:1.0.1~rc1+dfsg-1
New upstream release, experimental.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 ARDUINO_MODEL_USB_PID   0x0034
 
31
 
 
32
#define TX_RX_LED_INIT  DDRD |= (1<<5), DDRB |= (1<<0)
 
33
#define TXLED0                  PORTD |= (1<<5)
 
34
#define TXLED1                  PORTD &= ~(1<<5)
 
35
#define RXLED0                  PORTB |= (1<<0)
 
36
#define RXLED1                  PORTB &= ~(1<<0)
 
37
 
 
38
static const uint8_t SDA = 2;
 
39
static const uint8_t SCL = 3;
 
40
 
 
41
// Map SPI port to 'new' pins D14..D17
 
42
static const uint8_t SS   = 17;
 
43
static const uint8_t MOSI = 16;
 
44
static const uint8_t MISO = 14;
 
45
static const uint8_t SCK  = 15;
 
46
 
 
47
// Mapping of analog pins as digital I/O
 
48
// A6-A11 share with digital pins
 
49
static const uint8_t A0 = 18;
 
50
static const uint8_t A1 = 19;
 
51
static const uint8_t A2 = 20;
 
52
static const uint8_t A3 = 21;
 
53
static const uint8_t A4 = 22;
 
54
static const uint8_t A5 = 23;
 
55
static const uint8_t A6 = 24;   // D4
 
56
static const uint8_t A7 = 25;   // D6
 
57
static const uint8_t A8 = 26;   // D8
 
58
static const uint8_t A9 = 27;   // D9
 
59
static const uint8_t A10 = 28;  // D10
 
60
static const uint8_t A11 = 29;  // D12
 
61
 
 
62
//      __AVR_ATmega32U4__ has an unusual mapping of pins to channels
 
63
extern const uint8_t PROGMEM analog_pin_to_channel_PGM[];
 
64
#define analogPinToChannel(P)  ( pgm_read_byte( analog_pin_to_channel_PGM + (P) ) )
 
65
 
 
66
#ifdef ARDUINO_MAIN
 
67
 
 
68
// On the Arduino board, digital pins are also used
 
69
// for the analog output (software PWM).  Analog input
 
70
// pins are a separate set.
 
71
 
 
72
// ATMEL ATMEGA32U4 / ARDUINO LEONARDO
 
73
//
 
74
// D0                           PD2                                     RXD1/INT2
 
75
// D1                           PD3                                     TXD1/INT3
 
76
// D2                           PD1             SDA                     SDA/INT1
 
77
// D3#                          PD0             PWM8/SCL        OC0B/SCL/INT0
 
78
// D4           A6              PD4                                     ADC8
 
79
// D5#                          PC6             ???                     OC3A/#OC4A
 
80
// D6#          A7              PD7             FastPWM         #OC4D/ADC10
 
81
// D7                           PE6                                     INT6/AIN0
 
82
//
 
83
// D8           A8              PB4                                     ADC11/PCINT4
 
84
// D9#          A9              PB5             PWM16           OC1A/#OC4B/ADC12/PCINT5
 
85
// D10#         A10             PB6             PWM16           OC1B/0c4B/ADC13/PCINT6
 
86
// D11#                         PB7             PWM8/16         0C0A/OC1C/#RTS/PCINT7
 
87
// D12          A11             PD6                                     T1/#OC4D/ADC9
 
88
// D13#                         PC7             PWM10           CLK0/OC4A
 
89
//
 
90
// A0           D18             PF7                                     ADC7
 
91
// A1           D19             PF6                                     ADC6
 
92
// A2           D20     PF5                                     ADC5
 
93
// A3           D21     PF4                                     ADC4
 
94
// A4           D22             PF1                                     ADC1
 
95
// A5           D23     PF0                                     ADC0
 
96
//
 
97
// New pins D14..D17 to map SPI port to digital pins
 
98
//
 
99
// MISO         D14             PB3                                     MISO,PCINT3
 
100
// SCK          D15             PB1                                     SCK,PCINT1
 
101
// MOSI         D16             PB2                                     MOSI,PCINT2
 
102
// SS           D17             PB0                                     RXLED,SS/PCINT0
 
103
//
 
104
// TXLED                        PD5
 
105
// RXLED                    PB0
 
106
// HWB                          PE2                                     HWB
 
107
 
 
108
// these arrays map port names (e.g. port B) to the
 
109
// appropriate addresses for various functions (e.g. reading
 
110
// and writing)
 
111
const uint16_t PROGMEM port_to_mode_PGM[] = {
 
112
        NOT_A_PORT,
 
113
        NOT_A_PORT,
 
114
        (uint16_t) &DDRB,
 
115
        (uint16_t) &DDRC,
 
116
        (uint16_t) &DDRD,
 
117
        (uint16_t) &DDRE,
 
118
        (uint16_t) &DDRF,
 
119
};
 
120
 
 
121
const uint16_t PROGMEM port_to_output_PGM[] = {
 
122
        NOT_A_PORT,
 
123
        NOT_A_PORT,
 
124
        (uint16_t) &PORTB,
 
125
        (uint16_t) &PORTC,
 
126
        (uint16_t) &PORTD,
 
127
        (uint16_t) &PORTE,
 
128
        (uint16_t) &PORTF,
 
129
};
 
130
 
 
131
const uint16_t PROGMEM port_to_input_PGM[] = {
 
132
        NOT_A_PORT,
 
133
        NOT_A_PORT,
 
134
        (uint16_t) &PINB,
 
135
        (uint16_t) &PINC,
 
136
        (uint16_t) &PIND,
 
137
        (uint16_t) &PINE,
 
138
        (uint16_t) &PINF,
 
139
};
 
140
 
 
141
const uint8_t PROGMEM digital_pin_to_port_PGM[30] = {
 
142
        PD, // D0 - PD2
 
143
        PD,     // D1 - PD3
 
144
        PD, // D2 - PD1
 
145
        PD,     // D3 - PD0
 
146
        PD,     // D4 - PD4
 
147
        PC, // D5 - PC6
 
148
        PD, // D6 - PD7
 
149
        PE, // D7 - PE6
 
150
        
 
151
        PB, // D8 - PB4
 
152
        PB,     // D9 - PB5
 
153
        PB, // D10 - PB6
 
154
        PB,     // D11 - PB7
 
155
        PD, // D12 - PD6
 
156
        PC, // D13 - PC7
 
157
        
 
158
        PB,     // D14 - MISO - PB3
 
159
        PB,     // D15 - SCK - PB1
 
160
        PB,     // D16 - MOSI - PB2
 
161
        PB,     // D17 - SS - PB0
 
162
        
 
163
        PF,     // D18 - A0 - PF7
 
164
        PF, // D19 - A1 - PF6
 
165
        PF, // D20 - A2 - PF5
 
166
        PF, // D21 - A3 - PF4
 
167
        PF, // D22 - A4 - PF1
 
168
        PF, // D23 - A5 - PF0
 
169
        
 
170
        PD, // D24 / D4 - A6 - PD4
 
171
        PD, // D25 / D6 - A7 - PD7
 
172
        PB, // D26 / D8 - A8 - PB4
 
173
        PB, // D27 / D9 - A9 - PB5
 
174
        PB, // D28 / D10 - A10 - PB6
 
175
        PD, // D29 / D12 - A11 - PD6
 
176
};
 
177
 
 
178
const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[30] = {
 
179
        _BV(2), // D0 - PD2
 
180
        _BV(3), // D1 - PD3
 
181
        _BV(1), // D2 - PD1
 
182
        _BV(0), // D3 - PD0
 
183
        _BV(4), // D4 - PD4
 
184
        _BV(6), // D5 - PC6
 
185
        _BV(7), // D6 - PD7
 
186
        _BV(6), // D7 - PE6
 
187
        
 
188
        _BV(4), // D8 - PB4
 
189
        _BV(5), // D9 - PB5
 
190
        _BV(6), // D10 - PB6
 
191
        _BV(7), // D11 - PB7
 
192
        _BV(6), // D12 - PD6
 
193
        _BV(7), // D13 - PC7
 
194
        
 
195
        _BV(3), // D14 - MISO - PB3
 
196
        _BV(1), // D15 - SCK - PB1
 
197
        _BV(2), // D16 - MOSI - PB2
 
198
        _BV(0), // D17 - SS - PB0
 
199
        
 
200
        _BV(7), // D18 - A0 - PF7
 
201
        _BV(6), // D19 - A1 - PF6
 
202
        _BV(5), // D20 - A2 - PF5
 
203
        _BV(4), // D21 - A3 - PF4
 
204
        _BV(1), // D22 - A4 - PF1
 
205
        _BV(0), // D23 - A5 - PF0
 
206
        
 
207
        _BV(4), // D24 / D4 - A6 - PD4
 
208
        _BV(7), // D25 / D6 - A7 - PD7
 
209
        _BV(4), // D26 / D8 - A8 - PB4
 
210
        _BV(5), // D27 / D9 - A9 - PB5
 
211
        _BV(6), // D28 / D10 - A10 - PB6
 
212
        _BV(6), // D29 / D12 - A11 - PD6
 
213
};
 
214
 
 
215
const uint8_t PROGMEM digital_pin_to_timer_PGM[18] = {
 
216
        NOT_ON_TIMER,   
 
217
        NOT_ON_TIMER,
 
218
        NOT_ON_TIMER,
 
219
        TIMER0B,                /* 3 */
 
220
        NOT_ON_TIMER,
 
221
        TIMER3A,                /* 5 */
 
222
        TIMER4D,                /* 6 */
 
223
        NOT_ON_TIMER,   
 
224
        
 
225
        NOT_ON_TIMER,   
 
226
        TIMER1A,                /* 9 */
 
227
        TIMER1B,                /* 10 */
 
228
        TIMER0A,                /* 11 */
 
229
        
 
230
        NOT_ON_TIMER,   
 
231
        TIMER4A,                /* 13 */
 
232
        
 
233
        NOT_ON_TIMER,   
 
234
        NOT_ON_TIMER,
 
235
};
 
236
 
 
237
const uint8_t PROGMEM analog_pin_to_channel_PGM[12] = {
 
238
        7,      // A0                           PF7                                     ADC7
 
239
        6,      // A1                           PF6                                     ADC6    
 
240
        5,      // A2                           PF5                                     ADC5    
 
241
        4,      // A3                           PF4                                     ADC4
 
242
        1,      // A4                           PF1                                     ADC1    
 
243
        0,      // A5                           PF0                                     ADC0    
 
244
        8,      // A6           D4              PD4                                     ADC8
 
245
        10,     // A7           D6              PD7                                     ADC10
 
246
        11,     // A8           D8              PB4                                     ADC11
 
247
        12,     // A9           D9              PB5                                     ADC12
 
248
        13,     // A10          D10             PB6                                     ADC13
 
249
        9       // A11          D12             PD6                                     ADC9
 
250
};
 
251
 
 
252
#endif /* ARDUINO_MAIN */
 
253
#endif /* Pins_Arduino_h */