You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  1. /* Arduino SdFat Library
  2. * Copyright (C) 2010 by William Greiman
  3. *
  4. * This file is part of the Arduino SdFat Library
  5. *
  6. * This Library is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * This Library is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with the Arduino SdFat Library. If not, see
  18. * <http://www.gnu.org/licenses/>.
  19. */
  20. #ifndef Sd2PinMap_h
  21. #define Sd2PinMap_h
  22. #if defined(__arm__) || defined(__MK20DX128__) || defined(__MK20DX256__)
  23. #include <Arduino.h>
  24. uint8_t const SS_PIN = SS;
  25. uint8_t const MOSI_PIN = MOSI;
  26. uint8_t const MISO_PIN = MISO;
  27. uint8_t const SCK_PIN = SCK;
  28. #elif defined(__AVR__)
  29. // Warning this file was generated by a program.
  30. #include <avr/io.h>
  31. //------------------------------------------------------------------------------
  32. /** struct for mapping digital pins */
  33. struct pin_map_t {
  34. volatile uint8_t* ddr;
  35. volatile uint8_t* pin;
  36. volatile uint8_t* port;
  37. uint8_t bit;
  38. };
  39. //------------------------------------------------------------------------------
  40. #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  41. // Mega
  42. // Two Wire (aka I2C) ports
  43. uint8_t const SDA_PIN = 20;
  44. uint8_t const SCL_PIN = 21;
  45. // SPI port
  46. uint8_t const SS_PIN = 53;
  47. uint8_t const MOSI_PIN = 51;
  48. uint8_t const MISO_PIN = 50;
  49. uint8_t const SCK_PIN = 52;
  50. static const pin_map_t digitalPinMap[] = {
  51. {&DDRE, &PINE, &PORTE, 0}, // E0 0
  52. {&DDRE, &PINE, &PORTE, 1}, // E1 1
  53. {&DDRE, &PINE, &PORTE, 4}, // E4 2
  54. {&DDRE, &PINE, &PORTE, 5}, // E5 3
  55. {&DDRG, &PING, &PORTG, 5}, // G5 4
  56. {&DDRE, &PINE, &PORTE, 3}, // E3 5
  57. {&DDRH, &PINH, &PORTH, 3}, // H3 6
  58. {&DDRH, &PINH, &PORTH, 4}, // H4 7
  59. {&DDRH, &PINH, &PORTH, 5}, // H5 8
  60. {&DDRH, &PINH, &PORTH, 6}, // H6 9
  61. {&DDRB, &PINB, &PORTB, 4}, // B4 10
  62. {&DDRB, &PINB, &PORTB, 5}, // B5 11
  63. {&DDRB, &PINB, &PORTB, 6}, // B6 12
  64. {&DDRB, &PINB, &PORTB, 7}, // B7 13
  65. {&DDRJ, &PINJ, &PORTJ, 1}, // J1 14
  66. {&DDRJ, &PINJ, &PORTJ, 0}, // J0 15
  67. {&DDRH, &PINH, &PORTH, 1}, // H1 16
  68. {&DDRH, &PINH, &PORTH, 0}, // H0 17
  69. {&DDRD, &PIND, &PORTD, 3}, // D3 18
  70. {&DDRD, &PIND, &PORTD, 2}, // D2 19
  71. {&DDRD, &PIND, &PORTD, 1}, // D1 20
  72. {&DDRD, &PIND, &PORTD, 0}, // D0 21
  73. {&DDRA, &PINA, &PORTA, 0}, // A0 22
  74. {&DDRA, &PINA, &PORTA, 1}, // A1 23
  75. {&DDRA, &PINA, &PORTA, 2}, // A2 24
  76. {&DDRA, &PINA, &PORTA, 3}, // A3 25
  77. {&DDRA, &PINA, &PORTA, 4}, // A4 26
  78. {&DDRA, &PINA, &PORTA, 5}, // A5 27
  79. {&DDRA, &PINA, &PORTA, 6}, // A6 28
  80. {&DDRA, &PINA, &PORTA, 7}, // A7 29
  81. {&DDRC, &PINC, &PORTC, 7}, // C7 30
  82. {&DDRC, &PINC, &PORTC, 6}, // C6 31
  83. {&DDRC, &PINC, &PORTC, 5}, // C5 32
  84. {&DDRC, &PINC, &PORTC, 4}, // C4 33
  85. {&DDRC, &PINC, &PORTC, 3}, // C3 34
  86. {&DDRC, &PINC, &PORTC, 2}, // C2 35
  87. {&DDRC, &PINC, &PORTC, 1}, // C1 36
  88. {&DDRC, &PINC, &PORTC, 0}, // C0 37
  89. {&DDRD, &PIND, &PORTD, 7}, // D7 38
  90. {&DDRG, &PING, &PORTG, 2}, // G2 39
  91. {&DDRG, &PING, &PORTG, 1}, // G1 40
  92. {&DDRG, &PING, &PORTG, 0}, // G0 41
  93. {&DDRL, &PINL, &PORTL, 7}, // L7 42
  94. {&DDRL, &PINL, &PORTL, 6}, // L6 43
  95. {&DDRL, &PINL, &PORTL, 5}, // L5 44
  96. {&DDRL, &PINL, &PORTL, 4}, // L4 45
  97. {&DDRL, &PINL, &PORTL, 3}, // L3 46
  98. {&DDRL, &PINL, &PORTL, 2}, // L2 47
  99. {&DDRL, &PINL, &PORTL, 1}, // L1 48
  100. {&DDRL, &PINL, &PORTL, 0}, // L0 49
  101. {&DDRB, &PINB, &PORTB, 3}, // B3 50
  102. {&DDRB, &PINB, &PORTB, 2}, // B2 51
  103. {&DDRB, &PINB, &PORTB, 1}, // B1 52
  104. {&DDRB, &PINB, &PORTB, 0}, // B0 53
  105. {&DDRF, &PINF, &PORTF, 0}, // F0 54
  106. {&DDRF, &PINF, &PORTF, 1}, // F1 55
  107. {&DDRF, &PINF, &PORTF, 2}, // F2 56
  108. {&DDRF, &PINF, &PORTF, 3}, // F3 57
  109. {&DDRF, &PINF, &PORTF, 4}, // F4 58
  110. {&DDRF, &PINF, &PORTF, 5}, // F5 59
  111. {&DDRF, &PINF, &PORTF, 6}, // F6 60
  112. {&DDRF, &PINF, &PORTF, 7}, // F7 61
  113. {&DDRK, &PINK, &PORTK, 0}, // K0 62
  114. {&DDRK, &PINK, &PORTK, 1}, // K1 63
  115. {&DDRK, &PINK, &PORTK, 2}, // K2 64
  116. {&DDRK, &PINK, &PORTK, 3}, // K3 65
  117. {&DDRK, &PINK, &PORTK, 4}, // K4 66
  118. {&DDRK, &PINK, &PORTK, 5}, // K5 67
  119. {&DDRK, &PINK, &PORTK, 6}, // K6 68
  120. {&DDRK, &PINK, &PORTK, 7} // K7 69
  121. };
  122. //------------------------------------------------------------------------------
  123. #elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)
  124. // Sanguino
  125. // Two Wire (aka I2C) ports
  126. uint8_t const SDA_PIN = 17;
  127. uint8_t const SCL_PIN = 18;
  128. // SPI port
  129. uint8_t const SS_PIN = 4;
  130. uint8_t const MOSI_PIN = 5;
  131. uint8_t const MISO_PIN = 6;
  132. uint8_t const SCK_PIN = 7;
  133. static const pin_map_t digitalPinMap[] = {
  134. {&DDRB, &PINB, &PORTB, 0}, // B0 0
  135. {&DDRB, &PINB, &PORTB, 1}, // B1 1
  136. {&DDRB, &PINB, &PORTB, 2}, // B2 2
  137. {&DDRB, &PINB, &PORTB, 3}, // B3 3
  138. {&DDRB, &PINB, &PORTB, 4}, // B4 4
  139. {&DDRB, &PINB, &PORTB, 5}, // B5 5
  140. {&DDRB, &PINB, &PORTB, 6}, // B6 6
  141. {&DDRB, &PINB, &PORTB, 7}, // B7 7
  142. {&DDRD, &PIND, &PORTD, 0}, // D0 8
  143. {&DDRD, &PIND, &PORTD, 1}, // D1 9
  144. {&DDRD, &PIND, &PORTD, 2}, // D2 10
  145. {&DDRD, &PIND, &PORTD, 3}, // D3 11
  146. {&DDRD, &PIND, &PORTD, 4}, // D4 12
  147. {&DDRD, &PIND, &PORTD, 5}, // D5 13
  148. {&DDRD, &PIND, &PORTD, 6}, // D6 14
  149. {&DDRD, &PIND, &PORTD, 7}, // D7 15
  150. {&DDRC, &PINC, &PORTC, 0}, // C0 16
  151. {&DDRC, &PINC, &PORTC, 1}, // C1 17
  152. {&DDRC, &PINC, &PORTC, 2}, // C2 18
  153. {&DDRC, &PINC, &PORTC, 3}, // C3 19
  154. {&DDRC, &PINC, &PORTC, 4}, // C4 20
  155. {&DDRC, &PINC, &PORTC, 5}, // C5 21
  156. {&DDRC, &PINC, &PORTC, 6}, // C6 22
  157. {&DDRC, &PINC, &PORTC, 7}, // C7 23
  158. {&DDRA, &PINA, &PORTA, 7}, // A7 24
  159. {&DDRA, &PINA, &PORTA, 6}, // A6 25
  160. {&DDRA, &PINA, &PORTA, 5}, // A5 26
  161. {&DDRA, &PINA, &PORTA, 4}, // A4 27
  162. {&DDRA, &PINA, &PORTA, 3}, // A3 28
  163. {&DDRA, &PINA, &PORTA, 2}, // A2 29
  164. {&DDRA, &PINA, &PORTA, 1}, // A1 30
  165. {&DDRA, &PINA, &PORTA, 0} // A0 31
  166. };
  167. //------------------------------------------------------------------------------
  168. #elif defined(__AVR_ATmega32U4__)
  169. #if defined(CORE_TEENSY)
  170. // Teensy 2.0
  171. // Two Wire (aka I2C) ports
  172. uint8_t const SDA_PIN = 6;
  173. uint8_t const SCL_PIN = 5;
  174. // SPI port
  175. uint8_t const SS_PIN = 0;
  176. uint8_t const MOSI_PIN = 2;
  177. uint8_t const MISO_PIN = 3;
  178. uint8_t const SCK_PIN = 1;
  179. static const pin_map_t digitalPinMap[] = {
  180. {&DDRB, &PINB, &PORTB, 0}, // B0 0
  181. {&DDRB, &PINB, &PORTB, 1}, // B1 1
  182. {&DDRB, &PINB, &PORTB, 2}, // B2 2
  183. {&DDRB, &PINB, &PORTB, 3}, // B3 3
  184. {&DDRB, &PINB, &PORTB, 7}, // B7 4
  185. {&DDRD, &PIND, &PORTD, 0}, // D0 5
  186. {&DDRD, &PIND, &PORTD, 1}, // D1 6
  187. {&DDRD, &PIND, &PORTD, 2}, // D2 7
  188. {&DDRD, &PIND, &PORTD, 3}, // D3 8
  189. {&DDRC, &PINC, &PORTC, 6}, // C6 9
  190. {&DDRC, &PINC, &PORTC, 7}, // C7 10
  191. {&DDRD, &PIND, &PORTD, 6}, // D6 11
  192. {&DDRD, &PIND, &PORTD, 7}, // D7 12
  193. {&DDRB, &PINB, &PORTB, 4}, // B4 13
  194. {&DDRB, &PINB, &PORTB, 5}, // B5 14
  195. {&DDRB, &PINB, &PORTB, 6}, // B6 15
  196. {&DDRF, &PINF, &PORTF, 7}, // F7 16
  197. {&DDRF, &PINF, &PORTF, 6}, // F6 17
  198. {&DDRF, &PINF, &PORTF, 5}, // F5 18
  199. {&DDRF, &PINF, &PORTF, 4}, // F4 19
  200. {&DDRF, &PINF, &PORTF, 1}, // F1 20
  201. {&DDRF, &PINF, &PORTF, 0}, // F0 21
  202. {&DDRD, &PIND, &PORTD, 4}, // D4 22
  203. {&DDRD, &PIND, &PORTD, 5}, // D5 23
  204. {&DDRE, &PINE, &PORTE, 6} // E6 24
  205. };
  206. #else
  207. // Leonardo
  208. // Two Wire (aka I2C) ports
  209. uint8_t const SDA_PIN = 2;
  210. uint8_t const SCL_PIN = 3;
  211. // SPI port
  212. uint8_t const SS_PIN = 17;
  213. uint8_t const MOSI_PIN = 16;
  214. uint8_t const MISO_PIN = 14;
  215. uint8_t const SCK_PIN = 15;
  216. static const pin_map_t digitalPinMap[] = {
  217. {&DDRD, &PIND, &PORTD, 2}, // D2 0
  218. {&DDRD, &PIND, &PORTD, 3}, // D3 1
  219. {&DDRD, &PIND, &PORTD, 1}, // D1 2
  220. {&DDRD, &PIND, &PORTD, 0}, // D0 3
  221. {&DDRD, &PIND, &PORTD, 4}, // D4 4
  222. {&DDRC, &PINC, &PORTC, 6}, // C6 5
  223. {&DDRD, &PIND, &PORTD, 7}, // D7 6
  224. {&DDRE, &PINE, &PORTE, 6}, // E6 7
  225. {&DDRB, &PINB, &PORTB, 4}, // B4 8
  226. {&DDRB, &PINB, &PORTB, 5}, // B5 9
  227. {&DDRB, &PINB, &PORTB, 6}, // B6 10
  228. {&DDRB, &PINB, &PORTB, 7}, // B7 11
  229. {&DDRD, &PIND, &PORTD, 6}, // D6 12
  230. {&DDRC, &PINC, &PORTC, 7}, // C7 13
  231. {&DDRB, &PINB, &PORTB, 3}, // B3 14
  232. {&DDRB, &PINB, &PORTB, 1}, // B1 15
  233. {&DDRB, &PINB, &PORTB, 2}, // B2 16
  234. {&DDRB, &PINB, &PORTB, 0}, // B0 17
  235. {&DDRF, &PINF, &PORTF, 7}, // F7 18
  236. {&DDRF, &PINF, &PORTF, 6}, // F6 19
  237. {&DDRF, &PINF, &PORTF, 5}, // F5 20
  238. {&DDRF, &PINF, &PORTF, 4}, // F4 21
  239. {&DDRF, &PINF, &PORTF, 1}, // F1 22
  240. {&DDRF, &PINF, &PORTF, 0}, // F0 23
  241. };
  242. #endif
  243. //------------------------------------------------------------------------------
  244. #elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
  245. // Teensy++ 1.0 & 2.0
  246. // Two Wire (aka I2C) ports
  247. uint8_t const SDA_PIN = 1;
  248. uint8_t const SCL_PIN = 0;
  249. // SPI port
  250. uint8_t const SS_PIN = 20;
  251. uint8_t const MOSI_PIN = 22;
  252. uint8_t const MISO_PIN = 23;
  253. uint8_t const SCK_PIN = 21;
  254. static const pin_map_t digitalPinMap[] = {
  255. {&DDRD, &PIND, &PORTD, 0}, // D0 0
  256. {&DDRD, &PIND, &PORTD, 1}, // D1 1
  257. {&DDRD, &PIND, &PORTD, 2}, // D2 2
  258. {&DDRD, &PIND, &PORTD, 3}, // D3 3
  259. {&DDRD, &PIND, &PORTD, 4}, // D4 4
  260. {&DDRD, &PIND, &PORTD, 5}, // D5 5
  261. {&DDRD, &PIND, &PORTD, 6}, // D6 6
  262. {&DDRD, &PIND, &PORTD, 7}, // D7 7
  263. {&DDRE, &PINE, &PORTE, 0}, // E0 8
  264. {&DDRE, &PINE, &PORTE, 1}, // E1 9
  265. {&DDRC, &PINC, &PORTC, 0}, // C0 10
  266. {&DDRC, &PINC, &PORTC, 1}, // C1 11
  267. {&DDRC, &PINC, &PORTC, 2}, // C2 12
  268. {&DDRC, &PINC, &PORTC, 3}, // C3 13
  269. {&DDRC, &PINC, &PORTC, 4}, // C4 14
  270. {&DDRC, &PINC, &PORTC, 5}, // C5 15
  271. {&DDRC, &PINC, &PORTC, 6}, // C6 16
  272. {&DDRC, &PINC, &PORTC, 7}, // C7 17
  273. {&DDRE, &PINE, &PORTE, 6}, // E6 18
  274. {&DDRE, &PINE, &PORTE, 7}, // E7 19
  275. {&DDRB, &PINB, &PORTB, 0}, // B0 20
  276. {&DDRB, &PINB, &PORTB, 1}, // B1 21
  277. {&DDRB, &PINB, &PORTB, 2}, // B2 22
  278. {&DDRB, &PINB, &PORTB, 3}, // B3 23
  279. {&DDRB, &PINB, &PORTB, 4}, // B4 24
  280. {&DDRB, &PINB, &PORTB, 5}, // B5 25
  281. {&DDRB, &PINB, &PORTB, 6}, // B6 26
  282. {&DDRB, &PINB, &PORTB, 7}, // B7 27
  283. {&DDRA, &PINA, &PORTA, 0}, // A0 28
  284. {&DDRA, &PINA, &PORTA, 1}, // A1 29
  285. {&DDRA, &PINA, &PORTA, 2}, // A2 30
  286. {&DDRA, &PINA, &PORTA, 3}, // A3 31
  287. {&DDRA, &PINA, &PORTA, 4}, // A4 32
  288. {&DDRA, &PINA, &PORTA, 5}, // A5 33
  289. {&DDRA, &PINA, &PORTA, 6}, // A6 34
  290. {&DDRA, &PINA, &PORTA, 7}, // A7 35
  291. {&DDRE, &PINE, &PORTE, 4}, // E4 36
  292. {&DDRE, &PINE, &PORTE, 5}, // E5 37
  293. {&DDRF, &PINF, &PORTF, 0}, // F0 38
  294. {&DDRF, &PINF, &PORTF, 1}, // F1 39
  295. {&DDRF, &PINF, &PORTF, 2}, // F2 40
  296. {&DDRF, &PINF, &PORTF, 3}, // F3 41
  297. {&DDRF, &PINF, &PORTF, 4}, // F4 42
  298. {&DDRF, &PINF, &PORTF, 5}, // F5 43
  299. {&DDRF, &PINF, &PORTF, 6}, // F6 44
  300. {&DDRF, &PINF, &PORTF, 7} // F7 45
  301. };
  302. //------------------------------------------------------------------------------
  303. #else // defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  304. // 168 and 328 Arduinos
  305. // Two Wire (aka I2C) ports
  306. uint8_t const SDA_PIN = 18;
  307. uint8_t const SCL_PIN = 19;
  308. // SPI port
  309. uint8_t const SS_PIN = 10;
  310. uint8_t const MOSI_PIN = 11;
  311. uint8_t const MISO_PIN = 12;
  312. uint8_t const SCK_PIN = 13;
  313. static const pin_map_t digitalPinMap[] = {
  314. {&DDRD, &PIND, &PORTD, 0}, // D0 0
  315. {&DDRD, &PIND, &PORTD, 1}, // D1 1
  316. {&DDRD, &PIND, &PORTD, 2}, // D2 2
  317. {&DDRD, &PIND, &PORTD, 3}, // D3 3
  318. {&DDRD, &PIND, &PORTD, 4}, // D4 4
  319. {&DDRD, &PIND, &PORTD, 5}, // D5 5
  320. {&DDRD, &PIND, &PORTD, 6}, // D6 6
  321. {&DDRD, &PIND, &PORTD, 7}, // D7 7
  322. {&DDRB, &PINB, &PORTB, 0}, // B0 8
  323. {&DDRB, &PINB, &PORTB, 1}, // B1 9
  324. {&DDRB, &PINB, &PORTB, 2}, // B2 10
  325. {&DDRB, &PINB, &PORTB, 3}, // B3 11
  326. {&DDRB, &PINB, &PORTB, 4}, // B4 12
  327. {&DDRB, &PINB, &PORTB, 5}, // B5 13
  328. {&DDRC, &PINC, &PORTC, 0}, // C0 14
  329. {&DDRC, &PINC, &PORTC, 1}, // C1 15
  330. {&DDRC, &PINC, &PORTC, 2}, // C2 16
  331. {&DDRC, &PINC, &PORTC, 3}, // C3 17
  332. {&DDRC, &PINC, &PORTC, 4}, // C4 18
  333. {&DDRC, &PINC, &PORTC, 5} // C5 19
  334. };
  335. #endif // defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  336. //------------------------------------------------------------------------------
  337. static const uint8_t digitalPinCount = sizeof(digitalPinMap)/sizeof(pin_map_t);
  338. uint8_t badPinNumber(void)
  339. __attribute__((error("Pin number is too large or not a constant")));
  340. static inline __attribute__((always_inline))
  341. uint8_t getPinMode(uint8_t pin) {
  342. if (__builtin_constant_p(pin) && pin < digitalPinCount) {
  343. return (*digitalPinMap[pin].ddr >> digitalPinMap[pin].bit) & 1;
  344. } else {
  345. return badPinNumber();
  346. }
  347. }
  348. static inline __attribute__((always_inline))
  349. void setPinMode(uint8_t pin, uint8_t mode) {
  350. if (__builtin_constant_p(pin) && pin < digitalPinCount) {
  351. if (mode) {
  352. *digitalPinMap[pin].ddr |= 1 << digitalPinMap[pin].bit;
  353. } else {
  354. *digitalPinMap[pin].ddr &= ~(1 << digitalPinMap[pin].bit);
  355. }
  356. } else {
  357. badPinNumber();
  358. }
  359. }
  360. static inline __attribute__((always_inline))
  361. uint8_t fastDigitalRead(uint8_t pin) {
  362. if (__builtin_constant_p(pin) && pin < digitalPinCount) {
  363. return (*digitalPinMap[pin].pin >> digitalPinMap[pin].bit) & 1;
  364. } else {
  365. return badPinNumber();
  366. }
  367. }
  368. static inline __attribute__((always_inline))
  369. void fastDigitalWrite(uint8_t pin, uint8_t value) {
  370. if (__builtin_constant_p(pin) && pin < digitalPinCount) {
  371. if (value) {
  372. *digitalPinMap[pin].port |= 1 << digitalPinMap[pin].bit;
  373. } else {
  374. *digitalPinMap[pin].port &= ~(1 << digitalPinMap[pin].bit);
  375. }
  376. } else {
  377. badPinNumber();
  378. }
  379. }
  380. #else
  381. #error Architecture or board not supported.
  382. #endif
  383. #endif // Sd2PinMap_h