Skip to content

Commit 05a9750

Browse files
fakufakucmaglie
authored andcommitted
Modified SD library to use pin definitions from pins_arduino.h rather than redefining everything.
1 parent 2893c2d commit 05a9750

File tree

1 file changed

+17
-289
lines changed

1 file changed

+17
-289
lines changed

libraries/SD/src/utility/Sd2PinMap.h

+17-289
Original file line numberDiff line numberDiff line change
@@ -38,328 +38,56 @@ uint8_t const SCK_PIN = SCK;
3838
#define Sd2PinMap_h
3939
#include <avr/io.h>
4040

41-
//------------------------------------------------------------------------------
42-
/** struct for mapping digital pins */
43-
struct pin_map_t {
44-
volatile uint8_t* ddr;
45-
volatile uint8_t* pin;
46-
volatile uint8_t* port;
47-
uint8_t bit;
48-
};
49-
//------------------------------------------------------------------------------
50-
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
51-
// Mega
52-
53-
// Two Wire (aka I2C) ports
54-
uint8_t const SDA_PIN = 20;
55-
uint8_t const SCL_PIN = 21;
56-
57-
// SPI port
58-
uint8_t const SS_PIN = 53;
59-
uint8_t const MOSI_PIN = 51;
60-
uint8_t const MISO_PIN = 50;
61-
uint8_t const SCK_PIN = 52;
62-
63-
static const pin_map_t digitalPinMap[] = {
64-
{&DDRE, &PINE, &PORTE, 0}, // E0 0
65-
{&DDRE, &PINE, &PORTE, 1}, // E1 1
66-
{&DDRE, &PINE, &PORTE, 4}, // E4 2
67-
{&DDRE, &PINE, &PORTE, 5}, // E5 3
68-
{&DDRG, &PING, &PORTG, 5}, // G5 4
69-
{&DDRE, &PINE, &PORTE, 3}, // E3 5
70-
{&DDRH, &PINH, &PORTH, 3}, // H3 6
71-
{&DDRH, &PINH, &PORTH, 4}, // H4 7
72-
{&DDRH, &PINH, &PORTH, 5}, // H5 8
73-
{&DDRH, &PINH, &PORTH, 6}, // H6 9
74-
{&DDRB, &PINB, &PORTB, 4}, // B4 10
75-
{&DDRB, &PINB, &PORTB, 5}, // B5 11
76-
{&DDRB, &PINB, &PORTB, 6}, // B6 12
77-
{&DDRB, &PINB, &PORTB, 7}, // B7 13
78-
{&DDRJ, &PINJ, &PORTJ, 1}, // J1 14
79-
{&DDRJ, &PINJ, &PORTJ, 0}, // J0 15
80-
{&DDRH, &PINH, &PORTH, 1}, // H1 16
81-
{&DDRH, &PINH, &PORTH, 0}, // H0 17
82-
{&DDRD, &PIND, &PORTD, 3}, // D3 18
83-
{&DDRD, &PIND, &PORTD, 2}, // D2 19
84-
{&DDRD, &PIND, &PORTD, 1}, // D1 20
85-
{&DDRD, &PIND, &PORTD, 0}, // D0 21
86-
{&DDRA, &PINA, &PORTA, 0}, // A0 22
87-
{&DDRA, &PINA, &PORTA, 1}, // A1 23
88-
{&DDRA, &PINA, &PORTA, 2}, // A2 24
89-
{&DDRA, &PINA, &PORTA, 3}, // A3 25
90-
{&DDRA, &PINA, &PORTA, 4}, // A4 26
91-
{&DDRA, &PINA, &PORTA, 5}, // A5 27
92-
{&DDRA, &PINA, &PORTA, 6}, // A6 28
93-
{&DDRA, &PINA, &PORTA, 7}, // A7 29
94-
{&DDRC, &PINC, &PORTC, 7}, // C7 30
95-
{&DDRC, &PINC, &PORTC, 6}, // C6 31
96-
{&DDRC, &PINC, &PORTC, 5}, // C5 32
97-
{&DDRC, &PINC, &PORTC, 4}, // C4 33
98-
{&DDRC, &PINC, &PORTC, 3}, // C3 34
99-
{&DDRC, &PINC, &PORTC, 2}, // C2 35
100-
{&DDRC, &PINC, &PORTC, 1}, // C1 36
101-
{&DDRC, &PINC, &PORTC, 0}, // C0 37
102-
{&DDRD, &PIND, &PORTD, 7}, // D7 38
103-
{&DDRG, &PING, &PORTG, 2}, // G2 39
104-
{&DDRG, &PING, &PORTG, 1}, // G1 40
105-
{&DDRG, &PING, &PORTG, 0}, // G0 41
106-
{&DDRL, &PINL, &PORTL, 7}, // L7 42
107-
{&DDRL, &PINL, &PORTL, 6}, // L6 43
108-
{&DDRL, &PINL, &PORTL, 5}, // L5 44
109-
{&DDRL, &PINL, &PORTL, 4}, // L4 45
110-
{&DDRL, &PINL, &PORTL, 3}, // L3 46
111-
{&DDRL, &PINL, &PORTL, 2}, // L2 47
112-
{&DDRL, &PINL, &PORTL, 1}, // L1 48
113-
{&DDRL, &PINL, &PORTL, 0}, // L0 49
114-
{&DDRB, &PINB, &PORTB, 3}, // B3 50
115-
{&DDRB, &PINB, &PORTB, 2}, // B2 51
116-
{&DDRB, &PINB, &PORTB, 1}, // B1 52
117-
{&DDRB, &PINB, &PORTB, 0}, // B0 53
118-
{&DDRF, &PINF, &PORTF, 0}, // F0 54
119-
{&DDRF, &PINF, &PORTF, 1}, // F1 55
120-
{&DDRF, &PINF, &PORTF, 2}, // F2 56
121-
{&DDRF, &PINF, &PORTF, 3}, // F3 57
122-
{&DDRF, &PINF, &PORTF, 4}, // F4 58
123-
{&DDRF, &PINF, &PORTF, 5}, // F5 59
124-
{&DDRF, &PINF, &PORTF, 6}, // F6 60
125-
{&DDRF, &PINF, &PORTF, 7}, // F7 61
126-
{&DDRK, &PINK, &PORTK, 0}, // K0 62
127-
{&DDRK, &PINK, &PORTK, 1}, // K1 63
128-
{&DDRK, &PINK, &PORTK, 2}, // K2 64
129-
{&DDRK, &PINK, &PORTK, 3}, // K3 65
130-
{&DDRK, &PINK, &PORTK, 4}, // K4 66
131-
{&DDRK, &PINK, &PORTK, 5}, // K5 67
132-
{&DDRK, &PINK, &PORTK, 6}, // K6 68
133-
{&DDRK, &PINK, &PORTK, 7} // K7 69
134-
};
135-
//------------------------------------------------------------------------------
136-
#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)
137-
// Sanguino
138-
139-
// Two Wire (aka I2C) ports
140-
uint8_t const SDA_PIN = 17;
141-
uint8_t const SCL_PIN = 18;
142-
143-
// SPI port
144-
uint8_t const SS_PIN = 4;
145-
uint8_t const MOSI_PIN = 5;
146-
uint8_t const MISO_PIN = 6;
147-
uint8_t const SCK_PIN = 7;
148-
149-
static const pin_map_t digitalPinMap[] = {
150-
{&DDRB, &PINB, &PORTB, 0}, // B0 0
151-
{&DDRB, &PINB, &PORTB, 1}, // B1 1
152-
{&DDRB, &PINB, &PORTB, 2}, // B2 2
153-
{&DDRB, &PINB, &PORTB, 3}, // B3 3
154-
{&DDRB, &PINB, &PORTB, 4}, // B4 4
155-
{&DDRB, &PINB, &PORTB, 5}, // B5 5
156-
{&DDRB, &PINB, &PORTB, 6}, // B6 6
157-
{&DDRB, &PINB, &PORTB, 7}, // B7 7
158-
{&DDRD, &PIND, &PORTD, 0}, // D0 8
159-
{&DDRD, &PIND, &PORTD, 1}, // D1 9
160-
{&DDRD, &PIND, &PORTD, 2}, // D2 10
161-
{&DDRD, &PIND, &PORTD, 3}, // D3 11
162-
{&DDRD, &PIND, &PORTD, 4}, // D4 12
163-
{&DDRD, &PIND, &PORTD, 5}, // D5 13
164-
{&DDRD, &PIND, &PORTD, 6}, // D6 14
165-
{&DDRD, &PIND, &PORTD, 7}, // D7 15
166-
{&DDRC, &PINC, &PORTC, 0}, // C0 16
167-
{&DDRC, &PINC, &PORTC, 1}, // C1 17
168-
{&DDRC, &PINC, &PORTC, 2}, // C2 18
169-
{&DDRC, &PINC, &PORTC, 3}, // C3 19
170-
{&DDRC, &PINC, &PORTC, 4}, // C4 20
171-
{&DDRC, &PINC, &PORTC, 5}, // C5 21
172-
{&DDRC, &PINC, &PORTC, 6}, // C6 22
173-
{&DDRC, &PINC, &PORTC, 7}, // C7 23
174-
{&DDRA, &PINA, &PORTA, 7}, // A7 24
175-
{&DDRA, &PINA, &PORTA, 6}, // A6 25
176-
{&DDRA, &PINA, &PORTA, 5}, // A5 26
177-
{&DDRA, &PINA, &PORTA, 4}, // A4 27
178-
{&DDRA, &PINA, &PORTA, 3}, // A3 28
179-
{&DDRA, &PINA, &PORTA, 2}, // A2 29
180-
{&DDRA, &PINA, &PORTA, 1}, // A1 30
181-
{&DDRA, &PINA, &PORTA, 0} // A0 31
182-
};
183-
//------------------------------------------------------------------------------
184-
#elif defined(__AVR_ATmega32U4__)
185-
// Leonardo
186-
187-
// Two Wire (aka I2C) ports
188-
uint8_t const SDA_PIN = 2;
189-
uint8_t const SCL_PIN = 3;
190-
191-
// SPI port
192-
uint8_t const SS_PIN = 17;
193-
uint8_t const MOSI_PIN = 16;
194-
uint8_t const MISO_PIN = 14;
195-
uint8_t const SCK_PIN = 15;
196-
197-
static const pin_map_t digitalPinMap[] = {
198-
{&DDRD, &PIND, &PORTD, 2}, // D2 0
199-
{&DDRD, &PIND, &PORTD, 3}, // D3 1
200-
{&DDRD, &PIND, &PORTD, 1}, // D1 2
201-
{&DDRD, &PIND, &PORTD, 0}, // D0 3
202-
{&DDRD, &PIND, &PORTD, 4}, // D4 4
203-
{&DDRC, &PINC, &PORTC, 6}, // C6 5
204-
{&DDRD, &PIND, &PORTD, 7}, // D7 6
205-
{&DDRE, &PINE, &PORTE, 6}, // E6 7
206-
{&DDRB, &PINB, &PORTB, 4}, // B4 8
207-
{&DDRB, &PINB, &PORTB, 5}, // B5 9
208-
{&DDRB, &PINB, &PORTB, 6}, // B6 10
209-
{&DDRB, &PINB, &PORTB, 7}, // B7 11
210-
{&DDRD, &PIND, &PORTD, 6}, // D6 12
211-
{&DDRC, &PINC, &PORTC, 7}, // C7 13
212-
{&DDRB, &PINB, &PORTB, 3}, // B3 14
213-
{&DDRB, &PINB, &PORTB, 1}, // B1 15
214-
{&DDRB, &PINB, &PORTB, 2}, // B2 16
215-
{&DDRB, &PINB, &PORTB, 0}, // B0 17
216-
{&DDRF, &PINF, &PORTF, 7}, // F7 18
217-
{&DDRF, &PINF, &PORTF, 6}, // F6 19
218-
{&DDRF, &PINF, &PORTF, 5}, // F5 20
219-
{&DDRF, &PINF, &PORTF, 4}, // F4 21
220-
{&DDRF, &PINF, &PORTF, 1}, // F1 22
221-
{&DDRF, &PINF, &PORTF, 0}, // F0 23
222-
};
223-
//------------------------------------------------------------------------------
224-
#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
225-
// Teensy++ 1.0 & 2.0
226-
227-
// Two Wire (aka I2C) ports
228-
uint8_t const SDA_PIN = 1;
229-
uint8_t const SCL_PIN = 0;
230-
231-
// SPI port
232-
uint8_t const SS_PIN = 20;
233-
uint8_t const MOSI_PIN = 22;
234-
uint8_t const MISO_PIN = 23;
235-
uint8_t const SCK_PIN = 21;
236-
237-
static const pin_map_t digitalPinMap[] = {
238-
{&DDRD, &PIND, &PORTD, 0}, // D0 0
239-
{&DDRD, &PIND, &PORTD, 1}, // D1 1
240-
{&DDRD, &PIND, &PORTD, 2}, // D2 2
241-
{&DDRD, &PIND, &PORTD, 3}, // D3 3
242-
{&DDRD, &PIND, &PORTD, 4}, // D4 4
243-
{&DDRD, &PIND, &PORTD, 5}, // D5 5
244-
{&DDRD, &PIND, &PORTD, 6}, // D6 6
245-
{&DDRD, &PIND, &PORTD, 7}, // D7 7
246-
{&DDRE, &PINE, &PORTE, 0}, // E0 8
247-
{&DDRE, &PINE, &PORTE, 1}, // E1 9
248-
{&DDRC, &PINC, &PORTC, 0}, // C0 10
249-
{&DDRC, &PINC, &PORTC, 1}, // C1 11
250-
{&DDRC, &PINC, &PORTC, 2}, // C2 12
251-
{&DDRC, &PINC, &PORTC, 3}, // C3 13
252-
{&DDRC, &PINC, &PORTC, 4}, // C4 14
253-
{&DDRC, &PINC, &PORTC, 5}, // C5 15
254-
{&DDRC, &PINC, &PORTC, 6}, // C6 16
255-
{&DDRC, &PINC, &PORTC, 7}, // C7 17
256-
{&DDRE, &PINE, &PORTE, 6}, // E6 18
257-
{&DDRE, &PINE, &PORTE, 7}, // E7 19
258-
{&DDRB, &PINB, &PORTB, 0}, // B0 20
259-
{&DDRB, &PINB, &PORTB, 1}, // B1 21
260-
{&DDRB, &PINB, &PORTB, 2}, // B2 22
261-
{&DDRB, &PINB, &PORTB, 3}, // B3 23
262-
{&DDRB, &PINB, &PORTB, 4}, // B4 24
263-
{&DDRB, &PINB, &PORTB, 5}, // B5 25
264-
{&DDRB, &PINB, &PORTB, 6}, // B6 26
265-
{&DDRB, &PINB, &PORTB, 7}, // B7 27
266-
{&DDRA, &PINA, &PORTA, 0}, // A0 28
267-
{&DDRA, &PINA, &PORTA, 1}, // A1 29
268-
{&DDRA, &PINA, &PORTA, 2}, // A2 30
269-
{&DDRA, &PINA, &PORTA, 3}, // A3 31
270-
{&DDRA, &PINA, &PORTA, 4}, // A4 32
271-
{&DDRA, &PINA, &PORTA, 5}, // A5 33
272-
{&DDRA, &PINA, &PORTA, 6}, // A6 34
273-
{&DDRA, &PINA, &PORTA, 7}, // A7 35
274-
{&DDRE, &PINE, &PORTE, 4}, // E4 36
275-
{&DDRE, &PINE, &PORTE, 5}, // E5 37
276-
{&DDRF, &PINF, &PORTF, 0}, // F0 38
277-
{&DDRF, &PINF, &PORTF, 1}, // F1 39
278-
{&DDRF, &PINF, &PORTF, 2}, // F2 40
279-
{&DDRF, &PINF, &PORTF, 3}, // F3 41
280-
{&DDRF, &PINF, &PORTF, 4}, // F4 42
281-
{&DDRF, &PINF, &PORTF, 5}, // F5 43
282-
{&DDRF, &PINF, &PORTF, 6}, // F6 44
283-
{&DDRF, &PINF, &PORTF, 7} // F7 45
284-
};
285-
//------------------------------------------------------------------------------
286-
#else // defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
287-
// 168 and 328 Arduinos
41+
#include <Arduino.h>
28842

