rp2: Remove 1ms timeout to make idle waiting tickless.
The main motivation for doing this was to reduce the latency when the system is woken by a USB interrupt. The best_effort_wfe_or_timeout() function calls into the pico-sdk dynamic timer framework which sets up a new dynamic timer instance each time, and then has to tear it down before continuing after a WFE. Testing Python interrupt latency, it seems to be improved by about 12us (from average of 46us to 34us running a Pin IRQ). C-based "scheduled nodes" should see even lower latency. This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
This commit is contained in:
parent
b41055a5a3
commit
8c432ea2d4
|
@ -111,7 +111,7 @@ STATIC mp_obj_t machine_freq(size_t n_args, const mp_obj_t *args) {
|
|||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(machine_freq_obj, 0, 1, machine_freq);
|
||||
|
||||
STATIC mp_obj_t machine_idle(void) {
|
||||
best_effort_wfe_or_timeout(make_timeout_time_ms(1));
|
||||
__wfe();
|
||||
return mp_const_none;
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_0(machine_idle_obj, machine_idle);
|
||||
|
|
|
@ -274,7 +274,7 @@ extern void mp_thread_end_atomic_section(uint32_t);
|
|||
#define MICROPY_EVENT_POLL_HOOK \
|
||||
do { \
|
||||
MICROPY_EVENT_POLL_HOOK_FAST; \
|
||||
best_effort_wfe_or_timeout(make_timeout_time_ms(1)); \
|
||||
__wfe(); \
|
||||
} while (0);
|
||||
|
||||
#define MICROPY_MAKE_POINTER_CALLABLE(p) ((void *)((mp_uint_t)(p) | 1))
|
||||
|
|
Loading…
Reference in New Issue