esp32/mphalport: Improve mp_hal_delay_us so it handles pending events.
Thanks to @bboser for the initial idea and implementation.
This commit is contained in:
parent
e1fe3abd09
commit
4ed5865280
@ -113,7 +113,28 @@ void mp_hal_delay_ms(uint32_t ms) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void mp_hal_delay_us(uint32_t us) {
|
void mp_hal_delay_us(uint32_t us) {
|
||||||
ets_delay_us(us);
|
// these constants are tested for a 240MHz clock
|
||||||
|
const uint32_t this_overhead = 5;
|
||||||
|
const uint32_t pend_overhead = 150;
|
||||||
|
|
||||||
|
// return if requested delay is less than calling overhead
|
||||||
|
if (us < this_overhead) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
us -= this_overhead;
|
||||||
|
|
||||||
|
uint64_t t0 = esp_timer_get_time();
|
||||||
|
for (;;) {
|
||||||
|
uint64_t dt = esp_timer_get_time() - t0;
|
||||||
|
if (dt >= us) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (dt + pend_overhead < us) {
|
||||||
|
// we have enough time to service pending events
|
||||||
|
// (don't use MICROPY_EVENT_POLL_HOOK because it also yields)
|
||||||
|
mp_handle_pending();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// this function could do with improvements (eg use ets_delay_us)
|
// this function could do with improvements (eg use ets_delay_us)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user