From f5e933cd4d418b0dffdbc4e795a417026ced778a Mon Sep 17 00:00:00 2001 From: Xudong Zheng <7pkvm5aw@slicealias.com> Date: Thu, 1 Feb 2024 12:54:58 -0500 Subject: machine/rp2040: set XOSC startup delay multiplier XOSC requires additional time to stablize on certain RP2040 boards. Signed-off-by: Xudong Zheng <7pkvm5aw@slicealias.com> --- src/machine/machine_rp2040_xosc.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/machine/machine_rp2040_xosc.go b/src/machine/machine_rp2040_xosc.go index c3d6d713a..0acac1f1e 100644 --- a/src/machine/machine_rp2040_xosc.go +++ b/src/machine/machine_rp2040_xosc.go @@ -8,6 +8,11 @@ import ( "unsafe" ) +// On some boards, the XOSC can take longer than usual to stabilize. On such +// boards, this is needed to avoid a hard fault on boot/reset. Refer to +// PICO_XOSC_STARTUP_DELAY_MULTIPLIER in the Pico SDK for additional details. +const XOSC_STARTUP_DELAY_MULTIPLIER = 64 + type xoscType struct { ctrl volatile.Register32 status volatile.Register32 @@ -30,7 +35,7 @@ func (osc *xoscType) init() { osc.ctrl.Set(rp.XOSC_CTRL_FREQ_RANGE_1_15MHZ) // Set xosc startup delay - delay := (((xoscFreq * MHz) / 1000) + 128) / 256 + delay := (((xoscFreq * MHz) / 1000) + 128) / 256 * XOSC_STARTUP_DELAY_MULTIPLIER osc.startup.Set(uint32(delay)) // Set the enable bit now that we have set freq range and startup delay -- cgit v1.2.3