ESP32 定时器精度不够的问题求助!

zhuanjia
Posts: 2
Joined: Tue Apr 21, 2020 4:06 am

ESP32 定时器精度不够的问题求助!

Postby zhuanjia » Tue Apr 21, 2020 8:06 am

ESP32定时器精度不准?经测试使用auto_loader模式,定时中断每周期会比实际预定时间长 125ns 左右。请问是什么原因?

测试流程如下:
TIMER_GROUP_0 timer0 设置为 TIMER_COUNT_UP,autoreload 2分频 模式,定时50ms中断使能;
TIMER_GROUP_0 timer1 设置为 TIMER_COUNT_UP,2分频 自由计数;

每次 timer0 中断时读取timer1的定时器计数,并通过线程打印出来。可以看到,每个定时周期都会比设定的时间(50ms)多 125ns!
并且加入Timer0定时周期变化,比如设置500ms,每个定时周期多出的时间将会变成50ns!居然是浮动的!

定时器在中断后autoreload 为什么会损失时间呢?

期望定时器周期精准。

下面是测试过程的打印信息:
可见每次Timer0中断周期都大于 50ms,并且中间会有高达 4us 的时间波动(可能是CPU进入临界区关闭中断导致?)

Timer0 isr. timer1 time stamp = 13000036800 ns(13.00003680 s)
Timer0 isr. timer1 time stamp = 13050032875 ns(13.05003287 s)
Timer0 isr. timer1 time stamp = 13100032950 ns(13.10003295 s)
Timer0 isr. timer1 time stamp = 13150037025 ns(13.15003702 s)
Timer0 isr. timer1 time stamp = 13200033100 ns(13.20003310 s)
Timer0 isr. timer1 time stamp = 13250041200 ns(13.25004120 s)
Timer0 isr. timer1 time stamp = 13300033225 ns(13.30003322 s)
Timer0 isr. timer1 time stamp = 13350037300 ns(13.35003730 s)
Timer0 isr. timer1 time stamp = 13400033375 ns(13.40003337 s)
Timer0 isr. timer1 time stamp = 13450037450 ns(13.45003745 s)

costaud
Posts: 55
Joined: Wed Dec 30, 2015 5:09 pm

Re: ESP32 定时器精度不够的问题求助!

Postby costaud » Wed Apr 22, 2020 6:09 am

能否提供一下测试代码 ?

是在中断中读数的吗? 中断优先级如何配置的 ? 在哪个核上处理中断的 ?

Who is online

Users browsing this forum: No registered users and 84 guests