summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Halbert <halbert@halwitz.org>2019-08-22 01:04:00 -0400
committerDan Halbert <halbert@halwitz.org>2019-08-22 01:04:00 -0400
commitd94023e9b310731807785ffc6f4249faf4912554 (patch)
tree5b6ee3b7c8b391b61816b32866eaf986406e9feb
parent42143ca0568c69bec6c60da3ae9a1e8f3ca106ff (diff)
Fix CPBlue LFCLKSRC; CPB has no status neopixel
-rw-r--r--ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.h2
-rw-r--r--ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk3
-rw-r--r--ports/nrf/common-hal/bleio/Adapter.c13
-rw-r--r--ports/nrf/common-hal/bleio/Characteristic.c2
-rw-r--r--ports/nrf/mpconfigport.mk5
-rw-r--r--ports/nrf/peripherals/nrf/clocks.c7
6 files changed, 25 insertions, 7 deletions
diff --git a/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.h b/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.h
index 04c7e8d60..f618a652c 100644
--- a/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.h
+++ b/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.h
@@ -34,8 +34,6 @@
#define FLASH_SIZE (0x100000)
#define FLASH_PAGE_SIZE (4096)
-#define MICROPY_HW_NEOPIXEL (&pin_P0_13)
-
#define MICROPY_HW_LED_STATUS (&pin_P1_14)
#if QSPI_FLASH_FILESYSTEM
diff --git a/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk b/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk
index dbb32629c..44c385c5b 100644
--- a/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk
+++ b/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk
@@ -10,6 +10,9 @@ MCU_CHIP = nrf52840
SD ?= s140
SOFTDEV_VERSION ?= 6.1.0
+# Unusually, board does not have a 32 kHz xtal.
+BOARD_HAS_32KHZ_XTAL = 0
+
BOOT_SETTING_ADDR = 0xFF000
ifeq ($(SD),)
diff --git a/ports/nrf/common-hal/bleio/Adapter.c b/ports/nrf/common-hal/bleio/Adapter.c
index 936dfcb9b..463e5d25b 100644
--- a/ports/nrf/common-hal/bleio/Adapter.c
+++ b/ports/nrf/common-hal/bleio/Adapter.c
@@ -47,8 +47,17 @@ STATIC void softdevice_assert_handler(uint32_t id, uint32_t pc, uint32_t info) {
STATIC uint32_t ble_stack_enable(void) {
nrf_clock_lf_cfg_t clock_config = {
- .source = NRF_CLOCK_LF_SRC_XTAL,
- .accuracy = NRF_CLOCK_LF_ACCURACY_20_PPM
+#if BOARD_HAS_32KHZ_XTAL
+ .source = NRF_CLOCK_LF_SRC_XTAL,
+ .rc_ctiv = 0,
+ .rc_temp_ctiv = 0,
+ .accuracy = NRF_CLOCK_LF_ACCURACY_20_PPM
+#else
+ .source = NRF_CLOCK_LF_SRC_RC,
+ .rc_ctiv = 16,
+ .rc_temp_ctiv = 2,
+ .accuracy = NRF_CLOCK_LF_ACCURACY_250_PPM
+#endif
};
uint32_t err_code = sd_softdevice_enable(&clock_config, softdevice_assert_handler);
diff --git a/ports/nrf/common-hal/bleio/Characteristic.c b/ports/nrf/common-hal/bleio/Characteristic.c
index 45e8d2495..604d24d73 100644
--- a/ports/nrf/common-hal/bleio/Characteristic.c
+++ b/ports/nrf/common-hal/bleio/Characteristic.c
@@ -183,7 +183,7 @@ void common_hal_bleio_characteristic_set_value(bleio_characteristic_obj_t *self,
(self->props & CHAR_PROP_WRITE_NO_RESPONSE));
} else {
if (self->fixed_length && bufinfo->len != self->max_length) {
- mp_raise_ValueError(translate("Value length required fixed length"));
+ mp_raise_ValueError(translate("Value length != required fixed length"));
}
if (bufinfo->len > self->max_length) {
mp_raise_ValueError(translate("Value length > max_length"));
diff --git a/ports/nrf/mpconfigport.mk b/ports/nrf/mpconfigport.mk
index 55920b3f4..11058cd7e 100644
--- a/ports/nrf/mpconfigport.mk
+++ b/ports/nrf/mpconfigport.mk
@@ -28,6 +28,11 @@ CIRCUITPY_RTC = 1
# frequencyio not yet implemented
CIRCUITPY_FREQUENCYIO = 0
+ifndef BOARD_HAS_32KHZ_XTAL
+# Assume crystal is present, which is the most common case.
+BOARD_HAS_32KHZ_XTAL = 1
+endif
+
# CircuitPython doesn't yet support NFC so force the NFC antenna pins to be GPIO.
# See https://github.com/adafruit/circuitpython/issues/1300
# Defined here because system_nrf52840.c doesn't #include any of our own include files.
diff --git a/ports/nrf/peripherals/nrf/clocks.c b/ports/nrf/peripherals/nrf/clocks.c
index 4acb878db..b8f231385 100644
--- a/ports/nrf/peripherals/nrf/clocks.c
+++ b/ports/nrf/peripherals/nrf/clocks.c
@@ -28,9 +28,12 @@
#include "nrfx.h"
void nrf_peripherals_clocks_init(void) {
- // Set low-frequency clock source to be crystal. If there's a crystalless board, this will need to be
- // generalized.
+
+#if BOARD_HAS_32KHZ_XTAL
NRF_CLOCK->LFCLKSRC = (uint32_t)((CLOCK_LFCLKSRC_SRC_Xtal << CLOCK_LFCLKSRC_SRC_Pos) & CLOCK_LFCLKSRC_SRC_Msk);
+#else
+ NRF_CLOCK->LFCLKSRC = (uint32_t)((CLOCK_LFCLKSRC_SRC_RC << CLOCK_LFCLKSRC_SRC_Pos) & CLOCK_LFCLKSRC_SRC_Msk);
+#endif
NRF_CLOCK->TASKS_LFCLKSTART = 1UL;
// Wait for clocks to start.