Arduino-GPIO
General Purpose Input/Output (GPIO) library for Arduino
Board.h
Go to the documentation of this file.
1 
19 #ifndef HARDWARE_AVR_BOARD_H
20 #define HARDWARE_AVR_BOARD_H
21 
28 #define GPIO_PIN(port,pin) (((port) << 4) | (pin))
29 
34 #define GPIO_REG(pin) ((pin) >> 4)
35 
40 #define GPIO_MASK(pin) _BV((pin) & 0xf)
41 
43 #define GPIO_ATOMIC_MAX GPIO_PIN(0x40,0)
44 
51 #define GPIO_ATOMIC(expr) \
52  do { \
53  if (PIN < GPIO_ATOMIC_MAX) { \
54  expr; \
55  } \
56  else { \
57  uint8_t sreg = SREG; \
58  __asm__ __volatile__("cli" ::: "memory"); \
59  expr; \
60  SREG = sreg; \
61  __asm__ __volatile__("" ::: "memory"); \
62  } \
63  } while (0)
64 
65 #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
66 
101 class BOARD {
102 public:
103  enum pin_t {
104  D0 = GPIO_PIN(0x29,0),
105  D1 = GPIO_PIN(0x29,1),
106  D2 = GPIO_PIN(0x29,2),
107  D3 = GPIO_PIN(0x29,3),
108  D4 = GPIO_PIN(0x29,4),
109  D5 = GPIO_PIN(0x29,5),
110  D6 = GPIO_PIN(0x29,6),
111  D7 = GPIO_PIN(0x29,7),
112 
113  D8 = GPIO_PIN(0x23,0),
114  D9 = GPIO_PIN(0x23,1),
115  D10 = GPIO_PIN(0x23,2),
116  D11 = GPIO_PIN(0x23,3),
117  D12 = GPIO_PIN(0x23,4),
118  D13 = GPIO_PIN(0x23,5),
119 
120  D14 = GPIO_PIN(0x26,0),
121  D15 = GPIO_PIN(0x26,1),
122  D16 = GPIO_PIN(0x26,2),
123  D17 = GPIO_PIN(0x26,3),
124  D18 = GPIO_PIN(0x26,4),
125  D19 = GPIO_PIN(0x26,5),
126 
127  SS = D10,
128  MOSI = D11,
129  MISO = D12,
130  SCK = D13,
131 
132  SDA = D18,
133  SCL = D19
134  };
135 };
136 #elif defined(__AVR_ATmega32U4__)
137 
183 class BOARD {
184 public:
185  enum pin_t {
186  D0 = GPIO_PIN(0x29,2),
187  D1 = GPIO_PIN(0x29,3),
188  D2 = GPIO_PIN(0x29,1),
189  D3 = GPIO_PIN(0x29,0),
190  D4 = GPIO_PIN(0x29,4),
191  D5 = GPIO_PIN(0x26,6),
192  D6 = GPIO_PIN(0x29,7),
193  D7 = GPIO_PIN(0x2c,6),
194 
195  D8 = GPIO_PIN(0x23,4),
196  D9 = GPIO_PIN(0x23,5),
197  D10 = GPIO_PIN(0x23,6),
198  D11 = GPIO_PIN(0x23,7),
199  D12 = GPIO_PIN(0x29,6),
200  D13 = GPIO_PIN(0x26,7),
201 
202  D14 = GPIO_PIN(0x2f,7),
203  D15 = GPIO_PIN(0x2f,6),
204  D16 = GPIO_PIN(0x2f,5),
205  D17 = GPIO_PIN(0x2f,4),
206  D18 = GPIO_PIN(0x2f,1),
207  D19 = GPIO_PIN(0x2f,0),
208 
209  D20 = GPIO_PIN(0x23,0),
210  D21 = GPIO_PIN(0x23,2),
211  D22 = GPIO_PIN(0x23,3),
212  D23 = GPIO_PIN(0x23,1),
213 
214  SS = D20,
215  MOSI = D22,
216  MISO = D20,
217  SCK = D21,
218 
219  SDA = D2,
220  SCL = D3
221  };
222 };
223 #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
224 
271 class BOARD {
272 public:
273  enum pin_t {
274  D0 = GPIO_PIN(0x2c,0),
275  D1 = GPIO_PIN(0x2c,1),
276  D2 = GPIO_PIN(0x2c,4),
277  D3 = GPIO_PIN(0x2c,5),
278  D4 = GPIO_PIN(0x32,5),
279  D5 = GPIO_PIN(0x2c,3),
280  D6 = GPIO_PIN(0x100,3),
281  D7 = GPIO_PIN(0x100,4),
282 
283  D8 = GPIO_PIN(0x100,5),
284  D9 = GPIO_PIN(0x100,6),
285  D10 = GPIO_PIN(0x23,4),
286  D11 = GPIO_PIN(0x23,5),
287  D12 = GPIO_PIN(0x23,6),
288  D13 = GPIO_PIN(0x23,7),
289 
290  D14 = GPIO_PIN(0x103,1),
291  D15 = GPIO_PIN(0x103,0),
292  D16 = GPIO_PIN(0x100,1),
293  D17 = GPIO_PIN(0x100,0),
294  D18 = GPIO_PIN(0x29,3),
295  D19 = GPIO_PIN(0x29,2),
296  D20 = GPIO_PIN(0x29,1),
297  D21 = GPIO_PIN(0x29,0),
298 
299  D22 = GPIO_PIN(0x20,0),
300  D23 = GPIO_PIN(0x20,1),
301  D24 = GPIO_PIN(0x20,2),
302  D25 = GPIO_PIN(0x20,3),
303  D26 = GPIO_PIN(0x20,4),
304  D27 = GPIO_PIN(0x20,5),
305  D28 = GPIO_PIN(0x20,6),
306  D29 = GPIO_PIN(0x20,7),
307  D30 = GPIO_PIN(0x26,7),
308  D31 = GPIO_PIN(0x26,6),
309  D32 = GPIO_PIN(0x26,5),
310  D33 = GPIO_PIN(0x26,4),
311  D34 = GPIO_PIN(0x26,3),
312  D35 = GPIO_PIN(0x26,2),
313  D36 = GPIO_PIN(0x26,1),
314  D37 = GPIO_PIN(0x26,0),
315  D38 = GPIO_PIN(0x29,7),
316  D39 = GPIO_PIN(0x32,2),
317  D40 = GPIO_PIN(0x32,1),
318  D41 = GPIO_PIN(0x32,0),
319  D42 = GPIO_PIN(0x109,7),
320  D43 = GPIO_PIN(0x109,6),
321  D44 = GPIO_PIN(0x109,5),
322  D45 = GPIO_PIN(0x109,4),
323  D46 = GPIO_PIN(0x109,3),
324  D47 = GPIO_PIN(0x109,2),
325  D48 = GPIO_PIN(0x109,1),
326  D49 = GPIO_PIN(0x109,0),
327  D50 = GPIO_PIN(0x23,3),
328  D51 = GPIO_PIN(0x23,2),
329  D52 = GPIO_PIN(0x23,1),
330  D53 = GPIO_PIN(0x23,0),
331 
332  D54 = GPIO_PIN(0x2f,0),
333  D55 = GPIO_PIN(0x2f,1),
334  D56 = GPIO_PIN(0x2f,2),
335  D57 = GPIO_PIN(0x2f,3),
336  D58 = GPIO_PIN(0x2f,4),
337  D59 = GPIO_PIN(0x2f,5),
338  D60 = GPIO_PIN(0x2f,6),
339  D61 = GPIO_PIN(0x2f,7),
340 
341  D62 = GPIO_PIN(0x106,0),
342  D63 = GPIO_PIN(0x106,1),
343  D64 = GPIO_PIN(0x106,2),
344  D65 = GPIO_PIN(0x106,3),
345  D66 = GPIO_PIN(0x106,4),
346  D67 = GPIO_PIN(0x106,5),
347  D68 = GPIO_PIN(0x106,6),
348  D69 = GPIO_PIN(0x106,7),
349 
350  SS = D53,
351  MOSI = D51,
352  MISO = D50,
353  SCK = D52,
354 
355  SDA = D20,
356  SCL = D21
357  };
358 };
359 #elif defined(__AVR_ATtiny24__) \
360  || defined(__AVR_ATtiny44__) \
361  || defined(__AVR_ATtiny84__)
362 
378 class BOARD {
379 public:
380  enum pin_t {
381  D0 = GPIO_PIN(0x39,0),
382  D1 = GPIO_PIN(0x39,1),
383  D2 = GPIO_PIN(0x39,2),
384  D3 = GPIO_PIN(0x39,3),
385  D4 = GPIO_PIN(0x39,4),
386  D5 = GPIO_PIN(0x39,5),
387  D6 = GPIO_PIN(0x39,6),
388  D7 = GPIO_PIN(0x39,7),
389  D8 = GPIO_PIN(0x36,2),
390  D9 = GPIO_PIN(0x36,1),
391  D10 = GPIO_PIN(0x36,0),
392 
393  SS = D3,
394  MOSI = D5,
395  MISO = D6,
396  SCK = D4
397  };
398 };
399 #elif defined(__AVR_ATtiny25__) \
400  || defined(__AVR_ATtiny45__) \
401  || defined(__AVR_ATtiny85__)
402 
415 class BOARD {
416 public:
417  enum pin_t {
418  D0 = GPIO_PIN(0x36,0),
419  D1 = GPIO_PIN(0x36,1),
420  D2 = GPIO_PIN(0x36,2),
421  D3 = GPIO_PIN(0x36,3),
422  D4 = GPIO_PIN(0x36,4),
423  D5 = GPIO_PIN(0x36,5),
424 
425  SS = D3,
426  MOSI = D1,
427  MISO = D0,
428  SCK = D2
429  };
430 };
431 #else
432 #error Board.h: avr mcu not supported
433 #endif
434 #endif
PIND:5.
Definition: Board.h:109
SPI Slave Select.
Definition: Board.h:127
PIND:0.
Definition: Board.h:104
PIND:1.
Definition: Board.h:105
TWI Clock.
Definition: Board.h:133
TWI Data.
Definition: Board.h:132
SPI Clock.
Definition: Board.h:130
pin_t
Definition: Board.h:103
#define GPIO_PIN(port, pin)
Definition: Board.h:28
PINC:5/A5/SCL.
Definition: Board.h:125
PINC:2/A2.
Definition: Board.h:122
PINC:0/A0.
Definition: Board.h:120
PIND:7.
Definition: Board.h:111
PINB:2/SS.
Definition: Board.h:115
PIND:4.
Definition: Board.h:108
PIND:3.
Definition: Board.h:107
PINB:5/SCK/ICSP.3.
Definition: Board.h:118
PINB:3/MOSI/ICSP.4.
Definition: Board.h:116
SPI Master Input Slave Output.
Definition: Board.h:129
PINB:4/MISO/ICSP.1.
Definition: Board.h:117
PINC:1/A1.
Definition: Board.h:121
PINB:0.
Definition: Board.h:113
PINC:4/A4/SDA.
Definition: Board.h:124
Definition: Board.h:101
SPI Master Output Slave Input.
Definition: Board.h:128
PINB:1.
Definition: Board.h:114
PINC:3/A3.
Definition: Board.h:123
PIND:2.
Definition: Board.h:106
PIND:6.
Definition: Board.h:110