summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Halbert <halbert@halwitz.org>2019-10-28 21:08:53 -0400
committerDan Halbert <halbert@halwitz.org>2019-10-28 21:08:53 -0400
commite35eb08f1d91f4db7a65eea0987a8cdc4d1e1d65 (patch)
treee9a1b3c1b53ff56dfacb986c053a5dcb94b2c738
parent56ac41fabf20873192df3d67866969418fd4d5d6 (diff)
nrf: allocate two I2C on CPB
-rw-r--r--ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk7
-rw-r--r--ports/nrf/nrfx_config.h33
2 files changed, 31 insertions, 9 deletions
diff --git a/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk b/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk
index dbb32629c..d53e486f9 100644
--- a/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk
+++ b/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk
@@ -24,3 +24,10 @@ NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
QSPI_FLASH_FILESYSTEM = 1
EXTERNAL_FLASH_DEVICE_COUNT = 1
EXTERNAL_FLASH_DEVICES = "GD25Q16C"
+
+# Allocate two, not just one I2C peripheral for CPB, so that we have both
+# on-board and off-board I2C available.
+# When SPIM3 becomes available we'll be able to have two I2C and two SPI peripherals.
+# We use a CFLAGS define here because there are include order issues
+# if we try to include "mpconfigport.h" into nrfx_config.h .
+CFLAGS += -DCIRCUITPY_NRF_NUM_I2C=2
diff --git a/ports/nrf/nrfx_config.h b/ports/nrf/nrfx_config.h
index 8fa6721e2..cafec6aa1 100644
--- a/ports/nrf/nrfx_config.h
+++ b/ports/nrf/nrfx_config.h
@@ -5,12 +5,9 @@
#define NRFX_POWER_ENABLED 1
#define NRFX_POWER_CONFIG_IRQ_PRIORITY 7
-// Turn on nrfx supported workarounds for errata in Rev1/Rev2 of nRF52832
-#ifdef NRF52832_XXAA
- #define NRFX_SPIS_NRF52_ANOMALY_109_WORKAROUND_ENABLED 1
-#endif
-
-// NOTE: THIS WORKAROUND CAUSES BLE CODE TO CRASH; tested on 2019-03-11.
+// NOTE: THIS WORKAROUND CAUSES BLE CODE TO CRASH.
+// It doesn't work with the SoftDevice.
+// See https://devzone.nordicsemi.com/f/nordic-q-a/33982/sdk-15-software-crash-during-spi-session
// Turn on nrfx supported workarounds for errata in Rev1 of nRF52840
#ifdef NRF52840_XXAA
// #define NRFX_SPIM3_NRF52840_ANOMALY_198_WORKAROUND_ENABLED 1
@@ -24,11 +21,26 @@
// so out of the box TWIM0/SPIM0 and TWIM1/SPIM1 cannot be shared
// between common-hal/busio/I2C.c and SPI.c.
// We could write an interrupt handler that checks whether it's
-// being used for SPI or I2C, but perhaps two I2C's and 1-2 SPI's are good enough for now.
+// being used for SPI or I2C, but perhaps one I2C and two SPI or two I2C and one SPI
+// are good enough for now.
+
+// CIRCUITPY_NRF_NUM_I2C is 1 or 2 to choose how many I2C (TWIM) peripherals
+// to provide.
+// This can go away once we have SPIM3 working: then we can have two
+// I2C and two SPI.
+#ifndef CIRCUITPY_NRF_NUM_I2C
+#define CIRCUITPY_NRF_NUM_I2C 1
+#endif
+
+#if CIRCUITPY_NRF_NUM_I2C != 1 && CIRCUITPY_NRF_NUM_I2C != 2
+# error CIRCUITPY_NRF_NUM_I2C must be 1 or 2
+#endif
// Enable SPIM1, SPIM2 and SPIM3 (if available)
// No conflict with TWIM0.
+#if CIRCUITPY_NRF_NUM_I2C == 1
#define NRFX_SPIM1_ENABLED 1
+#endif
#define NRFX_SPIM2_ENABLED 1
// DON'T ENABLE SPIM3 DUE TO ANOMALY WORKAROUND FAILURE (SEE ABOVE).
// #ifdef NRF52840_XXAA
@@ -45,10 +57,13 @@
// QSPI
#define NRFX_QSPI_ENABLED 1
-// TWI aka. I2C; enable a single bus: TWIM0 (no conflict with SPIM1 and SPIM2)
+// TWI aka. I2C; always enable TWIM0 (no conflict with SPIM1 and SPIM2)
#define NRFX_TWIM_ENABLED 1
#define NRFX_TWIM0_ENABLED 1
-//#define NRFX_TWIM1_ENABLED 1
+
+#if CIRCUITPY_NRF_NUM_I2C == 2
+#define NRFX_TWIM1_ENABLED 1
+#endif
#define NRFX_TWIM_DEFAULT_CONFIG_IRQ_PRIORITY 7
#define NRFX_TWIM_DEFAULT_CONFIG_FREQUENCY NRF_TWIM_FREQ_400K