timer.h File Reference

Hardware independent timer driver (interface). More...

#include <cfg/os.h>
#include <cfg/macros.h>
#include <cpu/attr.h>
#include <cpu/irq.h>
#include <CPU_HEADER(timer)>
#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...

Defines

#define TIMER_MAGIC_ACTIVE   0xABBA
 Timer is active when Timer.magic contains this value (for debugging purposes).

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_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 (interface).

Version:
Id
timer.h 1696 2008-08-25 18:54:02Z bernie
Author:
Bernie Innocenti <bernie@codewiz.org>

Definition in file timer.h.


Define Documentation

#define TIMER_MAGIC_ACTIVE   0xABBA

Timer is active when Timer.magic contains this value (for debugging purposes).

Definition at line 243 of file timer.h.


Function Documentation

ticks_t ms_to_ticks ( mtime_t  ms  )  [inline]

Convert ms [ms] to ticks.

Definition at line 133 of file timer.h.

mtime_t ticks_to_ms ( ticks_t  ticks  )  [inline]

Convert ticks [ticks] to ms.

Definition at line 157 of file timer.h.

utime_t ticks_to_us ( ticks_t  ticks  )  [inline]

Convert ticks [ticks] to us.

Definition at line 169 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 166 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 120 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 218 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.

Definition at line 111 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 127 of file timer.h.

void timer_delayHp ( hptime_t  delay  ) 

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

Definition at line 246 of file timer.c.

ticks_t us_to_ticks ( utime_t  us  )  [inline]

Convert us [us] to ticks.

Definition at line 145 of file timer.h.