4 * Copyright 2005 Develer S.r.l. (http://www.develer.com/)
5 * This file is part of DevLib - See README.devlib for information.
10 * \author Bernardo Innocenti <bernie@develer.com>
12 * \brief Low-level timer module for Qt emulator (implementation).
17 *#* Revision 1.6 2006/07/19 12:56:26 bernie
18 *#* Convert to new Doxygen style.
20 *#* Revision 1.5 2006/02/21 21:28:02 bernie
21 *#* New time handling based on TIMER_TICKS_PER_SEC to support slow timers with ticks longer than 1ms.
23 *#* Revision 1.4 2006/02/17 22:24:21 bernie
24 *#* Update POSIX timer emulator.
26 *#* Revision 1.3 2006/02/10 12:34:52 bernie
27 *#* Remove spurious EXTERN_C.
29 *#* Revision 1.2 2006/01/16 03:30:21 bernie
30 *#* Make header C++ friendly.
32 *#* Revision 1.1 2005/11/27 03:58:18 bernie
33 *#* Add POSIX timer emulator.
35 *#* Revision 1.1 2005/11/27 03:06:36 bernie
36 *#* Qt timer emulation.
40 #include <cfg/compiler.h> // hptime.t
41 #include <os/hptime.h>
43 #include <signal.h> // sigaction()
44 #include <sys/time.h> // setitimer()
45 #include <string.h> // memset()
48 // Forward declaration for the user interrupt server routine.
51 /// HW dependent timer initialization.
52 static void timer_hw_init(void)
55 memset(&sa, 0, sizeof(sa));
57 // Setup interrupt callback
58 sa.sa_handler = timer_isr;
59 sigemptyset(&sa.sa_mask);
60 sigaddset(&sa.sa_mask, SIGALRM);
61 sa.sa_flags = SA_RESTART;
62 sigaction(SIGALRM, &sa, NULL);
64 // Setup POSIX realtime timer to interrupt every 1/TIMER_TICKS_PER_SEC.
65 static struct itimerval itv =
67 { 0, 1000000 / TIMER_TICKS_PER_SEC }, /* it_interval */
68 { 0, 1000000 / TIMER_TICKS_PER_SEC } /* it_value */
70 setitimer(ITIMER_REAL, &itv, NULL);
73 INLINE hptime_t timer_hw_hpread(void)