diff --git a/README.md b/README.md index 553238f1..bdef9205 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,7 @@ By default serial debugging is disabled. To turn it on simply change ```ENABLE_U Currently the following boards are supported by the library: * All official Arduino AVR boards (Uno, Duemilanove, Mega, Mega 2560, Mega ADK, Leonardo etc.) -* Arduino Due, Intel Galileo, Intel Galileo 2, and Intel Edison +* Arduino Due, Arduino Zero, Intel Galileo, Intel Galileo 2, and Intel Edison * Note that the Intel Galileo uses pin 2 and 3 as INT and SS pin respectively by default, so some modifications to the shield are needed. See the "Interface modifications" section in the [hardware manual](https://www.circuitsathome.com/usb-host-shield-hardware-manual) for more information. * Note native USB host is not supported on any of these platforms. You will have to use the shield for now. * Teensy (Teensy++ 1.0, Teensy 2.0, Teensy++ 2.0, Teensy 3.x, and Teensy LC) diff --git a/avrpins.h b/avrpins.h index b73a6bc6..926af4bb 100644 --- a/avrpins.h +++ b/avrpins.h @@ -899,7 +899,7 @@ MAKE_PIN(P26, CORE_PIN26_PORTREG, 26, CORE_PIN26_CONFIG); #undef MAKE_PIN -#elif defined(ARDUINO_SAM_DUE) && defined(__SAM3X8E__) +#elif defined(ARDUINO_SAM_DUE) // SetDirRead: // Disable interrupts @@ -1023,6 +1023,63 @@ MAKE_PIN(P78, PIOB, PIO_PB23); // Unconnected #undef MAKE_PIN +#elif defined(ARDUINO_SAMD_ZERO) +// For now, to keep stuff simple. +#define MAKE_PIN(className, pin) \ +class className { \ +public: \ + static void Set() { \ + digitalWrite(pin, HIGH);\ + } \ + static void Clear() { \ + digitalWrite(pin, LOW); \ + } \ + static void SetDirRead() { \ + pinMode(pin, INPUT); \ + } \ + static void SetDirWrite() { \ + pinMode(pin, OUTPUT); \ + } \ + static uint8_t IsSet() { \ + return digitalRead(pin); \ + } \ +}; + +// 0 .. 13 - Digital pins +MAKE_PIN(P0, 0); // RX +MAKE_PIN(P1, 1); // TX +MAKE_PIN(P2, 2); +MAKE_PIN(P3, 3); +MAKE_PIN(P4, 4); +MAKE_PIN(P5, 5); +MAKE_PIN(P6, 6); +MAKE_PIN(P7, 7); +MAKE_PIN(P8, 8); +MAKE_PIN(P9, 9); +MAKE_PIN(P10, 10); +MAKE_PIN(P11, 11); +MAKE_PIN(P12, 12); +MAKE_PIN(P13, 13); // LED + +// 14..19 - Analog pins +MAKE_PIN(P14, 14); // A0 +MAKE_PIN(P15, 15); // A1 +MAKE_PIN(P16, 16); // A2 +MAKE_PIN(P17, 17); // A3 +MAKE_PIN(P18, 18); // A4 +MAKE_PIN(P19, 19); // A5 + +// 20..21 I2C pins (SDA/SCL and also EDBG:SDA/SCL) +MAKE_PIN(P20, 20); // SDA +MAKE_PIN(P21, 21); // SCL + +// 22, 23, 24 - SPI pins (ICSP:MISO,SCK,MOSI) +MAKE_PIN(P22, 22); // MISO +MAKE_PIN(P23, 23); // MOSI +MAKE_PIN(P24, 24); // SCK + +#undef MAKE_PIN + #elif defined(RBL_NRF51822) #define MAKE_PIN(className, pin) \ diff --git a/settings.h b/settings.h index 6c1979af..5c174f0e 100644 --- a/settings.h +++ b/settings.h @@ -135,7 +135,7 @@ e-mail : support@circuitsathome.com #define USING_SPI4TEENSY3 0 #endif -#if ((defined(ARDUINO_SAM_DUE) && defined(__SAM3X8E__)) || defined(RBL_NRF51822) || defined(__ARDUINO_X86__) || ARDUINO >= 10600) && !USING_SPI4TEENSY3 +#if (defined(ARDUINO_SAM_DUE) || defined(ARDUINO_SAMD_ZERO) || defined(RBL_NRF51822) || defined(__ARDUINO_X86__) || ARDUINO >= 10600) && !USING_SPI4TEENSY3 #include // Use the Arduino SPI library for the Arduino Due, RedBearLab nRF51822, Intel Galileo 1 & 2, Intel Edison or if the SPI library with transaction is available #endif #if defined(__PIC32MX__) || defined(__PIC32MZ__) diff --git a/usbhost.h b/usbhost.h index 15a57bd1..e751bbdf 100644 --- a/usbhost.h +++ b/usbhost.h @@ -93,8 +93,10 @@ typedef SPi< Pb5, Pb3, Pb4, Pb2 > spi; typedef SPi< Pb7, Pb5, Pb6, Pb4 > spi; #elif (defined(CORE_TEENSY) && (defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MKL26Z64__))) || defined(__ARDUINO_X86__) || defined(__MIPSEL__) || defined(STM32F4) typedef SPi< P13, P11, P12, P10 > spi; -#elif defined(ARDUINO_SAM_DUE) && defined(__SAM3X8E__) +#elif defined(ARDUINO_SAM_DUE) typedef SPi< P76, P75, P74, P10 > spi; +#elif defined(ARDUINO_SAMD_ZERO) +typedef SPi< P24, P23, P22, P10 > spi; #elif defined(RBL_NRF51822) typedef SPi< P16, P18, P17, P10 > spi; #else