From af63cf8752ac0a40e8a103e56df6277c6529318e Mon Sep 17 00:00:00 2001
From: Caril <caril.martinez@cti.espol.edu.ec>
Date: Tue, 29 Oct 2024 14:31:49 -0500
Subject: [PATCH] Add custom variants configuration for Adafruit Feather
 nRF52840 Express

---
 variants/feather_nrf52840_express/variant.cpp | 111 +++++++++++++
 variants/feather_nrf52840_express/variant.h   | 146 ++++++++++++++++++
 2 files changed, 257 insertions(+)
 create mode 100644 variants/feather_nrf52840_express/variant.cpp
 create mode 100644 variants/feather_nrf52840_express/variant.h

diff --git a/variants/feather_nrf52840_express/variant.cpp b/variants/feather_nrf52840_express/variant.cpp
new file mode 100644
index 0000000..f30150f
--- /dev/null
+++ b/variants/feather_nrf52840_express/variant.cpp
@@ -0,0 +1,111 @@
+/*
+  Copyright (c) 2014-2015 Arduino LLC.  All right reserved.
+  Copyright (c) 2016 Sandeep Mistry All right reserved.
+  Copyright (c) 2018, Adafruit Industries (adafruit.com)
+
+  This library is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Lesser General Public
+  License as published by the Free Software Foundation; either
+  version 2.1 of the License, or (at your option) any later version.
+
+  This library is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  See the GNU Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+#include "variant.h"
+#include "wiring_constants.h"
+#include "wiring_digital.h"
+#include "nrf.h"
+
+const uint32_t g_ADigitalPinMap[] =
+{
+  // D0 .. D13
+  47,  // D0  is P1.15 
+  24,  // D1  is P0.24 () 
+  32+13,  // D2  is P0.10 
+  25,  // D3  is P0.25 (LED1)
+  32,  // D4  is P1.00 (LED2)
+  40,  // D5  is P1.08
+   7,  // D6  is P0.07
+  34,  // D7  is P1.02 
+  16,  // D8  is P0.16 (Motor)
+  26,  // D9  is P0.26
+  27,  // D10 is P0.27
+   6,  // D11 is P0.06
+   8,  // D12 is P0.08
+  41,  // D13 is P1.09
+
+  // D14 .. D21 (aka A0 .. A7)
+   4,  // D14 is P0.04 (A0)
+   5,  // D15 is P0.05 (A1) (BAT)
+  30,  // D16 is P0.30 (A2)
+  28,  // D17 is P0.28 (A3)
+   2,  // D18 is P0.02 (A4)
+   3,  // D19 is P0.03 (A5)
+  29,  // D20 is P0.29 (A6)
+  31,  // D21 is P0.31 (A7)
+
+  // D22 .. D23 (i2c)
+  12,  // D22 is P0.12 (SDA)
+  11,  // D23 is P0.11 (SCL)
+
+  // D24 .. D26 (aka SPI pins)
+  15,  // D24 is P0.15 (SPI MOSO+I)
+  13,  // D25 is P0.13 (SPI MISO)
+  14,  // D26 is P0.14 (SPI SCK )
+
+  // QSPI pins (not exposed via any header / test point)
+  19,  // D27 is P0.19 (QSPI CLK)
+  20,  // D28 is P0.20 (QSPI CS)
+  17,  // D29 is P0.17 (QSPI Data 0)
+  22,  // D30 is P0.22 (QSPI Data 1)
+  23,  // D31 is P0.23 (QSPI Data 2)
+  21,  // D32 is P0.21 (QSPI Data 3)
+
+  // 
+   32+12,  // D33 is P1.12
+
+  32+14, // D34 is P1.14
+
+  // Thus, there are 35 defined pins
+
+  // The remaining pins are not usable:
+  //
+  //
+  // The following pins were never listed as they were considered unusable
+  //  0,      // P0.00 is XL1   (attached to 32.768kHz crystal)
+  //  1,      // P0.01 is XL2   (attached to 32.768kHz crystal)
+  // 18,      // P0.18 is RESET (attached to switch)
+  // 32,      // P1.00 is SWO   (attached to debug header)
+  // 
+  // The remaining pins are not connected (per schematic)
+  // 33,      // P1.01 is not connected per schematic
+  // 35,      // P1.03 is not connected per schematic
+  // 36,      // P1.04 is not connected per schematic
+  // 37,      // P1.05 is not connected per schematic
+  // 38,      // P1.06 is not connected per schematic
+  // 39,      // P1.07 is not connected per schematic
+  // 43,      // P1.11 is not connected per schematic
+  // 44,      // P1.12 is not connected per schematic
+  // 45,      // P1.13 is not connected per schematic
+};
+
+void initVariant()
+{
+  // LED1 & LED2
+  pinMode(PIN_LED1, OUTPUT);
+  ledOff(PIN_LED1);
+
+  pinMode(PIN_LED2, OUTPUT);
+  ledOff(PIN_LED2);
+
+  pinMode(PIN_NEOPIXEL_POWER, OUTPUT);
+  digitalWrite(PIN_NEOPIXEL_POWER, HIGH);
+}
+
diff --git a/variants/feather_nrf52840_express/variant.h b/variants/feather_nrf52840_express/variant.h
new file mode 100644
index 0000000..971607e
--- /dev/null
+++ b/variants/feather_nrf52840_express/variant.h
@@ -0,0 +1,146 @@
+ /*
+  Copyright (c) 2014-2015 Arduino LLC.  All right reserved.
+  Copyright (c) 2016 Sandeep Mistry All right reserved.
+  Copyright (c) 2018, Adafruit Industries (adafruit.com)
+
+  This library is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Lesser General Public
+  License as published by the Free Software Foundation; either
+  version 2.1 of the License, or (at your option) any later version.
+  This library is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  See the GNU Lesser General Public License for more details.
+  You should have received a copy of the GNU Lesser General Public
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+#ifndef _VARIANT_FEATHER52840_
+#define _VARIANT_FEATHER52840_
+
+/** Master clock frequency */
+#define VARIANT_MCK       (64000000ul)
+
+#define USE_LFXO      // Board uses 32khz crystal for LF
+// define USE_LFRC    // Board uses RC for LF
+
+/*----------------------------------------------------------------------------
+ *        Headers
+ *----------------------------------------------------------------------------*/
+
+#include "WVariant.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif // __cplusplus
+
+// Number of pins defined in PinDescription array
+#define PINS_COUNT           (35)
+#define NUM_DIGITAL_PINS     (35)
+#define NUM_ANALOG_INPUTS    (6) // A6 is used for battery, A7 is analog reference
+#define NUM_ANALOG_OUTPUTS   (0)
+
+// LEDs
+#define PIN_LED1             (3)
+#define PIN_LED2             (4)
+#define PIN_NEOPIXEL_POWER   (34)
+#define PIN_NEOPIXEL         (8)
+#define NEOPIXEL_NUM         1
+
+#define LED_BUILTIN          PIN_LED1
+#define LED_CONN             PIN_LED2
+
+#define LED_RED              PIN_LED1
+#define LED_BLUE             PIN_LED2
+
+#define LED_STATE_ON         1         // State when LED is litted
+
+/*
+ * Buttons
+ */
+#define PIN_BUTTON1          (1)
+#define PIN_BUTTON2          (9)
+#define PIN_BUTTON3          (23)
+#define PIN_BUTTON4          (1)
+
+/*
+ * Analog pins
+ */
+#define PIN_A0               (14)
+#define PIN_A1               (15)
+#define PIN_A2               (16)
+#define PIN_A3               (17)
+#define PIN_A4               (18)
+#define PIN_A5               (19)
+#define PIN_A6               (20)
+#define PIN_A7               (21)
+
+static const uint8_t A0  = PIN_A0 ;
+static const uint8_t A1  = PIN_A1 ;
+static const uint8_t A2  = PIN_A2 ;
+static const uint8_t A3  = PIN_A3 ;
+static const uint8_t A4  = PIN_A4 ;
+static const uint8_t A5  = PIN_A5 ;
+static const uint8_t A6  = PIN_A6 ;
+static const uint8_t A7  = PIN_A7 ;
+#define ADC_RESOLUTION    14
+
+// Other pins
+#define PIN_AREF           PIN_A7
+#define PIN_VBAT           PIN_A1
+#define PIN_NFC1           (33)
+#define PIN_NFC2           (2)
+
+static const uint8_t AREF = PIN_AREF;
+
+/*
+ * Serial interfaces
+ */
+#define PIN_SERIAL1_RX       (1)
+#define PIN_SERIAL1_TX       (0)
+
+/*
+ * SPI Interfaces
+ */
+#define SPI_INTERFACES_COUNT 1
+
+#define PIN_SPI_MISO         (5)
+#define PIN_SPI_MOSI         (24)
+#define PIN_SPI_SCK          (26)
+
+static const uint8_t SS   = (5);
+static const uint8_t MOSI = PIN_SPI_MOSI ;
+static const uint8_t MISO = PIN_SPI_MISO ;
+static const uint8_t SCK  = PIN_SPI_SCK ;
+
+/*
+ * Wire Interfaces
+ */
+#define WIRE_INTERFACES_COUNT 1
+
+#define PIN_WIRE_SDA         (19)
+#define PIN_WIRE_SCL         (17)
+
+// QSPI Pins
+#define PIN_QSPI_SCK         27
+#define PIN_QSPI_CS          28
+#define PIN_QSPI_IO0         29
+#define PIN_QSPI_IO1         30
+#define PIN_QSPI_IO2         31
+#define PIN_QSPI_IO3         32
+
+// On-board QSPI Flash
+#define EXTERNAL_FLASH_DEVICES   GD25Q16C
+#define EXTERNAL_FLASH_USE_QSPI
+
+#ifdef __cplusplus
+}
+#endif
+
+/*----------------------------------------------------------------------------
+ *        Arduino objects - C++ only
+ *----------------------------------------------------------------------------*/
+
+#endif
-- 
GitLab