Fix delayMicroseconds() to use 64bit period
fixes: https://github.com/espressif/arduino-esp32/issues/5000
This commit is contained in:
parent
5502879a5b
commit
8645971981
@ -160,15 +160,15 @@ void delay(uint32_t ms)
|
|||||||
|
|
||||||
void ARDUINO_ISR_ATTR delayMicroseconds(uint32_t us)
|
void ARDUINO_ISR_ATTR delayMicroseconds(uint32_t us)
|
||||||
{
|
{
|
||||||
uint32_t m = micros();
|
uint64_t m = (uint64_t)esp_timer_get_time();
|
||||||
if(us){
|
if(us){
|
||||||
uint32_t e = (m + us);
|
uint64_t e = (m + us);
|
||||||
if(m > e){ //overflow
|
if(m > e){ //overflow
|
||||||
while(micros() > e){
|
while((uint64_t)esp_timer_get_time() > e){
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while(micros() < e){
|
while((uint64_t)esp_timer_get_time() < e){
|
||||||
NOP();
|
NOP();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user