diff options
| author | Wayne Lin <[email protected]> | 2020-12-29 19:36:00 +0800 |
|---|---|---|
| committer | Wayne Lin <[email protected]> | 2020-12-29 19:36:00 +0800 |
| commit | c9892a82bec1f77146fbf7bed6294384dcad62d5 (patch) | |
| tree | 4a119920fa6e9040508383486a6cd432e8ae7e9a /components/drivers/hwtimer | |
| parent | 1c4328e5a9f6e1cbb737f975e689fc21ea8f6cca (diff) | |
| parent | 94ba15a80b4856b9654aefa0510465b084a7e459 (diff) | |
Merge branch 'master' of https://github.com/RT-Thread/rt-thread into nuvoton
Diffstat (limited to 'components/drivers/hwtimer')
| -rw-r--r-- | components/drivers/hwtimer/hwtimer.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/components/drivers/hwtimer/hwtimer.c b/components/drivers/hwtimer/hwtimer.c index 3953919fae..976d8bbf32 100644 --- a/components/drivers/hwtimer/hwtimer.c +++ b/components/drivers/hwtimer/hwtimer.c @@ -10,6 +10,7 @@ #include <rtthread.h> #include <rtdevice.h> +#include <rthw.h> rt_inline rt_uint32_t timeout_calc(rt_hwtimer_t *timer, rt_hwtimerval_t *tv) { @@ -144,19 +145,25 @@ static rt_size_t rt_hwtimer_read(struct rt_device *dev, rt_off_t pos, void *buff rt_hwtimer_t *timer; rt_hwtimerval_t tv; rt_uint32_t cnt; + rt_base_t level; + rt_int32_t overflow; float t; timer = (rt_hwtimer_t *)dev; if (timer->ops->count_get == RT_NULL) return 0; + level = rt_hw_interrupt_disable(); cnt = timer->ops->count_get(timer); + overflow = timer->overflow; + rt_hw_interrupt_enable(level); + if (timer->info->cntmode == HWTIMER_CNTMODE_DW) { cnt = (timer->freq * timer->period_sec) - cnt; } - t = timer->overflow * timer->period_sec + cnt/(float)timer->freq; + t = overflow * timer->period_sec + cnt/(float)timer->freq; tv.sec = t; tv.usec = (t - tv.sec) * 1000000; size = size > sizeof(tv)? sizeof(tv) : size; |
