Skip to content

Commit f059563

Browse files
committed
stmhal/modutime: Refactor to use extmod/utime_mphal.c.
This includes making sure that utime_mphal's sleep_ms() and sleep_us() don't sleep on negative arguments.
1 parent a972844 commit f059563

File tree

4 files changed

+12
-61
lines changed

4 files changed

+12
-61
lines changed

stmhal/modpyb.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
#include "portmodules.h"
6363
#include "modmachine.h"
6464
#include "extmod/fsusermount.h"
65+
#include "extmod/utime_mphal.h"
6566

6667
/// \function millis()
6768
/// Returns the number of milliseconds since the board was last reset.
@@ -162,8 +163,8 @@ STATIC const mp_map_elem_t pyb_module_globals_table[] = {
162163
{ MP_OBJ_NEW_QSTR(MP_QSTR_elapsed_millis), (mp_obj_t)&pyb_elapsed_millis_obj },
163164
{ MP_OBJ_NEW_QSTR(MP_QSTR_micros), (mp_obj_t)&pyb_micros_obj },
164165
{ MP_OBJ_NEW_QSTR(MP_QSTR_elapsed_micros), (mp_obj_t)&pyb_elapsed_micros_obj },
165-
{ MP_OBJ_NEW_QSTR(MP_QSTR_delay), (mp_obj_t)&time_sleep_ms_obj },
166-
{ MP_OBJ_NEW_QSTR(MP_QSTR_udelay), (mp_obj_t)&time_sleep_us_obj },
166+
{ MP_OBJ_NEW_QSTR(MP_QSTR_delay), (mp_obj_t)&mp_utime_sleep_ms_obj },
167+
{ MP_OBJ_NEW_QSTR(MP_QSTR_udelay), (mp_obj_t)&mp_utime_sleep_us_obj },
167168
{ MP_OBJ_NEW_QSTR(MP_QSTR_sync), (mp_obj_t)&mod_os_sync_obj },
168169
{ MP_OBJ_NEW_QSTR(MP_QSTR_mount), (mp_obj_t)&fsuser_mount_obj },
169170

stmhal/modutime.c

Lines changed: 7 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "py/nlr.h"
3232
#include "py/smallint.h"
3333
#include "py/obj.h"
34+
#include "extmod/utime_mphal.h"
3435
#include "systick.h"
3536
#include "timeutils.h"
3637
#include "portmodules.h"
@@ -129,51 +130,6 @@ STATIC mp_obj_t time_time(void) {
129130
}
130131
MP_DEFINE_CONST_FUN_OBJ_0(time_time_obj, time_time);
131132

132-
/// \function sleep(seconds)
133-
/// Sleep for the given number of seconds. Seconds can be a floating-point number to
134-
/// sleep for a fractional number of seconds.
135-
STATIC mp_obj_t time_sleep(mp_obj_t seconds_o) {
136-
#if MICROPY_PY_BUILTINS_FLOAT
137-
if (MP_OBJ_IS_INT(seconds_o)) {
138-
#endif
139-
HAL_Delay(1000 * mp_obj_get_int(seconds_o));
140-
#if MICROPY_PY_BUILTINS_FLOAT
141-
} else {
142-
HAL_Delay((uint32_t)(1000 * mp_obj_get_float(seconds_o)));
143-
}
144-
#endif
145-
return mp_const_none;
146-
}
147-
MP_DEFINE_CONST_FUN_OBJ_1(time_sleep_obj, time_sleep);
148-
149-
STATIC mp_obj_t time_sleep_ms(mp_obj_t ms_in) {
150-
mp_int_t ms = mp_obj_get_int(ms_in);
151-
if (ms > 0) {
152-
HAL_Delay(ms);
153-
}
154-
return mp_const_none;
155-
}
156-
MP_DEFINE_CONST_FUN_OBJ_1(time_sleep_ms_obj, time_sleep_ms);
157-
158-
STATIC mp_obj_t time_sleep_us(mp_obj_t usec_in) {
159-
mp_int_t usec = mp_obj_get_int(usec_in);
160-
if (usec > 0) {
161-
sys_tick_udelay(usec);
162-
}
163-
return mp_const_none;
164-
}
165-
MP_DEFINE_CONST_FUN_OBJ_1(time_sleep_us_obj, time_sleep_us);
166-
167-
STATIC mp_obj_t time_ticks_ms(void) {
168-
return MP_OBJ_NEW_SMALL_INT(HAL_GetTick() & MP_SMALL_INT_POSITIVE_MASK);
169-
}
170-
STATIC MP_DEFINE_CONST_FUN_OBJ_0(time_ticks_ms_obj, time_ticks_ms);
171-
172-
STATIC mp_obj_t time_ticks_us(void) {
173-
return MP_OBJ_NEW_SMALL_INT(sys_tick_get_microseconds() & MP_SMALL_INT_POSITIVE_MASK);
174-
}
175-
STATIC MP_DEFINE_CONST_FUN_OBJ_0(time_ticks_us_obj, time_ticks_us);
176-
177133
STATIC mp_obj_t time_ticks_cpu(void) {
178134
static bool enabled = false;
179135
if (!enabled) {
@@ -186,27 +142,19 @@ STATIC mp_obj_t time_ticks_cpu(void) {
186142
}
187143
STATIC MP_DEFINE_CONST_FUN_OBJ_0(time_ticks_cpu_obj, time_ticks_cpu);
188144

189-
STATIC mp_obj_t time_ticks_diff(mp_obj_t start_in, mp_obj_t end_in) {
190-
// we assume that the arguments come from ticks_xx so are small ints
191-
uint32_t start = MP_OBJ_SMALL_INT_VALUE(start_in);
192-
uint32_t end = MP_OBJ_SMALL_INT_VALUE(end_in);
193-
return MP_OBJ_NEW_SMALL_INT((end - start) & MP_SMALL_INT_POSITIVE_MASK);
194-
}
195-
STATIC MP_DEFINE_CONST_FUN_OBJ_2(time_ticks_diff_obj, time_ticks_diff);
196-
197145
STATIC const mp_map_elem_t time_module_globals_table[] = {
198146
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_utime) },
199147

200148
{ MP_OBJ_NEW_QSTR(MP_QSTR_localtime), (mp_obj_t)&time_localtime_obj },
201149
{ MP_OBJ_NEW_QSTR(MP_QSTR_mktime), (mp_obj_t)&time_mktime_obj },
202150
{ MP_OBJ_NEW_QSTR(MP_QSTR_time), (mp_obj_t)&time_time_obj },
203-
{ MP_OBJ_NEW_QSTR(MP_QSTR_sleep), (mp_obj_t)&time_sleep_obj },
204-
{ MP_OBJ_NEW_QSTR(MP_QSTR_sleep_ms), (mp_obj_t)&time_sleep_ms_obj },
205-
{ MP_OBJ_NEW_QSTR(MP_QSTR_sleep_us), (mp_obj_t)&time_sleep_us_obj },
206-
{ MP_OBJ_NEW_QSTR(MP_QSTR_ticks_ms), (mp_obj_t)&time_ticks_ms_obj },
207-
{ MP_OBJ_NEW_QSTR(MP_QSTR_ticks_us), (mp_obj_t)&time_ticks_us_obj },
151+
{ MP_OBJ_NEW_QSTR(MP_QSTR_sleep), (mp_obj_t)&mp_utime_sleep_obj },
152+
{ MP_OBJ_NEW_QSTR(MP_QSTR_sleep_ms), (mp_obj_t)&mp_utime_sleep_ms_obj },
153+
{ MP_OBJ_NEW_QSTR(MP_QSTR_sleep_us), (mp_obj_t)&mp_utime_sleep_us_obj },
154+
{ MP_OBJ_NEW_QSTR(MP_QSTR_ticks_ms), (mp_obj_t)&mp_utime_ticks_ms_obj },
155+
{ MP_OBJ_NEW_QSTR(MP_QSTR_ticks_us), (mp_obj_t)&mp_utime_ticks_us_obj },
208156
{ MP_OBJ_NEW_QSTR(MP_QSTR_ticks_cpu), (mp_obj_t)&time_ticks_cpu_obj },
209-
{ MP_OBJ_NEW_QSTR(MP_QSTR_ticks_diff), (mp_obj_t)&time_ticks_diff_obj },
157+
{ MP_OBJ_NEW_QSTR(MP_QSTR_ticks_diff), (mp_obj_t)&mp_utime_ticks_diff_obj },
210158
};
211159

212160
STATIC MP_DEFINE_CONST_DICT(time_module_globals, time_module_globals_table);

stmhal/mpconfigport.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@
9494
#define MICROPY_PY_URE (1)
9595
#define MICROPY_PY_UHEAPQ (1)
9696
#define MICROPY_PY_UHASHLIB (1)
97+
#define MICROPY_PY_UTIME_MP_HAL (1)
9798
#define MICROPY_PY_MACHINE (1)
9899
#define MICROPY_PY_MACHINE_PULSE (1)
99100
#define MICROPY_PY_MACHINE_I2C (1)

stmhal/mphalport.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ void mp_hal_set_interrupt_char(int c); // -1 to disable
3737
// timing functions
3838
#include "stmhal/systick.h"
3939
#define mp_hal_delay_ms HAL_Delay
40+
#define mp_hal_delay_us(us) sys_tick_udelay(us)
4041
#define mp_hal_delay_us_fast(us) sys_tick_udelay(us)
4142
#define mp_hal_ticks_ms HAL_GetTick
4243
#define mp_hal_ticks_us() sys_tick_get_microseconds()

0 commit comments

Comments
 (0)