2 pins_arduino.h - Pin definition functions for Arduino
3 Part of Arduino - http://www.arduino.cc/
5 Copyright (c) 2007 David A. Mellis
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.
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.
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
22 $Id: wiring.h 249 2007-02-03 16:52:51Z mellis $
25 #ifndef Pins_Arduino_h
26 #define Pins_Arduino_h
28 #include <avr/pgmspace.h>
30 #define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0)
31 #define TXLED0 PORTD |= (1<<5)
32 #define TXLED1 PORTD &= ~(1<<5)
33 #define RXLED0 PORTB |= (1<<0)
34 #define RXLED1 PORTB &= ~(1<<0)
36 static const uint8_t SDA = 2;
37 static const uint8_t SCL = 3;
39 // Map SPI port to 'new' pins D14..D17
40 static const uint8_t SS = 17;
41 static const uint8_t MOSI = 16;
42 static const uint8_t MISO = 14;
43 static const uint8_t SCK = 15;
45 // Mapping of analog pins as digital I/O
46 // A6-A11 share with digital pins
47 static const uint8_t A0 = 18;
48 static const uint8_t A1 = 19;
49 static const uint8_t A2 = 20;
50 static const uint8_t A3 = 21;
51 static const uint8_t A4 = 22;
52 static const uint8_t A5 = 23;
53 static const uint8_t A6 = 24; // D4
54 static const uint8_t A7 = 25; // D6
55 static const uint8_t A8 = 26; // D8
56 static const uint8_t A9 = 27; // D9
57 static const uint8_t A10 = 28; // D10
58 static const uint8_t A11 = 29; // D12
60 #define digitalPinToPCICR(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0))
61 #define digitalPinToPCICRbit(p) 0
62 #define digitalPinToPCMSK(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCMSK0) : ((uint8_t *)0))
63 #define digitalPinToPCMSKbit(p) ( ((p) >= 8 && (p) <= 11) ? (p) - 4 : ((p) == 14 ? 3 : ((p) == 15 ? 1 : ((p) == 16 ? 2 : ((p) == 17 ? 0 : (p - A8 + 4))))))
65 // __AVR_ATmega32U4__ has an unusual mapping of pins to channels
66 extern const uint8_t PROGMEM analog_pin_to_channel_PGM[];
67 #define analogPinToChannel(P) ( pgm_read_byte( analog_pin_to_channel_PGM + (P) ) )
71 // On the Arduino board, digital pins are also used
72 // for the analog output (software PWM). Analog input
73 // pins are a separate set.
75 // ATMEL ATMEGA32U4 / ARDUINO LEONARDO
79 // D2 PD1 SDA SDA/INT1
80 // D3# PD0 PWM8/SCL OC0B/SCL/INT0
82 // D5# PC6 ??? OC3A/#OC4A
83 // D6# A7 PD7 FastPWM #OC4D/ADC10
86 // D8 A8 PB4 ADC11/PCINT4
87 // D9# A9 PB5 PWM16 OC1A/#OC4B/ADC12/PCINT5
88 // D10# A10 PB6 PWM16 OC1B/0c4B/ADC13/PCINT6
89 // D11# PB7 PWM8/16 0C0A/OC1C/#RTS/PCINT7
90 // D12 A11 PD6 T1/#OC4D/ADC9
91 // D13# PC7 PWM10 CLK0/OC4A
100 // New pins D14..D17 to map SPI port to digital pins
102 // MISO D14 PB3 MISO,PCINT3
103 // SCK D15 PB1 SCK,PCINT1
104 // MOSI D16 PB2 MOSI,PCINT2
105 // SS D17 PB0 RXLED,SS/PCINT0
111 // these arrays map port names (e.g. port B) to the
112 // appropriate addresses for various functions (e.g. reading
114 const uint16_t PROGMEM port_to_mode_PGM[] = {
124 const uint16_t PROGMEM port_to_output_PGM[] = {
134 const uint16_t PROGMEM port_to_input_PGM[] = {
144 const uint8_t PROGMEM digital_pin_to_port_PGM[30] = {
161 PB, // D14 - MISO - PB3
162 PB, // D15 - SCK - PB1
163 PB, // D16 - MOSI - PB2
164 PB, // D17 - SS - PB0
166 PF, // D18 - A0 - PF7
167 PF, // D19 - A1 - PF6
168 PF, // D20 - A2 - PF5
169 PF, // D21 - A3 - PF4
170 PF, // D22 - A4 - PF1
171 PF, // D23 - A5 - PF0
173 PD, // D24 / D4 - A6 - PD4
174 PD, // D25 / D6 - A7 - PD7
175 PB, // D26 / D8 - A8 - PB4
176 PB, // D27 / D9 - A9 - PB5
177 PB, // D28 / D10 - A10 - PB6
178 PD, // D29 / D12 - A11 - PD6
181 const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[30] = {
198 _BV(3), // D14 - MISO - PB3
199 _BV(1), // D15 - SCK - PB1
200 _BV(2), // D16 - MOSI - PB2
201 _BV(0), // D17 - SS - PB0
203 _BV(7), // D18 - A0 - PF7
204 _BV(6), // D19 - A1 - PF6
205 _BV(5), // D20 - A2 - PF5
206 _BV(4), // D21 - A3 - PF4
207 _BV(1), // D22 - A4 - PF1
208 _BV(0), // D23 - A5 - PF0
210 _BV(4), // D24 / D4 - A6 - PD4
211 _BV(7), // D25 / D6 - A7 - PD7
212 _BV(4), // D26 / D8 - A8 - PB4
213 _BV(5), // D27 / D9 - A9 - PB5
214 _BV(6), // D28 / D10 - A10 - PB6
215 _BV(6), // D29 / D12 - A11 - PD6
218 const uint8_t PROGMEM digital_pin_to_timer_PGM[16] = {
240 const uint8_t PROGMEM analog_pin_to_channel_PGM[12] = {
248 10, // A7 D6 PD7 ADC10
249 11, // A8 D8 PB4 ADC11
250 12, // A9 D9 PB5 ADC12
251 13, // A10 D10 PB6 ADC13
252 9 // A11 D12 PD6 ADC9
255 #endif /* ARDUINO_MAIN */
256 #endif /* Pins_Arduino_h */