timer.h File Reference
Hardware independent timer driver. More...
#include <cfg/os.h>#include <cfg/macros.h>#include <cpu/attr.h>#include <cpu/irq.h>#include <emul/timer_posix.h>#include "cfg/cfg_timer.h"#include <cfg/debug.h>#include <cfg/compiler.h>#include <struct/list.h>#include <mware/event.h>Go to the source code of this file.
Data Structures | |
| struct | Timer |
| The timer driver supports multiple synchronous timers that can trigger an event when they expire. More... | |
Functions | |
| ticks_t | timer_clock (void) |
| Return the system tick counter (expressed in ticks). | |
| ticks_t | timer_clock_unlocked (void) |
| Faster version of timer_clock(), to be called only when the timer interrupt is disabled (DISABLE_INTS) or overridden by a higher-priority or non-nesting interrupt. | |
| ticks_t | ms_to_ticks (mtime_t ms) |
| Convert ms [ms] to ticks. | |
| ticks_t | us_to_ticks (utime_t us) |
| Convert us [us] to ticks. | |
| mtime_t | ticks_to_ms (ticks_t ticks) |
| Convert ticks [ticks] to ms. | |
| utime_t | ticks_to_us (ticks_t ticks) |
| Convert ticks [ticks] to us. | |
| hptime_t | us_to_hptime (utime_t us) |
| Convert us [us] to hpticks. | |
| utime_t | hptime_to_us (hptime_t hpticks) |
| Convert hpticks [hptime] to usec. | |
| void | timer_delayTicks (ticks_t delay) |
| Wait for the specified amount of timer ticks. | |
| void | timer_delay (mtime_t delay) |
| Wait some time [ms]. | |
| void | timer_busyWait (hptime_t delay) |
| Busy wait until the specified amount of high-precision ticks have elapsed. | |
| void | timer_delayHp (hptime_t delay) |
| Wait for the specified amount of time (expressed in microseconds). | |
| void | timer_add (Timer *timer) |
| Add the specified timer to the software timer service queue. | |
| Timer * | timer_abort (Timer *timer) |
| Remove a timer from the timers queue before it has expired. | |
| void | timer_setSoftint (Timer *timer, Hook func, iptr_t user_data) |
| Set the timer so that it calls an user hook when it expires. | |
| void | timer_setDelay (Timer *timer, ticks_t delay) |
| Set the timer delay (the time before the event will be triggered). | |
| void | timer_setSignal (Timer *timer, struct Process *proc, sigmask_t sigs) |
| Set the timer so that it sends a signal when it expires. | |
Variables | |
| volatile ticks_t | _clock |
| Master system clock (1 tick accuracy). | |
Detailed Description
Hardware independent timer driver.
All timer related functions are implemented in this module. You have several options to use timers:
- simple delay: just use timer_delay() if you want to wait for a few milliseconds;
- delay with callback: create a timer structure and use timer_setDelay() and timer_setSoftint() to set the callback;
- delay with signal: same as above but use timer_setSignal() to set specify which signal to send.
Whenever a timer expires you need to explicitly arm it again with timer_add(). If you want to abort a timer, use timer_abort(). You can use conversion macros when using msecs to specify the delay.
- Version:
- Id
- timer.h 2932 2009-09-14 09:47:26Z lottaviano
Definition in file timer.h.
Function Documentation
| void timer_add | ( | Timer * | timer | ) |
| void timer_busyWait | ( | hptime_t | delay | ) |
| ticks_t timer_clock | ( | void | ) | [inline] |
Return the system tick counter (expressed in ticks).
The result is guaranteed to increment monotonically, but client code must be tolerant with respect to overflows.
The following code is safe:
drop_teabag(); ticks_t tea_start_time = timer_clock(); for (;;) { if (timer_clock() - tea_start_time > TEAPOT_DELAY) { printf("Your tea, Sir.\n"); break; } patience(); }
- Note:
- This function must disable interrupts on 8/16bit CPUs because the clock variable is larger than the processor word size and can't be copied atomically.
- See also:
- timer_delay()
| ticks_t timer_clock_unlocked | ( | void | ) | [inline] |
Faster version of timer_clock(), to be called only when the timer interrupt is disabled (DISABLE_INTS) or overridden by a higher-priority or non-nesting interrupt.
- See also:
- timer_clock
| void timer_delay | ( | mtime_t | delay | ) | [inline] |
Wait some time [ms].
- Note:
- CPU is released while waiting so you don't have to call cpu_relax() explicitly.
- Parameters:
-
delay Time to wait [ms].
| void timer_delayHp | ( | hptime_t | delay | ) |
Set the timer so that it calls an user hook when it expires.
Sometimes you may want to use the same callback for different events, so you must have different data to operate on. The user_data parameter is such data.
- Parameters:
-
timer Timer struct to set the callback to func Function that will be called when the timer expires user_data Additional data you may want to pass to the callback
