diff --git a/Documentation/pycardium/utime.rst b/Documentation/pycardium/utime.rst index 30af11ef7dcd9e9ae9da6dcd877621a4dc7d3d89..b28d7b11bd6fe6d56770048b2711df928ced0f0e 100644 --- a/Documentation/pycardium/utime.rst +++ b/Documentation/pycardium/utime.rst @@ -45,6 +45,20 @@ alarm. .. versionadded:: 1.11 +.. py:function:: ticks_ms() + + Return processor ticks (converted to milliseconds) since Pycardium startup. + + This function should be the preferred method for timing and profiling + because it does not need an API call and thus is very fast. + +.. py:function:: ticks_us() + + Return processor ticks (converted to microseconds) since Pycardium startup. + + This function should be the preferred method for timing and profiling + because it does not need an API call and thus is very fast. + .. py:function:: unix_time() Return the current unix time as seconds since the epoch. diff --git a/pycardium/modules/utime.c b/pycardium/modules/utime.c index f6fd365bafef1c311feff286a09d9630cb1deff5..d29708205e24a1b6f2c16e8b64b6d340feedb205 100644 --- a/pycardium/modules/utime.c +++ b/pycardium/modules/utime.c @@ -202,6 +202,8 @@ static const mp_rom_map_elem_t time_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_sleep), MP_ROM_PTR(&mp_utime_sleep_obj) }, { MP_ROM_QSTR(MP_QSTR_sleep_ms), MP_ROM_PTR(&mp_utime_sleep_ms_obj) }, { MP_ROM_QSTR(MP_QSTR_sleep_us), MP_ROM_PTR(&mp_utime_sleep_us_obj) }, + { MP_ROM_QSTR(MP_QSTR_ticks_ms), MP_ROM_PTR(&mp_utime_ticks_ms_obj) }, + { MP_ROM_QSTR(MP_QSTR_ticks_us), MP_ROM_PTR(&mp_utime_ticks_us_obj) }, { MP_ROM_QSTR(MP_QSTR_alarm), MP_ROM_PTR(&time_alarm_obj) }, #if 0 /* TODO: Implement those */ diff --git a/pycardium/mphalport.c b/pycardium/mphalport.c index 3e0c6de185c44d2a56d13e2164f46255b29ad852..95954bba61af875201cd0806eb1ff52327420b53 100644 --- a/pycardium/mphalport.c +++ b/pycardium/mphalport.c @@ -271,7 +271,12 @@ void mp_hal_delay_us(mp_uint_t us) mp_uint_t mp_hal_ticks_ms(void) { - return 0; + return (mp_uint_t)(systick_get_us() / 1000); +} + +mp_uint_t mp_hal_ticks_us(void) +{ + return (mp_uint_t)systick_get_us(); } /******************************************************************************