From de824e188486003adff85348c954304c813c8847 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Sat, 1 Aug 2020 18:39:34 +0200 Subject: [PATCH] nrf52: use low-frequency crystal oscillator when available I couldn't measure a difference in my setup, apparently my multimeter is not able to handle the high-to-low current transition when entering sleep mode. But it _should_ reduce current consumption a little bit. --- adapter_nrf528xx.go | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/adapter_nrf528xx.go b/adapter_nrf528xx.go index 1c02ca7..9fd3a30 100644 --- a/adapter_nrf528xx.go +++ b/adapter_nrf528xx.go @@ -16,23 +16,30 @@ void assertHandler(void); */ import "C" -import "unsafe" +import ( + "machine" + "unsafe" +) //export assertHandler func assertHandler() { println("SoftDevice assert") } -var clockConfig C.nrf_clock_lf_cfg_t = C.nrf_clock_lf_cfg_t{ - source: C.NRF_CLOCK_LF_SRC_RC, - rc_ctiv: 16, - rc_temp_ctiv: 2, - accuracy: C.NRF_CLOCK_LF_ACCURACY_500_PPM, +var clockConfigXtal C.nrf_clock_lf_cfg_t = C.nrf_clock_lf_cfg_t{ + source: C.NRF_CLOCK_LF_SRC_XTAL, + rc_ctiv: 0, + rc_temp_ctiv: 0, + accuracy: C.NRF_CLOCK_LF_ACCURACY_250_PPM, } func (a *Adapter) enable() error { // Enable the SoftDevice. - errCode := C.sd_softdevice_enable(&clockConfig, C.nrf_fault_handler_t(C.assertHandler)) + var clockConfig *C.nrf_clock_lf_cfg_t + if machine.HasLowFrequencyCrystal { + clockConfig = &clockConfigXtal + } + errCode := C.sd_softdevice_enable(clockConfig, C.nrf_fault_handler_t(C.assertHandler)) if errCode != 0 { return Error(errCode) }