28943
// Two Wire (aka I2C) ports
290-
uint8_t const SDA_PIN = 18;
291-
uint8_t const SCL_PIN = 19;
44+
uint8_t const SDA_PIN = SDA;
45+
uint8_t const SCL_PIN = SCL;
29246

29347
// SPI port
294-
uint8_t const SS_PIN = 10;
295-
uint8_t const MOSI_PIN = 11;
296-
uint8_t const MISO_PIN = 12;
297-
uint8_t const SCK_PIN = 13;
298-
299-
static const pin_map_t digitalPinMap[] = {
300-
{&DDRD, &PIND, &PORTD, 0}, // D0 0
301-
{&DDRD, &PIND, &PORTD, 1}, // D1 1
302-
{&DDRD, &PIND, &PORTD, 2}, // D2 2
303-
{&DDRD, &PIND, &PORTD, 3}, // D3 3
304-
{&DDRD, &PIND, &PORTD, 4}, // D4 4
305-
{&DDRD, &PIND, &PORTD, 5}, // D5 5
306-
{&DDRD, &PIND, &PORTD, 6}, // D6 6
307-
{&DDRD, &PIND, &PORTD, 7}, // D7 7
308-
{&DDRB, &PINB, &PORTB, 0}, // B0 8
309-
{&DDRB, &PINB, &PORTB, 1}, // B1 9
310-
{&DDRB, &PINB, &PORTB, 2}, // B2 10
311-
{&DDRB, &PINB, &PORTB, 3}, // B3 11
312-
{&DDRB, &PINB, &PORTB, 4}, // B4 12
313-
{&DDRB, &PINB, &PORTB, 5}, // B5 13
314-
{&DDRC, &PINC, &PORTC, 0}, // C0 14
315-
{&DDRC, &PINC, &PORTC, 1}, // C1 15
316-
{&DDRC, &PINC, &PORTC, 2}, // C2 16
317-
{&DDRC, &PINC, &PORTC, 3}, // C3 17
318-
{&DDRC, &PINC, &PORTC, 4}, // C4 18
319-
{&DDRC, &PINC, &PORTC, 5} // C5 19
320-
};
321-
#endif // defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
322-
//------------------------------------------------------------------------------
323-
static const uint8_t digitalPinCount = sizeof(digitalPinMap)/sizeof(pin_map_t);
48+
uint8_t const SS_PIN = SS;
49+
uint8_t const MOSI_PIN = MOSI;
50+
uint8_t const MISO_PIN = MISO;
51+
uint8_t const SCK_PIN = SCK;
32452

