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.
Timertimer_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:

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
Author:
Bernie Innocenti <bernie@codewiz.org>

Definition in file timer.h.


Function Documentation

ticks_t ms_to_ticks ( mtime_t  ms  )  [inline]

Convert ms [ms] to ticks.

Definition at line 149 of file timer.h.

mtime_t ticks_to_ms ( ticks_t  ticks  )  [inline]

Convert ticks [ticks] to ms.

Definition at line 173 of file timer.h.

utime_t ticks_to_us ( ticks_t  ticks  )  [inline]

Convert ticks [ticks] to us.

Definition at line 185 of file timer.h.

Timer* timer_abort ( Timer timer  ) 

Remove a timer from the timers queue before it has expired.

Note:
Attempting to remove a timer already expired cause undefined behaviour.

Definition at line 172 of file timer.c.

void timer_add ( Timer timer  ) 

Add the specified timer to the software timer service queue.

When the delay indicated by the timer expires, the timer device will execute the event associated with it.

Note:
Interrupt safe

Definition at line 126 of file timer.c.

void timer_busyWait ( hptime_t  delay  ) 

Busy wait until the specified amount of high-precision ticks have elapsed.

Note:
This function is interrupt safe, the only requirement is a running hardware timer.

Definition at line 220 of file timer.c.

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()

Definition at line 127 of file timer.h.

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

Definition at line 143 of file timer.h.

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].

Definition at line 223 of file timer.h.

void timer_delayHp ( hptime_t  delay  ) 

Wait for the specified amount of time (expressed in microseconds).

Definition at line 248 of file timer.c.

void timer_setSoftint ( Timer timer,
Hook  func,
iptr_t  user_data 
) [inline]

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

Definition at line 281 of file timer.h.

ticks_t us_to_ticks ( utime_t  us  )  [inline]

Convert us [us] to ticks.

Definition at line 161 of file timer.h.