Merge pull request #2083 from dhalbert/no-32khz-xtal
Fix CPBlue LFCLKSRC; CPB has no status neopixel
This commit is contained in:
commit
18f441ae35
|
@ -34,10 +34,11 @@
|
|||
#define FLASH_SIZE (0x100000)
|
||||
#define FLASH_PAGE_SIZE (4096)
|
||||
|
||||
#define MICROPY_HW_NEOPIXEL (&pin_P0_13)
|
||||
|
||||
#define MICROPY_HW_LED_STATUS (&pin_P1_14)
|
||||
|
||||
// Unusually, board does not have a 32 kHz xtal. Nearly all boards do.
|
||||
#define BOARD_HAS_32KHZ_XTAL (0)
|
||||
|
||||
#if QSPI_FLASH_FILESYSTEM
|
||||
#define MICROPY_QSPI_DATA0 NRF_GPIO_PIN_MAP(0, 21)
|
||||
#define MICROPY_QSPI_DATA1 NRF_GPIO_PIN_MAP(0, 23)
|
||||
|
@ -60,8 +61,6 @@
|
|||
|
||||
#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
|
||||
|
||||
#define BOARD_HAS_CRYSTAL 1
|
||||
|
||||
#define DEFAULT_I2C_BUS_SCL (&pin_P0_04)
|
||||
#define DEFAULT_I2C_BUS_SDA (&pin_P0_05)
|
||||
|
||||
|
|
|
@ -39,37 +39,26 @@
|
|||
#include "supervisor/usb.h"
|
||||
#include "shared-bindings/bleio/Adapter.h"
|
||||
#include "shared-bindings/bleio/Address.h"
|
||||
#include "mpconfigboard.h" // for BOARD_HAS_CRYSTAL
|
||||
|
||||
STATIC void softdevice_assert_handler(uint32_t id, uint32_t pc, uint32_t info) {
|
||||
mp_raise_msg_varg(&mp_type_AssertionError,
|
||||
translate("Soft device assert, id: 0x%08lX, pc: 0x%08lX"), id, pc);
|
||||
}
|
||||
|
||||
static inline bool board_has_crystal(void) {
|
||||
#ifdef BOARD_HAS_CRYSTAL
|
||||
return BOARD_HAS_CRYSTAL == 1;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
STATIC uint32_t ble_stack_enable(void) {
|
||||
nrf_clock_lf_cfg_t clock_config;
|
||||
|
||||
// Set low-frequency clock source to be either an external 32.768kHz crystal if one exists on the board
|
||||
// or an internal 32.768 kHz RC oscillator otherwise
|
||||
if (board_has_crystal()) {
|
||||
clock_config = (nrf_clock_lf_cfg_t){
|
||||
.source = NRF_CLOCK_LF_SRC_XTAL,
|
||||
.accuracy = NRF_CLOCK_LF_ACCURACY_20_PPM};
|
||||
} else {
|
||||
clock_config = (nrf_clock_lf_cfg_t){
|
||||
.source = NRF_CLOCK_LF_SRC_RC,
|
||||
.rc_ctiv = 16,
|
||||
.rc_temp_ctiv = 2,
|
||||
.accuracy = NRF_CLOCK_LF_ACCURACY_250_PPM};
|
||||
}
|
||||
nrf_clock_lf_cfg_t clock_config = {
|
||||
#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);
|
||||
if (err_code != NRF_SUCCESS)
|
||||
|
|
|
@ -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"));
|
||||
|
|
|
@ -53,6 +53,11 @@
|
|||
|
||||
#include "py/circuitpy_mpconfig.h"
|
||||
|
||||
#ifndef BOARD_HAS_32KHZ_XTAL
|
||||
// Assume crystal is present, which is the most common case.
|
||||
#define BOARD_HAS_32KHZ_XTAL (1)
|
||||
#endif
|
||||
|
||||
#define MICROPY_PORT_ROOT_POINTERS \
|
||||
CIRCUITPY_COMMON_ROOT_POINTERS \
|
||||
ble_drv_evt_handler_entry_t* ble_drv_evt_handler_entries; \
|
||||
|
|
|
@ -26,21 +26,15 @@
|
|||
*/
|
||||
|
||||
#include "nrfx.h"
|
||||
#include "mpconfigboard.h" // for BOARD_HAS_CRYSTAL
|
||||
|
||||
static inline bool board_has_crystal(void) {
|
||||
#ifdef BOARD_HAS_CRYSTAL
|
||||
return BOARD_HAS_CRYSTAL == 1;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
#include "mpconfigport.h"
|
||||
|
||||
void nrf_peripherals_clocks_init(void) {
|
||||
// Set low-frequency clock source to be either an external 32.768kHz crystal if one exists on the board
|
||||
// or an internal 32.768 kHz RC oscillator otherwise
|
||||
uint32_t clock_src = board_has_crystal() ? CLOCK_LFCLKSRC_SRC_Xtal : CLOCK_LFCLKSRC_SRC_RC;
|
||||
NRF_CLOCK->LFCLKSRC = (uint32_t)((clock_src << CLOCK_LFCLKSRC_SRC_Pos) & CLOCK_LFCLKSRC_SRC_Msk);
|
||||
|
||||
#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.
|
||||
|
|
Loading…
Reference in New Issue