]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/yosino58/pro_micro.h
[Keyboard] fixed pins for numpad_5x4 layout (#6311)
[qmk_firmware.git] / keyboards / yosino58 / pro_micro.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 #pragma once
25
26 #include <avr/pgmspace.h>
27
28 // Workaround for wrong definitions in "iom32u4.h".
29 // This should be fixed in the AVR toolchain.
30 #undef UHCON
31 #undef UHINT
32 #undef UHIEN
33 #undef UHADDR
34 #undef UHFNUM
35 #undef UHFNUML
36 #undef UHFNUMH
37 #undef UHFLEN
38 #undef UPINRQX
39 #undef UPINTX
40 #undef UPNUM
41 #undef UPRST
42 #undef UPCONX
43 #undef UPCFG0X
44 #undef UPCFG1X
45 #undef UPSTAX
46 #undef UPCFG2X
47 #undef UPIENX
48 #undef UPDATX
49 #undef TCCR2A
50 #undef WGM20
51 #undef WGM21
52 #undef COM2B0
53 #undef COM2B1
54 #undef COM2A0
55 #undef COM2A1
56 #undef TCCR2B
57 #undef CS20
58 #undef CS21
59 #undef CS22
60 #undef WGM22
61 #undef FOC2B
62 #undef FOC2A
63 #undef TCNT2
64 #undef TCNT2_0
65 #undef TCNT2_1
66 #undef TCNT2_2
67 #undef TCNT2_3
68 #undef TCNT2_4
69 #undef TCNT2_5
70 #undef TCNT2_6
71 #undef TCNT2_7
72 #undef OCR2A
73 #undef OCR2_0
74 #undef OCR2_1
75 #undef OCR2_2
76 #undef OCR2_3
77 #undef OCR2_4
78 #undef OCR2_5
79 #undef OCR2_6
80 #undef OCR2_7
81 #undef OCR2B
82 #undef OCR2_0
83 #undef OCR2_1
84 #undef OCR2_2
85 #undef OCR2_3
86 #undef OCR2_4
87 #undef OCR2_5
88 #undef OCR2_6
89 #undef OCR2_7
90
91 #define NUM_DIGITAL_PINS  30
92 #define NUM_ANALOG_INPUTS 12
93
94 #define TX_RX_LED_INIT  DDRD |= (1<<5), DDRB |= (1<<0)
95 #define TXLED0          PORTD |= (1<<5)
96 #define TXLED1          PORTD &= ~(1<<5)
97 #define RXLED0          PORTB |= (1<<0)
98 #define RXLED1          PORTB &= ~(1<<0)
99
100 static const uint8_t SDA = 2;
101 static const uint8_t SCL = 3;
102 #define LED_BUILTIN 13
103
104 // Map SPI port to 'new' pins D14..D17
105 static const uint8_t SS   = 17;
106 static const uint8_t MOSI = 16;
107 static const uint8_t MISO = 14;
108 static const uint8_t SCK  = 15;
109
110 // Mapping of analog pins as digital I/O
111 // A6-A11 share with digital pins
112 static const uint8_t ADC0 = 18;
113 static const uint8_t ADC1 = 19;
114 static const uint8_t ADC2 = 20;
115 static const uint8_t ADC3 = 21;
116 static const uint8_t ADC4 = 22;
117 static const uint8_t ADC5 = 23;
118 static const uint8_t ADC6 = 24;   // D4
119 static const uint8_t ADC7 = 25;   // D6
120 static const uint8_t ADC8 = 26;   // D8
121 static const uint8_t ADC9 = 27;   // D9
122 static const uint8_t ADC10 = 28;  // D10
123 static const uint8_t ADC11 = 29;  // D12
124
125 #define digitalPinToPCICR(p)    ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0))
126 #define digitalPinToPCICRbit(p) 0
127 #define digitalPinToPCMSK(p)    ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCMSK0) : ((uint8_t *)0))
128 #define digitalPinToPCMSKbit(p) ( ((p) >= 8 && (p) <= 11) ? (p) - 4 : ((p) == 14 ? 3 : ((p) == 15 ? 1 : ((p) == 16 ? 2 : ((p) == 17 ? 0 : (p - A8 + 4))))))
129
130 //  __AVR_ATmega32U4__ has an unusual mapping of pins to channels
131 extern const uint8_t PROGMEM analog_pin_to_channel_PGM[];
132 #define analogPinToChannel(P)  ( pgm_read_byte( analog_pin_to_channel_PGM + (P) ) )
133
134 #define digitalPinToInterrupt(p) ((p) == 0 ? 2 : ((p) == 1 ? 3 : ((p) == 2 ? 1 : ((p) == 3 ? 0 : ((p) == 7 ? 4 : NOT_AN_INTERRUPT)))))
135
136 #ifdef ARDUINO_MAIN
137
138 // On the Arduino board, digital pins are also used
139 // for the analog output (software PWM).  Analog input
140 // pins are a separate set.
141
142 // ATMEL ATMEGA32U4 / ARDUINO LEONARDO
143 //
144 // D0               PD2                 RXD1/INT2
145 // D1               PD3                 TXD1/INT3
146 // D2               PD1     SDA         SDA/INT1
147 // D3#              PD0     PWM8/SCL    OC0B/SCL/INT0
148 // D4       A6      PD4                 ADC8
149 // D5#              PC6     ???         OC3A/#OC4A
150 // D6#      A7      PD7     FastPWM     #OC4D/ADC10
151 // D7               PE6                 INT6/AIN0
152 //
153 // D8       A8      PB4                 ADC11/PCINT4
154 // D9#      A9      PB5     PWM16       OC1A/#OC4B/ADC12/PCINT5
155 // D10#     A10     PB6     PWM16       OC1B/0c4B/ADC13/PCINT6
156 // D11#             PB7     PWM8/16     0C0A/OC1C/#RTS/PCINT7
157 // D12      A11     PD6                 T1/#OC4D/ADC9
158 // D13#             PC7     PWM10       CLK0/OC4A
159 //
160 // A0       D18     PF7                 ADC7
161 // A1       D19     PF6                 ADC6
162 // A2       D20     PF5                 ADC5
163 // A3       D21     PF4                 ADC4
164 // A4       D22     PF1                 ADC1
165 // A5       D23     PF0                 ADC0
166 //
167 // New pins D14..D17 to map SPI port to digital pins
168 //
169 // MISO     D14     PB3                 MISO,PCINT3
170 // SCK      D15     PB1                 SCK,PCINT1
171 // MOSI     D16     PB2                 MOSI,PCINT2
172 // SS       D17     PB0                 RXLED,SS/PCINT0
173 //
174 // Connected LEDs on board for TX and RX
175 // TXLED    D24     PD5                 XCK1
176 // RXLED    D17     PB0
177 // HWB              PE2                 HWB
178
179 // these arrays map port names (e.g. port B) to the
180 // appropriate addresses for various functions (e.g. reading
181 // and writing)
182 const uint16_t PROGMEM port_to_mode_PGM[] = {
183     NOT_A_PORT,
184     NOT_A_PORT,
185     (uint16_t) &DDRB,
186     (uint16_t) &DDRC,
187     (uint16_t) &DDRD,
188     (uint16_t) &DDRE,
189     (uint16_t) &DDRF,
190 };
191
192 const uint16_t PROGMEM port_to_output_PGM[] = {
193     NOT_A_PORT,
194     NOT_A_PORT,
195     (uint16_t) &PORTB,
196     (uint16_t) &PORTC,
197     (uint16_t) &PORTD,
198     (uint16_t) &PORTE,
199     (uint16_t) &PORTF,
200 };
201
202 const uint16_t PROGMEM port_to_input_PGM[] = {
203     NOT_A_PORT,
204     NOT_A_PORT,
205     (uint16_t) &PINB,
206     (uint16_t) &PINC,
207     (uint16_t) &PIND,
208     (uint16_t) &PINE,
209     (uint16_t) &PINF,
210 };
211
212 const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
213     PD, // D0 - PD2
214     PD, // D1 - PD3
215     PD, // D2 - PD1
216     PD, // D3 - PD0
217     PD, // D4 - PD4
218     PC, // D5 - PC6
219     PD, // D6 - PD7
220     PE, // D7 - PE6
221
222     PB, // D8 - PB4
223     PB, // D9 - PB5
224     PB, // D10 - PB6
225     PB, // D11 - PB7
226     PD, // D12 - PD6
227     PC, // D13 - PC7
228
229     PB, // D14 - MISO - PB3
230     PB, // D15 - SCK - PB1
231     PB, // D16 - MOSI - PB2
232     PB, // D17 - SS - PB0
233
234     PF, // D18 - A0 - PF7
235     PF, // D19 - A1 - PF6
236     PF, // D20 - A2 - PF5
237     PF, // D21 - A3 - PF4
238     PF, // D22 - A4 - PF1
239     PF, // D23 - A5 - PF0
240
241     PD, // D24 - PD5
242     PD, // D25 / D6 - A7 - PD7
243     PB, // D26 / D8 - A8 - PB4
244     PB, // D27 / D9 - A9 - PB5
245     PB, // D28 / D10 - A10 - PB6
246     PD, // D29 / D12 - A11 - PD6
247 };
248
249 const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
250     _BV(2), // D0 - PD2
251     _BV(3), // D1 - PD3
252     _BV(1), // D2 - PD1
253     _BV(0), // D3 - PD0
254     _BV(4), // D4 - PD4
255     _BV(6), // D5 - PC6
256     _BV(7), // D6 - PD7
257     _BV(6), // D7 - PE6
258
259     _BV(4), // D8 - PB4
260     _BV(5), // D9 - PB5
261     _BV(6), // D10 - PB6
262     _BV(7), // D11 - PB7
263     _BV(6), // D12 - PD6
264     _BV(7), // D13 - PC7
265
266     _BV(3), // D14 - MISO - PB3
267     _BV(1), // D15 - SCK - PB1
268     _BV(2), // D16 - MOSI - PB2
269     _BV(0), // D17 - SS - PB0
270
271     _BV(7), // D18 - A0 - PF7
272     _BV(6), // D19 - A1 - PF6
273     _BV(5), // D20 - A2 - PF5
274     _BV(4), // D21 - A3 - PF4
275     _BV(1), // D22 - A4 - PF1
276     _BV(0), // D23 - A5 - PF0
277
278     _BV(5), // D24 - PD5
279     _BV(7), // D25 / D6 - A7 - PD7
280     _BV(4), // D26 / D8 - A8 - PB4
281     _BV(5), // D27 / D9 - A9 - PB5
282     _BV(6), // D28 / D10 - A10 - PB6
283     _BV(6), // D29 / D12 - A11 - PD6
284 };
285
286 const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
287     NOT_ON_TIMER,
288     NOT_ON_TIMER,
289     NOT_ON_TIMER,
290     TIMER0B,        /* 3 */
291     NOT_ON_TIMER,
292     TIMER3A,        /* 5 */
293     TIMER4D,        /* 6 */
294     NOT_ON_TIMER,
295
296     NOT_ON_TIMER,
297     TIMER1A,        /* 9 */
298     TIMER1B,        /* 10 */
299     TIMER0A,        /* 11 */
300
301     NOT_ON_TIMER,
302     TIMER4A,        /* 13 */
303
304     NOT_ON_TIMER,
305     NOT_ON_TIMER,
306     NOT_ON_TIMER,
307     NOT_ON_TIMER,
308     NOT_ON_TIMER,
309     NOT_ON_TIMER,
310
311     NOT_ON_TIMER,
312     NOT_ON_TIMER,
313     NOT_ON_TIMER,
314     NOT_ON_TIMER,
315     NOT_ON_TIMER,
316     NOT_ON_TIMER,
317     NOT_ON_TIMER,
318     NOT_ON_TIMER,
319     NOT_ON_TIMER,
320     NOT_ON_TIMER,
321 };
322
323 const uint8_t PROGMEM analog_pin_to_channel_PGM[] = {
324     7,  // A0               PF7                 ADC7
325     6,  // A1               PF6                 ADC6
326     5,  // A2               PF5                 ADC5
327     4,  // A3               PF4                 ADC4
328     1,  // A4               PF1                 ADC1
329     0,  // A5               PF0                 ADC0
330     8,  // A6       D4      PD4                 ADC8
331     10, // A7       D6      PD7                 ADC10
332     11, // A8       D8      PB4                 ADC11
333     12, // A9       D9      PB5                 ADC12
334     13, // A10      D10     PB6                 ADC13
335     9   // A11      D12     PD6                 ADC9
336 };
337
338 #endif /* ARDUINO_MAIN */
339
340 // These serial port names are intended to allow libraries and architecture-neutral
341 // sketches to automatically default to the correct port name for a particular type
342 // of use.  For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
343 // the first hardware serial port whose RX/TX pins are not dedicated to another use.
344 //
345 // SERIAL_PORT_MONITOR        Port which normally prints to the Arduino Serial Monitor
346 //
347 // SERIAL_PORT_USBVIRTUAL     Port which is USB virtual serial
348 //
349 // SERIAL_PORT_LINUXBRIDGE    Port which connects to a Linux system via Bridge library
350 //
351 // SERIAL_PORT_HARDWARE       Hardware serial port, physical RX & TX pins.
352 //
353 // SERIAL_PORT_HARDWARE_OPEN  Hardware serial ports which are open for use.  Their RX & TX
354 //                            pins are NOT connected to anything by default.
355 #define SERIAL_PORT_MONITOR        Serial
356 #define SERIAL_PORT_USBVIRTUAL     Serial
357 #define SERIAL_PORT_HARDWARE       Serial1
358 #define SERIAL_PORT_HARDWARE_OPEN  Serial1