S32 SDK
ftm_driver.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2016, Freescale Semiconductor, Inc.
3  * Copyright 2016-2017 NXP
4  * All rights reserved.
5  *
6  * THIS SOFTWARE IS PROVIDED BY NXP "AS IS" AND ANY EXPRESSED OR
7  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
8  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
9  * IN NO EVENT SHALL NXP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
10  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
11  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
12  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
13  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
14  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
15  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
16  * THE POSSIBILITY OF SUCH DAMAGE.
17  */
29 #ifndef FTM_DRIVER_H
30 #define FTM_DRIVER_H
31 
32 #include "status.h"
33 #include "clock_manager.h"
34 #include "interrupt_manager.h"
35 #include "ftm_hal.h"
36 
45 /*******************************************************************************
46  * Variables
47  ******************************************************************************/
49 extern FTM_Type * const g_ftmBase[FTM_INSTANCE_COUNT];
50 
56 
57 /*******************************************************************************
58  * Definitions
59  ******************************************************************************/
61 #define FTM_MAX_DUTY_CYCLE (0x8000U)
62 
63 #define FTM_DUTY_TO_TICKS_SHIFT (15U)
64 
70 typedef enum
71 {
76 
82 typedef enum
83 {
90 
96 typedef enum
97 {
101 
107 typedef enum
108 {
112 
118 typedef enum
119 {
129 
135 typedef enum
136 {
142 
149 typedef void (* ftm_channel_event_callback_t)(void * userData);
150 
156 typedef struct
157 {
160  uint16_t ftmPeriod;
162  uint16_t measurementResults[FEATURE_FTM_CHANNEL_COUNT];
163  void * channelsCallbacksParams[FEATURE_FTM_CHANNEL_COUNT];
165 } ftm_state_t;
166 
172 typedef struct
173 {
194 
200 typedef struct
201 {
214 
220 typedef struct
221 {
223  uint16_t initialValue;
224  uint16_t finalValue;
226 
232 typedef struct
233 {
238 
244 typedef struct
245 {
252 
258 typedef struct
259 {
260  uint8_t hwChannelId;
262  uint16_t uDutyCyclePercent;
267 
273 typedef struct
274 {
275  uint8_t hwChannelId;
276  uint16_t firstEdge;
278  uint16_t secondEdge;
280  bool deadTime;
293 
299 typedef struct
300 {
304  uint8_t deadTimeValue;
306  uint32_t uFrequencyHZ;
311 
317 typedef enum
318 {
320  FTM_RISING_EDGE = 0x01U,
322  FTM_BOTH_EDGES = 0x03U
324 
330 typedef struct
331 {
332  uint8_t hwChannelId;
336  uint16_t filterValue;
337  bool filterEn;
342 
348 typedef struct
349 {
350  uint8_t nNumChannels;
351  uint16_t nMaxCountValue;
354 
360 typedef struct
361 {
362  uint8_t hwChannelId;
364  uint16_t comparedValue;
368 
374 typedef struct
375 {
378  uint16_t maxCountValue;
381 
387 typedef struct
388 {
391  uint8_t phaseFilterVal;
394 
400 typedef struct
401 {
403  uint16_t initialVal;
404  uint16_t maxVal;
408 
414 typedef struct
415 {
416  uint16_t counter;
424 
425 /*******************************************************************************
426  * API
427  ******************************************************************************/
428 
429 #if defined(__cplusplus)
430 extern "C" {
431 #endif
432 
443 status_t FTM_DRV_Init(uint32_t instance,
444  const ftm_user_config_t * info,
445  ftm_state_t * state);
446 
455 status_t FTM_DRV_Deinit(uint32_t instance);
456 
471 status_t FTM_DRV_InitCounter(uint32_t instance,
472  const ftm_timer_param_t * timer);
473 
482 status_t FTM_DRV_CounterStart(uint32_t instance);
483 
491 status_t FTM_DRV_CounterStop(uint32_t instance);
492 
499 uint32_t FTM_DRV_CounterRead(uint32_t instance);
500 
507 status_t FTM_DRV_DeinitPwm(uint32_t instance);
508 
519 status_t FTM_DRV_InitPwm(uint32_t instance,
520  const ftm_pwm_param_t * param);
521 
541 status_t FTM_DRV_UpdatePwmChannel(uint32_t instance,
542  uint8_t channel,
543  ftm_pwm_update_option_t typeOfUpdate,
544  uint16_t firstEdge,
545  uint16_t secondEdge,
546  bool softwareTrigger);
547 
566 status_t FTM_DRV_UpdatePwmPeriod(uint32_t instance,
567  ftm_pwm_update_option_t typeOfUpdate,
568  uint32_t newValue,
569  bool softwareTrigger);
570 
582 status_t FTM_DRV_MaskOutputChannels(uint32_t instance,
583  uint32_t channelsMask,
584  bool softwareTrigger);
585 
598 status_t FTM_DRV_SetInitialCounterValue(uint32_t instance,
599  uint16_t counterValue,
600  bool softwareTrigger);
601 
612 status_t FTM_DRV_SetHalfCycleReloadPoint(uint32_t instance,
613  uint16_t reloadPoint,
614  bool softwareTrigger);
615 
629 status_t FTM_DRV_SetSoftOutChnValue(uint32_t instance,
630  uint8_t channelsValues,
631  bool softwareTrigger);
632 
644  uint8_t channelsMask,
645  bool softwareTrigger);
646 
657 status_t FTM_DRV_SetInvertingControl(uint32_t instance,
658  uint8_t channelsPairMask,
659  bool softwareTrigger);
660 
671 status_t FTM_DRV_SetModuloCounterValue(uint32_t instance,
672  uint16_t counterValue,
673  bool softwareTrigger);
674 
685 status_t FTM_DRV_SetSync(uint32_t instance,
686  const ftm_pwm_sync_t * param);
687 
702 status_t FTM_DRV_InitOutputCompare(uint32_t instance,
703  const ftm_output_cmp_param_t * param);
704 
714 status_t FTM_DRV_DeinitOutputCompare(uint32_t instance,
715  const ftm_output_cmp_param_t * param);
716 
735  uint8_t channel,
736  uint16_t nextComparematchValue,
738  bool softwareTrigger);
739 
754 status_t FTM_DRV_InitInputCapture(uint32_t instance,
755  const ftm_input_param_t * param);
756 
766 status_t FTM_DRV_DeinitInputCapture(uint32_t instance,
767  const ftm_input_param_t * param);
768 
780 uint16_t FTM_DRV_GetInputCaptureMeasurement(uint32_t instance,
781  uint8_t channel);
782 
793  uint8_t channel);
794 
805 status_t FTM_DRV_QuadDecodeStart(uint32_t instance,
806  const ftm_quad_decode_config_t * config);
807 
816 status_t FTM_DRV_QuadDecodeStop(uint32_t instance);
817 
826 
835 uint32_t FTM_DRV_GetFrequency(uint32_t instance);
836 
837 
846 uint16_t FTM_DRV_ConvertFreqToPeriodTicks(uint32_t instance,
847  uint32_t freqencyHz);
848 
849 #if defined(__cplusplus)
850 }
851 #endif
852  /* End of addtogroup ftm_driver */
856 
857 #endif /* FTM_DRIVER_H */
858 /*******************************************************************************
859  * EOF
860  ******************************************************************************/
ftm_reg_update_t initCounterSync
Definition: ftm_driver.h:189
ftm_fault_mode_t faultMode
Definition: ftm_driver.h:249
ftm_pwm_sync_t syncMethod
Definition: ftm_driver.h:202
status_t FTM_DRV_SetInvertingControl(uint32_t instance, uint8_t channelsPairMask, bool softwareTrigger)
This function will configure if the second channel of a pair will be inverted or not.
Definition: ftm_driver.c:921
ftm_fault_mode_t
FlexTimer fault control.
Definition: ftm_hal.h:366
status_t FTM_DRV_InitCounter(uint32_t instance, const ftm_timer_param_t *timer)
Initialize the FTM counter.
Definition: ftm_driver.c:228
FlexTimer state structure of the driver.
Definition: ftm_driver.h:156
void(* ftm_channel_event_callback_t)(void *userData)
Channel event callback function.
Definition: ftm_driver.h:149
ftm_edge_alignment_mode_t edgeAlignement
Definition: ftm_driver.h:334
FlexTimer driver independent PWM parameter.
Definition: ftm_driver.h:258
ftm_polarity_t
FlexTimer PWM output pulse mode, high-true or low-true on match up.
Definition: ftm_hal.h:297
FlexTimer driver PWM parameters.
Definition: ftm_driver.h:360
ftm_channel_event_callback_t channelsCallbacks
Definition: ftm_driver.h:340
ftm_bdm_mode_t BDMMode
Definition: ftm_driver.h:208
bool hardwareSync2
Definition: ftm_driver.h:180
ftm_polarity_t ftmFaultPinPolarity
Definition: ftm_driver.h:236
Configuration structure that the user needs to set.
Definition: ftm_driver.h:200
uint16_t ftmPeriod
Definition: ftm_driver.h:160
uint32_t uFrequencyHZ
Definition: ftm_driver.h:306
const IRQn_Type g_ftmReloadIrqId[FTM_INSTANCE_COUNT]
Definition: ftm_driver.c:76
uint16_t initialValue
Definition: ftm_driver.h:223
status_t FTM_DRV_InitOutputCompare(uint32_t instance, const ftm_output_cmp_param_t *param)
Configures the FTM to generate timed pulses(Output compare mode).
Definition: ftm_driver.c:1047
ftm_config_mode_t mode
Definition: ftm_driver.h:377
FlexTimer driver input capture parameters.
Definition: ftm_driver.h:348
status_t FTM_DRV_UpdatePwmPeriod(uint32_t instance, ftm_pwm_update_option_t typeOfUpdate, uint32_t newValue, bool softwareTrigger)
This function will update the new period in the frequency or in the counter value into mode register ...
Definition: ftm_driver.c:738
const ftm_input_ch_param_t * inputChConfig
Definition: ftm_driver.h:352
FTM_Type *const g_ftmBase[FTM_INSTANCE_COUNT]
Table of base addresses for FTM instances.
Definition: ftm_driver.c:70
status_t FTM_DRV_StartNewSignalMeasurement(uint32_t instance, uint8_t channel)
Starts new single-shot signal measurement of the given channel.
Definition: ftm_driver.c:1420
status_t FTM_DRV_QuadDecodeStop(uint32_t instance)
De-activates the quadrature decode mode.
Definition: ftm_driver.c:1516
status_t FTM_DRV_DeinitOutputCompare(uint32_t instance, const ftm_output_cmp_param_t *param)
Disables compare match output control and clears FTM timer configuration.
Definition: ftm_driver.c:1110
IRQn_Type
Defines the Interrupt Numbers definitions.
Definition: S32K144.h:269
FlexTimer Registers sync parameters Please don't use software and hardware trigger simultaneously Imp...
Definition: ftm_driver.h:172
const ftm_combined_ch_param_t * pwmCombinedChannelConfig
Definition: ftm_driver.h:308
ftm_output_compare_mode_t chMode
Definition: ftm_driver.h:363
ftm_config_mode_t mode
Definition: ftm_driver.h:222
ftm_output_compare_mode_t
FlexTimer Mode configuration for output compare mode.
Definition: ftm_driver.h:135
FlexTimer driver timer mode configuration structure.
Definition: ftm_driver.h:220
status_t FTM_DRV_SetModuloCounterValue(uint32_t instance, uint16_t counterValue, bool softwareTrigger)
This function configure the maximum counter value.
Definition: ftm_driver.c:944
bool hardwareSync1
Definition: ftm_driver.h:178
status_t FTM_DRV_QuadDecodeStart(uint32_t instance, const ftm_quad_decode_config_t *config)
Configures the quadrature mode and starts measurement.
Definition: ftm_driver.c:1457
ftm_deadtime_ps_t deadTimePrescaler
Definition: ftm_driver.h:305
uint8_t nNumCombinedPwmChannels
Definition: ftm_driver.h:302
status_t FTM_DRV_Init(uint32_t instance, const ftm_user_config_t *info, ftm_state_t *state)
Initializes the FTM driver.
Definition: ftm_driver.c:136
ftm_quad_decoder_state_t FTM_DRV_QuadGetState(uint32_t instance)
Return the current quadrature decoder state (counter value, overflow flag and overflow direction) ...
Definition: ftm_driver.c:1537
ftm_reg_update_t
FTM sync source.
Definition: ftm_hal.h:383
status_t FTM_DRV_CounterStart(uint32_t instance)
Starts the FTM counter.
Definition: ftm_driver.c:287
ftm_quad_phase_polarity_t
FlexTimer quadrature phase polarities, normal or inverted polarity.
Definition: ftm_hal.h:332
const IRQn_Type g_ftmFaultIrqId[FTM_INSTANCE_COUNT]
Definition: ftm_driver.c:74
ftm_phase_params_t phaseAConfig
Definition: ftm_driver.h:405
status_t FTM_DRV_MaskOutputChannels(uint32_t instance, uint32_t channelsMask, bool softwareTrigger)
This function will mask the output of the channels and at match events will be ignored by the masked ...
Definition: ftm_driver.c:801
status_t FTM_DRV_InitPwm(uint32_t instance, const ftm_pwm_param_t *param)
Configures the duty cycle and frequency and starts outputting the PWM on all channels configured in p...
Definition: ftm_driver.c:399
uint32_t FTM_DRV_GetFrequency(uint32_t instance)
Retrieves the frequency of the clock source feeding the FTM counter.
Definition: ftm_driver.c:1560
status_t FTM_DRV_InitInputCapture(uint32_t instance, const ftm_input_param_t *param)
Configures Channel Input Capture for either getting time-stamps on edge detection or on signal measur...
Definition: ftm_driver.c:1205
status_t FTM_DRV_UpdatePwmChannel(uint32_t instance, uint8_t channel, ftm_pwm_update_option_t typeOfUpdate, uint16_t firstEdge, uint16_t secondEdge, bool softwareTrigger)
This function updates the waveform output in PWM mode (duty cycle and phase).
Definition: ftm_driver.c:606
ftm_deadtime_ps_t
FlexTimer pre-scaler factor for the dead-time insertion.
Definition: ftm_hal.h:285
const IRQn_Type g_ftmIrqId[FTM_INSTANCE_COUNT][FEATURE_FTM_CHANNEL_COUNT]
Interrupt vectors for the FTM peripheral.
Definition: ftm_driver.c:73
ftm_phase_params_t phaseBConfig
Definition: ftm_driver.h:406
status_t FTM_DRV_SetSoftwareOutputChannelControl(uint32_t instance, uint8_t channelsMask, bool softwareTrigger)
This function will configure which output channel can be software controlled.
Definition: ftm_driver.c:898
uint16_t FTM_DRV_GetInputCaptureMeasurement(uint32_t instance, uint8_t channel)
This function is used to calculate the measurement and/or time stamps values which are read from the ...
Definition: ftm_driver.c:1402
FlexTimer quadrature decoder channel parameters.
Definition: ftm_driver.h:387
ftm_clock_source_t ftmClockSource
Definition: ftm_driver.h:158
status_t FTM_DRV_CounterStop(uint32_t instance)
Stops the FTM counter.
Definition: ftm_driver.c:308
bool hardwareSync0
Definition: ftm_driver.h:176
uint16_t FTM_DRV_ConvertFreqToPeriodTicks(uint32_t instance, uint32_t freqencyHz)
This function is used to covert the given frequency to period in ticks.
Definition: ftm_driver.c:1612
void * channelsCallbacksParams
Definition: ftm_driver.h:339
const ftm_pwm_fault_param_t * faultConfig
Definition: ftm_driver.h:309
ftm_pwm_sync_mode_t syncPoint
Definition: ftm_driver.h:191
uint16_t finalValue
Definition: ftm_driver.h:224
ftm_quad_decode_mode_t mode
Definition: ftm_driver.h:402
status_t
Status return codes. Common error codes will be a unified enumeration (C enum) that will contain all ...
Definition: status.h:31
uint16_t nMaxCountValue
Definition: ftm_driver.h:351
#define FEATURE_FTM_CHANNEL_COUNT
FlexTimer driver PWM Fault channel parameters.
Definition: ftm_driver.h:232
FTM quadrature configure structure.
Definition: ftm_driver.h:400
ftm_config_mode_t
FlexTimer operation mode.
Definition: ftm_driver.h:118
FlexTimer driver Input capture parameters for each channel.
Definition: ftm_driver.h:330
bool maxLoadingPoint
Definition: ftm_driver.h:182
#define FTM_INSTANCE_COUNT
Definition: S32K144.h:4021
ftm_input_op_mode_t
FTM status.
Definition: ftm_driver.h:70
ftm_second_channel_polarity_t
FlexTimer PWM channel (n+1) polarity for combine mode.
Definition: ftm_hal.h:308
const ftm_output_cmp_ch_param_t * outputChannelConfig
Definition: ftm_driver.h:379
FlexTimer driver combined PWM parameter.
Definition: ftm_driver.h:273
uint8_t phaseFilterVal
Definition: ftm_driver.h:391
uint8_t nNumIndependentPwmChannels
Definition: ftm_driver.h:301
bool enableInitializationTrigger
Definition: ftm_driver.h:211
ftm_quad_decode_mode_t
FlexTimer quadrature decode modes, phase encode or count and direction mode.
Definition: ftm_hal.h:321
ftm_pwm_sync_mode_t
FTM update register.
Definition: ftm_hal.h:396
#define FTM_FEATURE_FAULT_CHANNELS
ftm_pwm_update_option_t
FlexTimer Configure type of PWM update in the duty cycle or in ticks.
Definition: ftm_driver.h:107
FlexTimer driver PWM parameters.
Definition: ftm_driver.h:299
ftm_reg_update_t inverterSync
Definition: ftm_driver.h:186
ftm_bdm_mode_t
Options for the FlexTimer behavior in BDM Mode.
Definition: ftm_hal.h:345
status_t FTM_DRV_SetInitialCounterValue(uint32_t instance, uint16_t counterValue, bool softwareTrigger)
This function configure the initial counter value. The counter will get this value after an overflow ...
Definition: ftm_driver.c:825
ftm_signal_measurement_mode_t measurementType
Definition: ftm_driver.h:335
status_t FTM_DRV_Deinit(uint32_t instance)
Shuts down the FTM driver.
Definition: ftm_driver.c:205
ftm_polarity_t mainChannelPolarity
Definition: ftm_driver.h:282
ftm_config_mode_t ftmMode
Definition: ftm_driver.h:159
status_t FTM_DRV_DeinitInputCapture(uint32_t instance, const ftm_input_param_t *param)
Disables input capture mode and clears FTM timer configuration.
Definition: ftm_driver.c:1350
ftm_signal_measurement_mode_t
FlexTimer input capture measurement type for dual edge input capture.
Definition: ftm_driver.h:82
status_t FTM_DRV_SetHalfCycleReloadPoint(uint32_t instance, uint16_t reloadPoint, bool softwareTrigger)
This function configure the value of the counter which will generates an reload point.
Definition: ftm_driver.c:849
ftm_second_channel_polarity_t secondChannelPolarity
Definition: ftm_driver.h:285
ftm_config_mode_t ftmMode
Definition: ftm_driver.h:204
FlexTimer driver PWM parameters.
Definition: ftm_driver.h:374
ftm_clock_source_t
FlexTimer clock source selection.
Definition: ftm_hal.h:254
status_t FTM_DRV_UpdateOutputCompareChannel(uint32_t instance, uint8_t channel, uint16_t nextComparematchValue, ftm_output_compare_update_t update, bool softwareTrigger)
Sets the next compare match value based on the current counter value.
Definition: ftm_driver.c:1152
ftm_reg_update_t maskRegSync
Definition: ftm_driver.h:188
const ftm_independent_ch_param_t * pwmIndependentChannelConfig
Definition: ftm_driver.h:307
ftm_polarity_t polarity
Definition: ftm_driver.h:261
bool minLoadingPoint
Definition: ftm_driver.h:184
ftm_input_op_mode_t inputMode
Definition: ftm_driver.h:333
bool autoClearTrigger
Definition: ftm_driver.h:190
ftm_output_compare_update_t
FlexTimer input capture type of the next output compare value.
Definition: ftm_driver.h:96
status_t FTM_DRV_SetSync(uint32_t instance, const ftm_pwm_sync_t *param)
This function configures sync mechanism for some FTM registers (MOD, CNINT, HCR, CnV, OUTMASK, INVCTRL, SWOCTRL).
Definition: ftm_driver.c:970
status_t FTM_DRV_SetSoftOutChnValue(uint32_t instance, uint8_t channelsValues, bool softwareTrigger)
This function will force the output value of a channel to a specific value. Before using this functio...
Definition: ftm_driver.c:875
uint32_t FTM_DRV_CounterRead(uint32_t instance)
Reads back the current value of the FTM counter.
Definition: ftm_driver.c:328
const IRQn_Type g_ftmOverflowIrqId[FTM_INSTANCE_COUNT]
Definition: ftm_driver.c:75
ftm_edge_alignment_mode_t
FlexTimer input capture edge mode, rising edge, or falling edge.
Definition: ftm_driver.h:317
ftm_quad_phase_polarity_t phasePolarity
Definition: ftm_driver.h:392
status_t FTM_DRV_DeinitPwm(uint32_t instance)
Stops all PWM channels .
Definition: ftm_driver.c:343
ftm_clock_source_t ftmClockSource
Definition: ftm_driver.h:207
FlexTimer driver PWM Fault parameter.
Definition: ftm_driver.h:244
uint32_t ftmSourceClockFrequency
Definition: ftm_driver.h:161
FTM quadrature state(counter value and flags)
Definition: ftm_driver.h:414
ftm_config_mode_t mode
Definition: ftm_driver.h:303
uint8_t nNumChannels
Definition: ftm_driver.h:350
ftm_reg_update_t outRegSync
Definition: ftm_driver.h:187
uint8_t deadTimeValue
Definition: ftm_driver.h:304
ftm_clock_ps_t ftmPrescaler
Definition: ftm_driver.h:205
ftm_clock_ps_t
FlexTimer pre-scaler factor selection for the clock source. In quadrature decoder mode set FTM_CLOCK_...
Definition: ftm_hal.h:268