32553
uint8_t badPinNumber(void)
32654
__attribute__((error("Pin number is too large or not a constant")));
32755

32856
static inline __attribute__((always_inline))
32957
uint8_t getPinMode(uint8_t pin) {
330-
if (__builtin_constant_p(pin) && pin < digitalPinCount) {
331-
return (*digitalPinMap[pin].ddr >> digitalPinMap[pin].bit) & 1;
58+
if (__builtin_constant_p(pin) && pin < NUM_DIGITAL_PINS) {
59+
return *portModeRegister(digitalPinToPort(pin)) & digitalPinToBitMask(pin);
33260
} else {
33361
return badPinNumber();
33462
}
33563
}
33664
static inline __attribute__((always_inline))
33765
void setPinMode(uint8_t pin, uint8_t mode) {
338-
if (__builtin_constant_p(pin) && pin < digitalPinCount) {
66+
if (__builtin_constant_p(pin) && pin < NUM_DIGITAL_PINS) {
33967
if (mode) {
340-
*digitalPinMap[pin].ddr |= 1 << digitalPinMap[pin].bit;
68+
*portModeRegister(digitalPinToPort(pin)) |= digitalPinToBitMask(pin);
34169
} else {
342-
*digitalPinMap[pin].ddr &= ~(1 << digitalPinMap[pin].bit);
70+
*portModeRegister(digitalPinToPort(pin)) &= ~digitalPinToBitMask(pin);
34371
}
34472
} else {
34573
badPinNumber();
34674
}
34775
}
34876
static inline __attribute__((always_inline))
34977
uint8_t fastDigitalRead(uint8_t pin) {
350-
if (__builtin_constant_p(pin) && pin < digitalPinCount) {
351-
return (*digitalPinMap[pin].pin >> digitalPinMap[pin].bit) & 1;
78+
if (__builtin_constant_p(pin) && pin < NUM_DIGITAL_PINS) {
79+
return *portInputRegister(digitalPinToPort(pin)) & digitalPinToBitMask(pin);
35280
} else {
35381
return badPinNumber();
35482
}
35583
}
35684
static inline __attribute__((always_inline))
35785
void fastDigitalWrite(uint8_t pin, uint8_t value) {
358-
if (__builtin_constant_p(pin) && pin < digitalPinCount) {
86+
if (__builtin_constant_p(pin) && pin < NUM_DIGITAL_PINS) {
35987
if (value) {
360-
*digitalPinMap[pin].port |= 1 << digitalPinMap[pin].bit;
88+
*portOutputRegister(digitalPinToPort(pin)) |= digitalPinToBitMask(pin);
36189
} else {
362-
*digitalPinMap[pin].port &= ~(1 << digitalPinMap[pin].bit);
90+
*portOutputRegister(digitalPinToPort(pin)) &= ~digitalPinToBitMask(pin);
36391
}
36492
} else {
36593
badPinNumber();

0 commit comments

Comments
 (0)