diff options
-rw-r--r-- | drivers/delay_timer/delay_timer.c | 23 | ||||
-rw-r--r-- | include/drivers/delay_timer.h | 2 |
2 files changed, 25 insertions, 0 deletions
diff --git a/drivers/delay_timer/delay_timer.c b/drivers/delay_timer/delay_timer.c index ed7ed52e..be0ed298 100644 --- a/drivers/delay_timer/delay_timer.c +++ b/drivers/delay_timer/delay_timer.c @@ -38,6 +38,29 @@ static const timer_ops_t *ops; /*********************************************************** + * Get a timer value in microseconds. The driver must + * be initialized before calling this function. + ***********************************************************/ +uint32_t timer_value_get(void) +{ + assert(ops != 0 && + (ops->clk_mult != 0) && + (ops->clk_div != 0) && + (ops->get_timer_value != 0)); + + return (~ops->get_timer_value() * ops->clk_mult) / ops->clk_div; +} + +/*********************************************************** + * Get a timer value in miliseconds. The driver must + * be initialized before calling this function. + ***********************************************************/ +uint32_t timer_value_ms_get(void) +{ + return timer_value_get() / 1000; +} + +/*********************************************************** * Delay for the given number of microseconds. The driver must * be initialized before calling this function. ***********************************************************/ diff --git a/include/drivers/delay_timer.h b/include/drivers/delay_timer.h index 0dec626c..d3bf3e32 100644 --- a/include/drivers/delay_timer.h +++ b/include/drivers/delay_timer.h @@ -47,6 +47,8 @@ typedef struct timer_ops { uint32_t clk_div; } timer_ops_t; +uint32_t timer_value_get(void); +uint32_t timer_value_ms_get(void); void mdelay(uint32_t msec); void udelay(uint32_t usec); void timer_init(const timer_ops_t *ops); |