diff --git a/soc/arm/nordic_nrf/nrf51/Kconfig.defconfig.series b/soc/arm/nordic_nrf/nrf51/Kconfig.defconfig.series index 48a67407e70..ee4873c2c49 100644 --- a/soc/arm/nordic_nrf/nrf51/Kconfig.defconfig.series +++ b/soc/arm/nordic_nrf/nrf51/Kconfig.defconfig.series @@ -20,6 +20,9 @@ config SYS_CLOCK_HW_CYCLES_PER_SEC config SYS_POWER_MANAGEMENT default y +config ARCH_HAS_CUSTOM_BUSY_WAIT + default y + config NUM_IRQS int default 26 diff --git a/soc/arm/nordic_nrf/nrf51/soc.c b/soc/arm/nordic_nrf/nrf51/soc.c index d37d22cc050..a5310328d75 100644 --- a/soc/arm/nordic_nrf/nrf51/soc.c +++ b/soc/arm/nordic_nrf/nrf51/soc.c @@ -15,6 +15,8 @@ #include #include +#include +#include #ifdef CONFIG_RUNTIME_NMI extern void _NmiInit(void); @@ -48,4 +50,16 @@ static int nordicsemi_nrf51_init(struct device *arg) return 0; } +#define DELAY_CALL_OVERHEAD_US 2 + +void z_arch_busy_wait(u32_t time_us) +{ + if (time_us <= DELAY_CALL_OVERHEAD_US) { + return; + } + + time_us -= DELAY_CALL_OVERHEAD_US; + nrfx_coredep_delay_us(time_us); +} + SYS_INIT(nordicsemi_nrf51_init, PRE_KERNEL_1, 0); diff --git a/soc/arm/nordic_nrf/nrf52/Kconfig.defconfig.series b/soc/arm/nordic_nrf/nrf52/Kconfig.defconfig.series index 39349577163..380387c1666 100644 --- a/soc/arm/nordic_nrf/nrf52/Kconfig.defconfig.series +++ b/soc/arm/nordic_nrf/nrf52/Kconfig.defconfig.series @@ -16,6 +16,9 @@ config SYS_CLOCK_HW_CYCLES_PER_SEC int default 32768 +config ARCH_HAS_CUSTOM_BUSY_WAIT + default y + config SYS_POWER_MANAGEMENT default y diff --git a/soc/arm/nordic_nrf/nrf52/soc.c b/soc/arm/nordic_nrf/nrf52/soc.c index ffffd1fc5a6..4c46dd28a23 100644 --- a/soc/arm/nordic_nrf/nrf52/soc.c +++ b/soc/arm/nordic_nrf/nrf52/soc.c @@ -15,6 +15,8 @@ #include #include #include +#include +#include #ifdef CONFIG_RUNTIME_NMI extern void _NmiInit(void); @@ -71,4 +73,9 @@ static int nordicsemi_nrf52_init(struct device *arg) return 0; } +void z_arch_busy_wait(u32_t time_us) +{ + nrfx_coredep_delay_us(time_us); +} + SYS_INIT(nordicsemi_nrf52_init, PRE_KERNEL_1, 0);