From 3ef784b83027beb22779375f730d188407859dc7 Mon Sep 17 00:00:00 2001 From: Martin Ling Date: Fri, 6 Feb 2026 17:59:25 +0000 Subject: [PATCH] Add delay loop implementation for M0 core. --- firmware/common/delay.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/firmware/common/delay.c b/firmware/common/delay.c index 8d2045ed..ceb7693e 100644 --- a/firmware/common/delay.c +++ b/firmware/common/delay.c @@ -32,6 +32,7 @@ void delay(uint32_t duration) void delay_us_at_mhz(uint32_t us, uint32_t mhz) { +#if defined(LPC43XX_M4) // The loop below takes 3 cycles per iteration. uint32_t loop_iterations = (us * mhz) / 3; asm volatile("start%=:\n" @@ -39,4 +40,15 @@ void delay_us_at_mhz(uint32_t us, uint32_t mhz) " bpl start%=\n" // 2 cycles : : [ITERATIONS] "r"(loop_iterations)); +#elif defined(LPC43XX_M0) + // The loop below takes 4 cycles per iteration. + uint32_t loop_iterations = (us * mhz) / 4; + asm volatile("start%=:\n" + " sub %[ITERATIONS], #1\n" // 1 cycle + " bpl start%=\n" // 3 cycles + : + : [ITERATIONS] "r"(loop_iterations)); +#else + #error "No delay loop implementation" +#endif }