]> git.gir.st - tmk_keyboard.git/blob - protocol/usb_hid/arduino-1.0.1/variants/leonardo/pins_arduino.h
Add USB_Host_Shield_2.0 and arduino-1.0.1 in usb_hid.
[tmk_keyboard.git] / protocol / usb_hid / arduino-1.0.1 / variants / leonardo / pins_arduino.h
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 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)
35
36 static const uint8_t SDA = 2;
37 static const uint8_t SCL = 3;
38
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;
44
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
59
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))))))
64
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) ) )
68
69 #ifdef ARDUINO_MAIN
70
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.
74
75 // ATMEL ATMEGA32U4 / ARDUINO LEONARDO
76 //
77 // D0 PD2 RXD1/INT2
78 // D1 PD3 TXD1/INT3
79 // D2 PD1 SDA SDA/INT1
80 // D3# PD0 PWM8/SCL OC0B/SCL/INT0
81 // D4 A6 PD4 ADC8
82 // D5# PC6 ??? OC3A/#OC4A
83 // D6# A7 PD7 FastPWM #OC4D/ADC10
84 // D7 PE6 INT6/AIN0
85 //
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
92 //
93 // A0 D18 PF7 ADC7
94 // A1 D19 PF6 ADC6
95 // A2 D20 PF5 ADC5
96 // A3 D21 PF4 ADC4
97 // A4 D22 PF1 ADC1
98 // A5 D23 PF0 ADC0
99 //
100 // New pins D14..D17 to map SPI port to digital pins
101 //
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
106 //
107 // TXLED PD5
108 // RXLED PB0
109 // HWB PE2 HWB
110
111 // these arrays map port names (e.g. port B) to the
112 // appropriate addresses for various functions (e.g. reading
113 // and writing)
114 const uint16_t PROGMEM port_to_mode_PGM[] = {
115 NOT_A_PORT,
116 NOT_A_PORT,
117 (uint16_t) &DDRB,
118 (uint16_t) &DDRC,
119 (uint16_t) &DDRD,
120 (uint16_t) &DDRE,
121 (uint16_t) &DDRF,
122 };
123
124 const uint16_t PROGMEM port_to_output_PGM[] = {
125 NOT_A_PORT,
126 NOT_A_PORT,
127 (uint16_t) &PORTB,
128 (uint16_t) &PORTC,
129 (uint16_t) &PORTD,
130 (uint16_t) &PORTE,
131 (uint16_t) &PORTF,
132 };
133
134 const uint16_t PROGMEM port_to_input_PGM[] = {
135 NOT_A_PORT,
136 NOT_A_PORT,
137 (uint16_t) &PINB,
138 (uint16_t) &PINC,
139 (uint16_t) &PIND,
140 (uint16_t) &PINE,
141 (uint16_t) &PINF,
142 };
143
144 const uint8_t PROGMEM digital_pin_to_port_PGM[30] = {
145 PD, // D0 - PD2
146 PD, // D1 - PD3
147 PD, // D2 - PD1
148 PD, // D3 - PD0
149 PD, // D4 - PD4
150 PC, // D5 - PC6
151 PD, // D6 - PD7
152 PE, // D7 - PE6
153
154 PB, // D8 - PB4
155 PB, // D9 - PB5
156 PB, // D10 - PB6
157 PB, // D11 - PB7
158 PD, // D12 - PD6
159 PC, // D13 - PC7
160
161 PB, // D14 - MISO - PB3
162 PB, // D15 - SCK - PB1
163 PB, // D16 - MOSI - PB2
164 PB, // D17 - SS - PB0
165
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
172
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
179 };
180
181 const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[30] = {
182 _BV(2), // D0 - PD2
183 _BV(3), // D1 - PD3
184 _BV(1), // D2 - PD1
185 _BV(0), // D3 - PD0
186 _BV(4), // D4 - PD4
187 _BV(6), // D5 - PC6
188 _BV(7), // D6 - PD7
189 _BV(6), // D7 - PE6
190
191 _BV(4), // D8 - PB4
192 _BV(5), // D9 - PB5
193 _BV(6), // D10 - PB6
194 _BV(7), // D11 - PB7
195 _BV(6), // D12 - PD6
196 _BV(7), // D13 - PC7
197
198 _BV(3), // D14 - MISO - PB3
199 _BV(1), // D15 - SCK - PB1
200 _BV(2), // D16 - MOSI - PB2
201 _BV(0), // D17 - SS - PB0
202
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
209
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
216 };
217
218 const uint8_t PROGMEM digital_pin_to_timer_PGM[16] = {
219 NOT_ON_TIMER,
220 NOT_ON_TIMER,
221 NOT_ON_TIMER,
222 TIMER0B, /* 3 */
223 NOT_ON_TIMER,
224 TIMER3A, /* 5 */
225 TIMER4D, /* 6 */
226 NOT_ON_TIMER,
227
228 NOT_ON_TIMER,
229 TIMER1A, /* 9 */
230 TIMER1B, /* 10 */
231 TIMER0A, /* 11 */
232
233 NOT_ON_TIMER,
234 TIMER4A, /* 13 */
235
236 NOT_ON_TIMER,
237 NOT_ON_TIMER,
238 };
239
240 const uint8_t PROGMEM analog_pin_to_channel_PGM[12] = {
241 7, // A0 PF7 ADC7
242 6, // A1 PF6 ADC6
243 5, // A2 PF5 ADC5
244 4, // A3 PF4 ADC4
245 1, // A4 PF1 ADC1
246 0, // A5 PF0 ADC0
247 8, // A6 D4 PD4 ADC8
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
253 };
254
255 #endif /* ARDUINO_MAIN */
256 #endif /* Pins_Arduino_h */
Imprint / Impressum