timing_pal.h
Go to the documentation of this file.
1 /*
2  * Copyright 2017 NXP
3  * All rights reserved.
4  *
5  * THIS SOFTWARE IS PROVIDED BY NXP "AS IS" AND ANY EXPRESSED OR
6  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
7  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
8  * IN NO EVENT SHALL NXP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
9  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
10  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
11  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
12  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
13  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
14  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
15  * THE POSSIBILITY OF SUCH DAMAGE.
16  */
17 
18 #ifndef TIMING_PAL_H
19 #define TIMING_PAL_H
20 
21 #include <stdint.h>
22 #include <stdbool.h>
23 #include <stddef.h>
24 #include "timing_pal_mapping.h"
25 #include "status.h"
26 #include "callbacks.h"
27 
35 /*******************************************************************************
36  * Definitions
37  ******************************************************************************/
38 
44 typedef enum
45 {
50 
56 typedef enum
57 {
61 
68 typedef struct
69 {
70  uint8_t channel;
73  void * callbackParam;
75 
82 typedef struct
83 {
85  uint8_t numChan;
86  void * extension;
88 
89 
90 /*
91  * The extension member of timer_config_t structure should be:
92  * - NULL if timer is LPIT or PIT
93  * - extension_lptmr_for_timer_t if timer is LPTMR
94  * - extension_stm_for_timer_t if timer is STM
95  * - extension_ftm_for_timer_t if timer is FTM
96  */
97 
98 #if (defined(TIMING_OVER_LPTMR))
99 
105 typedef struct
106 {
107  lptmr_clocksource_t clockSelect;
108  lptmr_prescaler_t prescaler;
109  bool bypassPrescaler;
110 } extension_lptmr_for_timer_t;
111 #endif
112 
113 #if (defined(TIMING_OVER_FTM))
114 
120 typedef struct
121 {
122  ftm_clock_source_t clockSelect;
123  ftm_clock_ps_t prescaler;
124  uint16_t finalValue;
125 } extension_ftm_for_timer_t;
126 #endif
127 
128 #if (defined(TIMING_OVER_STM))
129 
135 typedef struct
136 {
137 #if FEATURE_STM_HAS_CLOCK_SELECTION
138  stm_clock_source_t clockSelect;
139 #endif
140  uint8_t prescaler;
141 } extension_stm_for_timer_t;
142 #endif
143 
161 status_t TIMING_Init(const timing_instance_t * const instance,
162  const timer_config_t * const config);
163 
172 void TIMING_Deinit(const timing_instance_t * const instance);
173 
189 void TIMING_StartChannel(const timing_instance_t * const instance,
190  const uint8_t channel,
191  const uint32_t periodTicks);
192 
202 void TIMING_StopChannel(const timing_instance_t * const instance,
203  const uint8_t channel);
204 
216 uint32_t TIMING_GetElapsed(const timing_instance_t * const instance,
217  const uint8_t channel);
218 
230 uint32_t TIMING_GetRemaining(const timing_instance_t * const instance,
231  const uint8_t channel);
232 
241 void TIMING_EnableNotification(const timing_instance_t * const instance,
242  const uint8_t channel);
243 
252 void TIMING_DisableNotification(const timing_instance_t * const instance,
253  const uint8_t channel);
254 
268 status_t TIMING_GetResolution(const timing_instance_t * const instance,
269  const timer_resolution_type_t type,
270  uint64_t * const resolution);
271 
284 status_t TIMING_GetMaxPeriod(const timing_instance_t * const instance,
285  const timer_resolution_type_t type,
286  uint64_t * const maxPeriod);
287 
288 #if defined(__cplusplus)
289 extern "C" {
290 #endif
291 
292 #if defined(__cplusplus)
293 }
294 #endif
295 
298 #endif /* TIMING_PAL_H */
299 
300 /*******************************************************************************
301  * EOF
302  ******************************************************************************/
timer_chan_type_t
Type options available for timer channel notification.
Definition: timing_pal.h:56
timer_callback_t callback
Definition: timing_pal.h:72
timer_chan_type_t chanType
Definition: timing_pal.h:71
status_t TIMING_GetMaxPeriod(const timing_instance_t *const instance, const timer_resolution_type_t type, uint64_t *const maxPeriod)
Get max period in engineering units.
Definition: timing_pal.c:1489
void TIMING_DisableNotification(const timing_instance_t *const instance, const uint8_t channel)
Disable channel notifications.
Definition: timing_pal.c:1223
Structure to configure the channel timer notification.
Definition: timing_pal.h:68
lptmr_clocksource_t
Clock Source selection Implements : lptmr_clocksource_t_Class.
Definition: lptmr_driver.h:90
uint8_t numChan
Definition: timing_pal.h:85
void TIMING_Deinit(const timing_instance_t *const instance)
De-initialize a timer instance.
Definition: timing_pal.c:562
Structure storing PAL instance information.
lptmr_prescaler_t
Prescaler Selection Implements : lptmr_prescaler_t_Class.
Definition: lptmr_driver.h:68
void TIMING_StartChannel(const timing_instance_t *const instance, const uint8_t channel, const uint32_t periodTicks)
Starts the timer channel counting.
Definition: timing_pal.c:632
uint32_t TIMING_GetElapsed(const timing_instance_t *const instance, const uint8_t channel)
Get elapsed ticks.
Definition: timing_pal.c:884
ftm_clock_ps_t
FlexTimer pre-scaler factor selection for the clock source. In quadrature decoder mode set FTM_CLOCK_...
Definition: ftm_common.h:252
Timer configuration structure.
Definition: timing_pal.h:82
status_t
Status return codes. Common error codes will be a unified enumeration (C enum) that will contain all ...
Definition: status.h:44
ftm_clock_source_t
FlexTimer clock source selection.
Definition: ftm_common.h:238
timer_resolution_type_t
Type options available for tick resolution.
Definition: timing_pal.h:44
uint32_t TIMING_GetRemaining(const timing_instance_t *const instance, const uint8_t channel)
Get remaining ticks.
Definition: timing_pal.c:1009
void TIMING_EnableNotification(const timing_instance_t *const instance, const uint8_t channel)
Enable channel notifications.
Definition: timing_pal.c:1133
const timer_chan_config_t * chanConfigArray
Definition: timing_pal.h:84
void * extension
Definition: timing_pal.h:86
status_t TIMING_GetResolution(const timing_instance_t *const instance, const timer_resolution_type_t type, uint64_t *const resolution)
Get tick resolution.
Definition: timing_pal.c:1310
void(* timer_callback_t)(void *userData)
Definition: callbacks.h:107
status_t TIMING_Init(const timing_instance_t *const instance, const timer_config_t *const config)
Initialize the timer instance and timer channels with value from input configuration structure...
Definition: timing_pal.c:484
void TIMING_StopChannel(const timing_instance_t *const instance, const uint8_t channel)
Stop the timer channel counting.
Definition: timing_pal.c:788