From c83f712c17b6024d2cc3130db1d7bb0899e7b419 Mon Sep 17 00:00:00 2001 From: deadprogram Date: Tue, 4 Jul 2023 21:44:20 +0200 Subject: [PATCH] machine/rp2040: wait for 1000 us after flash reset to avoid issues with busy USB bus Signed-off-by: deadprogram --- .../machine_rp2040_usb_fix_usb_device_enumeration.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/machine/machine_rp2040_usb_fix_usb_device_enumeration.go b/src/machine/machine_rp2040_usb_fix_usb_device_enumeration.go index c67cfe1d..eedcc4d2 100644 --- a/src/machine/machine_rp2040_usb_fix_usb_device_enumeration.go +++ b/src/machine/machine_rp2040_usb_fix_usb_device_enumeration.go @@ -3,6 +3,7 @@ package machine import ( + "device/arm" "device/rp" ) @@ -87,6 +88,7 @@ func hw_enumeration_fix_force_ls_j() { rp.USBCTRL_REGS.USB_MUXING.Set(rp.USBCTRL_REGS_USB_MUXING_TO_DIGITAL_PAD | rp.USBCTRL_REGS_USB_MUXING_SOFTCON) // LS_J is now forced but while loop here just to check + waitCycles(125000) // if timer pool disabled, or no timer available, have to busy wait. hw_enumeration_fix_finish() @@ -109,3 +111,10 @@ func hw_enumeration_fix_finish() { // Restore the pad ctrl value padsBank0.io[dp].Set(padCtrlPrev) } + +func waitCycles(n int) { + for n > 0 { + arm.Asm("nop") + n-- + } +}