Loading...
Searching...
No Matches
rtt.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2014 Thomas Eichinger <thomas.eichinger@fu-berlin.de>
3 * SPDX-License-Identifier: LGPL-2.1-only
4 */
5
6#pragma once
7
36
37#include <stdint.h>
38
39#include "periph_conf.h"
40
41#ifdef __cplusplus
42extern "C" {
43#endif
44
50#ifdef DOXYGEN
51# define RTT_FREQUENCY
52#endif
53
60#ifdef DOXYGEN
61# define RTT_MAX_VALUE
62#endif
63
78#ifndef RTT_MIN_OFFSET
79# pragma message "RTT_MIN_OFFSET is undefined. Using default value of 2. " \
80 "Please test your CPU using RIOT/tests/periph/rtt_min and " \
81 "define RTT_MIN_OFFSET in periph_cpu.h accordingly."
82# define RTT_MIN_OFFSET (2U)
83#endif
84
85/* Allow mock-RTT for unit tests */
86#ifdef MOCK_RTT_FREQUENCY
87# undef RTT_FREQUENCY
88# define RTT_FREQUENCY MOCK_RTT_FREQUENCY
89#else
90# ifndef RTT_FREQUENCY
91# warning "RTT_FREQUENCY undefined. Set RTT_FREQUENCY to the number of ticks " \
92 "per second for the current architecture."
93# endif
94#endif
95
96/* Allow mock-RTT for unit tests */
97#ifdef MOCK_RTT_MAX_VALUE
98# undef RTT_MAX_VALUE
99# define RTT_MAX_VALUE MOCK_RTT_MAX_VALUE
100#else
101# ifndef RTT_MAX_VALUE
102# warning "RTT_MAX_VALUE is undefined. Set RTT_MAX_VALUE to the maximum value " \
103 "for the RTT counter, ensure it is (2^n - 1)."
104# endif
105#endif
106
112#define RTT_US_TO_TICKS(us) (RTT_SEC_TO_TICKS(us) / 1000000UL)
113
119#define RTT_MS_TO_TICKS(ms) (RTT_SEC_TO_TICKS(ms) / 1000UL)
120
126#define RTT_SEC_TO_TICKS(sec) (sec * RTT_FREQUENCY)
127
133#define RTT_MIN_TO_TICKS(min) (RTT_SEC_TO_TICKS((min) * 60))
134
140#define RTT_TICKS_TO_US(ticks) ((uint64_t)(ticks) * 1000000UL / RTT_FREQUENCY)
141
147#define RTT_TICKS_TO_MS(ticks) (RTT_TICKS_TO_US(ticks) / 1000)
148
154#define RTT_TICKS_TO_SEC(ticks) (RTT_TICKS_TO_MS(ticks) / 1000)
155
161#define RTT_TICKS_TO_MIN(ticks) (RTT_TICKS_TO_SEC(ticks) / 60)
162
169typedef void (*rtt_cb_t)(void *arg);
170
174void rtt_init(void);
175
182void rtt_set_overflow_cb(rtt_cb_t cb, void *arg);
183
188
194uint32_t rtt_get_counter(void);
195
203void rtt_set_counter(uint32_t counter);
204
212void rtt_set_alarm(uint32_t alarm, rtt_cb_t cb, void *arg);
213
221uint32_t rtt_get_alarm(void);
222
227
231void rtt_poweron(void);
232
236void rtt_poweroff(void);
237
238#ifdef __cplusplus
239}
240#endif
241
uint32_t rtt_get_alarm(void)
Get the value of a set alarm.
void rtt_poweron(void)
Turn the RTT hardware module on.
void rtt_init(void)
Initialize RTT module.
uint32_t rtt_get_counter(void)
Get the current RTT counter.
void rtt_set_overflow_cb(rtt_cb_t cb, void *arg)
Set a callback for the counter overflow event.
void(* rtt_cb_t)(void *arg)
Signature for the alarm callback.
Definition rtt.h:169
void rtt_poweroff(void)
Turn the RTT hardware module off.
void rtt_set_alarm(uint32_t alarm, rtt_cb_t cb, void *arg)
Set an alarm for RTT to the specified absolute target time.
void rtt_clear_alarm(void)
Clear any set alarm, do nothing if nothing set.
void rtt_set_counter(uint32_t counter)
Set the RTT counter to a specified value.
void rtt_clear_overflow_cb(void)
Clear the overflow callback.