Application timer functionality.
More...
Application timer functionality.
This module enables the application to create multiple timer instances based on the RTC1 peripheral. Checking for time-outs and invocation of user time-out handlers is performed in the RTC1 interrupt handler. List handling is done using a software interrupt (SWI0). Both interrupt handlers are running in APP_LOW priority level.
When calling app_timer_start() or app_timer_stop(), the timer operation is just queued, and the software interrupt is triggered. The actual timer start/stop operation is executed by the SWI0 interrupt handler. Since the SWI0 interrupt is running in APP_LOW, if the application code calling the timer function is running in APP_LOW or APP_HIGH, the timer operation will not be performed until the application handler has returned. This will be the case, for example, when stopping a timer from a time-out handler when not using the scheduler.
Use the USE_SCHEDULER parameter of the APP_TIMER_INIT() macro to select if the Scheduler should be used or not. Even if the scheduler is not used, app_timer.h will include app_scheduler.h, so when compiling, app_scheduler.h must be available in one of the compiler include paths.
#define _APP_TIMER_DEF |
( |
|
timer_id | ) |
|
#define APP_TIMER_CLOCK_FREQ 32768 |
Clock frequency of the RTC timer used to implement the app timer module.
#define APP_TIMER_DEF |
( |
|
timer_id | ) |
_APP_TIMER_DEF(timer_id) |
Create a timer identifier and statically allocate memory for the timer.
- Parameters
-
timer_id | Name of the timer identifier variable that will be used to control the timer. |
#define APP_TIMER_MAX_CNT_VAL RTC_COUNTER_COUNTER_Msk |
#define APP_TIMER_MIN_TIMEOUT_TICKS 5 |
#define APP_TIMER_NODE_SIZE 32 |
Size of app_timer.timer_node_t (used to allocate data).
Size of event data when scheduler is used.
#define APP_TIMER_TICKS |
( |
|
MS | ) |
|
Value:
Convert milliseconds to timer ticks.
This macro uses 64-bit integer arithmetic, but as long as the macro parameters are constants (i.e. defines), the computation will be done by the preprocessor.
- Parameters
-
- Returns
- Number of timer ticks.
Timer modes.
Enumerator |
---|
APP_TIMER_MODE_SINGLE_SHOT |
The timer will expire only once.
|
APP_TIMER_MODE_REPEATED |
The timer will restart each time it expires.
|
uint32_t app_timer_cnt_diff_compute |
( |
uint32_t |
ticks_to, |
|
|
uint32_t |
ticks_from |
|
) |
| |
Function for computing the difference between two RTC1 counter values.
- Parameters
-
- Returns
- Number of ticks from ticks_from to ticks_to.
uint32_t app_timer_cnt_get |
( |
void |
| ) |
|
Function for returning the current value of the RTC1 counter.
- Returns
- Current value of the RTC1 counter.
Function for creating a timer instance.
- Parameters
-
[in] | p_timer_id | Pointer to timer identifier. |
[in] | mode | Timer mode. |
[in] | timeout_handler | Function to be executed when the timer expires. |
- Return values
-
NRF_SUCCESS | If the timer was successfully created. |
NRF_ERROR_INVALID_PARAM | If a parameter was invalid. |
NRF_ERROR_INVALID_STATE | If the application timer module has not been initialized or the timer is running. |
- Note
- This function does the timer allocation in the caller's context. It is also not protected by a critical region. Therefore care must be taken not to call it from several interrupt levels simultaneously.
-
The function can be called again on the timer instance and will re-initialize the instance if the timer is not running.
- Attention
- The FreeRTOS and RTX app_timer implementation does not allow app_timer_create to be called on the previously initialized instance.
Function for initializing the timer module.
- Return values
-
NRF_SUCCESS | If the module was initialized successfully. |
uint8_t app_timer_op_queue_utilization_get |
( |
void |
| ) |
|
Function for getting the maximum observed operation queue utilization.
Function for tuning the module and determining OP_QUEUE_SIZE value and thus module RAM usage.
- Note
- APP_TIMER_WITH_PROFILER must be enabled to use this functionality.
- Returns
- Maximum number of events in queue observed so far.
void app_timer_pause |
( |
void |
| ) |
|
Function for pausing RTC activity which drives app_timer.
- Note
- This function can be used for debugging purposes to ensure that application is halted when entering a breakpoint.
void app_timer_resume |
( |
void |
| ) |
|
Function for resuming RTC activity which drives app_timer.
- Note
- This function can be used for debugging purposes to resume application activity.
Function for starting a timer.
- Parameters
-
[in] | timer_id | Timer identifier. |
[in] | timeout_ticks | Number of ticks (of RTC1, including prescaling) to time-out event (minimum 5 ticks). |
[in] | p_context | General purpose pointer. Will be passed to the time-out handler when the timer expires. |
- Return values
-
NRF_SUCCESS | If the timer was successfully started. |
NRF_ERROR_INVALID_PARAM | If a parameter was invalid. |
NRF_ERROR_INVALID_STATE | If the application timer module has not been initialized or the timer has not been created. |
NRF_ERROR_NO_MEM | If the timer operations queue was full. |
- Note
- The minimum timeout_ticks value is 5.
-
For multiple active timers, time-outs occurring in close proximity to each other (in the range of 1 to 3 ticks) will have a positive jitter of maximum 3 ticks.
-
When calling this method on a timer that is already running, the second start operation is ignored.
Function for stopping the specified timer.
- Note
- If stop is called from the thread context or interrupt context with priority less or equal than app timer interrupt priority (RTC1), timer expiration handler will not be called followed stop call. However, stopping timer from higher priority interrupt may interrupt expiry process. In that case, handler may still be called after stop.
- Parameters
-
[in] | timer_id | Timer identifier. |
- Return values
-
NRF_SUCCESS | If the timer was successfully stopped. |
NRF_ERROR_INVALID_PARAM | If a parameter was invalid. |
NRF_ERROR_INVALID_STATE | If the application timer module has not been initialized or the timer has not been created. |
NRF_ERROR_NO_MEM | If the timer operations queue was full. |
Function for stopping all running timers.
- Return values
-
NRF_SUCCESS | If all timers were successfully stopped. |
NRF_ERROR_INVALID_STATE | If the application timer module has not been initialized. |
NRF_ERROR_NO_MEM | If the timer operations queue was full. |