•All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
timer.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2014-2015 Freie Universität Berlin
3  *
4  * This file is subject to the terms and conditions of the GNU Lesser
5  * General Public License v2.1. See the file LICENSE in the top level
6  * directory for more details.
7  */
8 
33 #ifndef PERIPH_TIMER_H
34 #define PERIPH_TIMER_H
35 
36 #include <limits.h>
37 #include <stdint.h>
38 #include <stdbool.h>
39 
40 #include "architecture.h"
41 #include "periph_cpu.h"
42 #include "periph_conf.h"
43 
44 #ifdef __cplusplus
45 extern "C" {
46 #endif
47 
53 #ifndef TIMER_DEV
54 #define TIMER_DEV(x) (x)
55 #endif
56 
60 #ifndef TIMER_UNDEF
61 #define TIMER_UNDEF (UINT_FAST8_MAX)
62 #endif
63 
70 #ifndef HAVE_TIMER_T
71 typedef uint_fast8_t tim_t;
72 #endif
73 
79 #ifndef TIM_FLAG_RESET_ON_SET
80 #define TIM_FLAG_RESET_ON_SET (0x01)
81 #endif
82 
90 #ifndef TIM_FLAG_RESET_ON_MATCH
91 #define TIM_FLAG_RESET_ON_MATCH (0x02)
92 #endif
93 
100 #ifndef TIM_FLAG_SET_STOPPED
101 #define TIM_FLAG_SET_STOPPED (0x04)
102 #endif
103 
110 typedef void (*timer_cb_t)(void *arg, int channel);
111 
115 #ifndef HAVE_TIMER_ISR_CTX_T
116 typedef struct {
118  void *arg;
120 #endif
121 
142 int timer_init(tim_t dev, uint32_t freq, timer_cb_t cb, void *arg);
143 
158 int timer_set(tim_t dev, int channel, unsigned int timeout);
159 
174 int timer_set_absolute(tim_t dev, int channel, unsigned int value);
175 
194 int timer_set_periodic(tim_t dev, int channel, unsigned int value, uint8_t flags);
195 
205 int timer_clear(tim_t dev, int channel);
206 
214 unsigned int timer_read(tim_t dev);
215 
223 void timer_start(tim_t dev);
224 
235 void timer_stop(tim_t dev);
236 
250 __attribute__((pure))
252 
264 __attribute__((pure))
266 
297 uint32_t timer_query_freqs(tim_t dev, uword_t index);
298 
299 #if defined(DOXYGEN)
319 /* As this function is polled, it needs to be inlined, so it is typically
320  * provided through timer_arch.h. If a platform ever does not need to go
321  * through static inline here, this declaration's condition can be extended to
322  * be `(defined(MODULE_PERIPH_TIMER_POLL) &&
323  * !defined(PERIPH_TIMER_PROVIDES_INLINE_POLL_CHANNEL) || defined(DOXYGEN)` or
324  * similar. */
325 bool timer_poll_channel(tim_t dev, int channel);
326 #endif
327 
328 #if defined(MODULE_PERIPH_TIMER_POLL)
329 #include "timer_arch.h" /* IWYU pragma: export */
330 #endif
331 
332 #ifdef __cplusplus
333 }
334 #endif
335 
336 #endif /* PERIPH_TIMER_H */
Platform-independent access to architecture details.
uword_t timer_query_freqs_numof(tim_t dev)
Get the number of different frequencies supported by the given timer.
unsigned int timer_read(tim_t dev)
Read the current value of the given timer device.
bool timer_poll_channel(tim_t dev, int channel)
Check whether a compare channel has matched.
void(* timer_cb_t)(void *arg, int channel)
Signature of event callback functions triggered from interrupts.
Definition: timer.h:110
int timer_set_absolute(tim_t dev, int channel, unsigned int value)
Set an absolute timeout value for the given channel of the given timer.
int timer_clear(tim_t dev, int channel)
Clear the given channel of the given timer device.
uint_fast8_t tim_t
Default timer type.
Definition: timer.h:71
int timer_init(tim_t dev, uint32_t freq, timer_cb_t cb, void *arg)
Initialize the given timer.
uint32_t timer_query_freqs(tim_t dev, uword_t index)
Iterate over supported frequencies.
int timer_set_periodic(tim_t dev, int channel, unsigned int value, uint8_t flags)
Set an absolute timeout value for the given channel of the given timer.
void timer_stop(tim_t dev)
Stop the given timer.
uword_t timer_query_channel_numof(tim_t dev)
Get the number of timer channels for the given timer.
int timer_set(tim_t dev, int channel, unsigned int timeout)
Set a given timer channel for the given timer device.
void timer_start(tim_t dev)
Start the given timer.
uint< NUM > _t uword_t
Word sized unsigned integer.
Definition: architecture.h:70
Default interrupt context entry holding callback and argument.
Definition: timer.h:116
void * arg
optional argument given to that callback
Definition: timer.h:118
timer_cb_t cb
callback executed from timer interrupt
Definition: timer.h:117
CPU specific part of the timer API.