summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <thach@tinyusb.org>2018-07-06 15:48:01 +0700
committerhathach <thach@tinyusb.org>2018-07-06 15:48:01 +0700
commit3e319694aa9aca7689565ef725ea39cf7d305a0d (patch)
treeb283abe775f4411045710382c0fe738eb3a5581e
parent948ddf846326e6b75ac46b75dc1423d6c34541dd (diff)
mp_hal_delay_ms() to call background task
remove hal_time.c
-rw-r--r--ports/nrf/Makefile1
-rw-r--r--ports/nrf/mphalport.c96
2 files changed, 95 insertions, 2 deletions
diff --git a/ports/nrf/Makefile b/ports/nrf/Makefile
index 51179e2ab..b2b837eb5 100644
--- a/ports/nrf/Makefile
+++ b/ports/nrf/Makefile
@@ -95,7 +95,6 @@ LIBS += -L $(dir $(LIBGCC_FILE_NAME)) -lgcc
SRC_HAL = $(addprefix hal/,\
hal_uart.c \
- hal_time.c \
hal_rng.c \
)
diff --git a/ports/nrf/mphalport.c b/ports/nrf/mphalport.c
index 85e286755..8846c2b30 100644
--- a/ports/nrf/mphalport.c
+++ b/ports/nrf/mphalport.c
@@ -30,9 +30,11 @@
#include "py/mpstate.h"
#include "py/mphal.h"
#include "py/mperrno.h"
-#include "hal_uart.h"
+
+#include "tick.h"
#if !defined( NRF52840_XXAA) || ( defined(CFG_HWUART_FOR_SERIAL) && CFG_HWUART_FOR_SERIAL == 1 )
+#include "hal_uart.h"
#define UART_INSTANCE UART_BASE(0)
@@ -154,5 +156,97 @@ void mp_hal_stdout_tx_str(const char *str) {
#endif
+void mp_hal_delay_ms(mp_uint_t delay) {
+ uint64_t start_tick = ticks_ms;
+ uint64_t duration = 0;
+ while (duration < delay) {
+ #ifdef MICROPY_VM_HOOK_LOOP
+ MICROPY_VM_HOOK_LOOP
+ #endif
+ // Check to see if we've been CTRL-Ced by autoreload or the user.
+ if(MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception))) {
+ break;
+ }
+ duration = (ticks_ms - start_tick);
+ // TODO(tannewt): Go to sleep for a little while while we wait.
+ }
+}
+
+void mp_hal_delay_us(mp_uint_t us)
+{
+ register uint32_t delay __ASM ("r0") = us;
+ __ASM volatile (
+#ifdef NRF51
+ ".syntax unified\n"
+#endif
+ "1:\n"
+ " SUBS %0, %0, #1\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+#ifdef NRF52
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+ " NOP\n"
+#endif
+ " BNE 1b\n"
+#ifdef NRF51
+ ".syntax divided\n"
+#endif
+ : "+r" (delay));
+}
+