summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2016-10-30 03:02:07 +0300
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2016-10-30 03:02:07 +0300
commit76146b3d9ab0ab88ce0f0d1cfa0235ec0758a4a9 (patch)
tree2cdb6fe084bd8e19831fd165f9fcbf49f7885b7c
parent1ba4db5685b0f5a0b06020a01cf47aa952a52588 (diff)
downloadmicropython-76146b3d9ab0ab88ce0f0d1cfa0235ec0758a4a9.tar.gz
micropython-76146b3d9ab0ab88ce0f0d1cfa0235ec0758a4a9.zip
extmod/utime_mphal: Allow ticks functions period be configurable by a port.
Using MICROPY_PY_UTIME_TICKS_PERIOD config var.
-rw-r--r--extmod/utime_mphal.c8
-rw-r--r--py/mpconfig.h10
2 files changed, 14 insertions, 4 deletions
diff --git a/extmod/utime_mphal.c b/extmod/utime_mphal.c
index 609a0da84a..1a32180cf5 100644
--- a/extmod/utime_mphal.c
+++ b/extmod/utime_mphal.c
@@ -71,17 +71,17 @@ STATIC mp_obj_t time_sleep_us(mp_obj_t arg) {
MP_DEFINE_CONST_FUN_OBJ_1(mp_utime_sleep_us_obj, time_sleep_us);
STATIC mp_obj_t time_ticks_ms(void) {
- return MP_OBJ_NEW_SMALL_INT(mp_hal_ticks_ms() & MP_SMALL_INT_POSITIVE_MASK);
+ return MP_OBJ_NEW_SMALL_INT(mp_hal_ticks_ms() & (MICROPY_PY_UTIME_TICKS_PERIOD - 1));
}
MP_DEFINE_CONST_FUN_OBJ_0(mp_utime_ticks_ms_obj, time_ticks_ms);
STATIC mp_obj_t time_ticks_us(void) {
- return MP_OBJ_NEW_SMALL_INT(mp_hal_ticks_us() & MP_SMALL_INT_POSITIVE_MASK);
+ return MP_OBJ_NEW_SMALL_INT(mp_hal_ticks_us() & (MICROPY_PY_UTIME_TICKS_PERIOD - 1));
}
MP_DEFINE_CONST_FUN_OBJ_0(mp_utime_ticks_us_obj, time_ticks_us);
STATIC mp_obj_t time_ticks_cpu(void) {
- return MP_OBJ_NEW_SMALL_INT(mp_hal_ticks_cpu() & MP_SMALL_INT_POSITIVE_MASK);
+ return MP_OBJ_NEW_SMALL_INT(mp_hal_ticks_cpu() & (MICROPY_PY_UTIME_TICKS_PERIOD - 1));
}
MP_DEFINE_CONST_FUN_OBJ_0(mp_utime_ticks_cpu_obj, time_ticks_cpu);
@@ -97,7 +97,7 @@ STATIC mp_obj_t time_ticks_add(mp_obj_t ticks_in, mp_obj_t delta_in) {
// we assume that first argument come from ticks_xx so is small int
uint32_t ticks = MP_OBJ_SMALL_INT_VALUE(ticks_in);
uint32_t delta = (uint32_t)mp_obj_get_int(delta_in);
- return MP_OBJ_NEW_SMALL_INT((ticks + delta) & MP_SMALL_INT_POSITIVE_MASK);
+ return MP_OBJ_NEW_SMALL_INT((ticks + delta) & (MICROPY_PY_UTIME_TICKS_PERIOD - 1));
}
MP_DEFINE_CONST_FUN_OBJ_2(mp_utime_ticks_add_obj, time_ticks_add);
diff --git a/py/mpconfig.h b/py/mpconfig.h
index dcdaffe0f4..fce9976928 100644
--- a/py/mpconfig.h
+++ b/py/mpconfig.h
@@ -866,6 +866,16 @@ typedef double mp_float_t;
#define MICROPY_PY_UTIME_MP_HAL (0)
#endif
+// Period of values returned by utime.ticks_ms(), ticks_us(), ticks_cpu()
+// functions. Should be power of two. All functions above use the same
+// period, so if underlying hardware/API has different periods, the
+// minimum of them should be used. The value below is the maximum value
+// this parameter can take (corresponding to 30 bit tick values on 32-bit
+// system).
+#ifndef MICROPY_PY_UTIME_TICKS_PERIOD
+#define MICROPY_PY_UTIME_TICKS_PERIOD (MP_SMALL_INT_POSITIVE_MASK + 1)
+#endif
+
// Whether to provide "_thread" module
#ifndef MICROPY_PY_THREAD
#define MICROPY_PY_THREAD (0)