NetBurner 3.5.7
PDF Version
fsl_enc.h
1/*
2 * Copyright (c) 2015, Freescale Semiconductor, Inc.
3 * Copyright 2016-2021, 2023 NXP
4 * All rights reserved.
5 *
6 * SPDX-License-Identifier: BSD-3-Clause
7 */
8
9#ifndef FSL_ENC_H_
10#define FSL_ENC_H_
11
12#include "fsl_common.h"
13#include "fsl_enc_defines.h"
14
15
20/*******************************************************************************
21 * Definitions
22 ******************************************************************************/
23#define FSL_ENC_DRIVER_VERSION (MAKE_VERSION(2, 2, 1))
24
29{
34#if !(defined(FSL_FEATURE_ENC_HAS_NO_CTRL2_SAB_INT) && FSL_FEATURE_ENC_HAS_NO_CTRL2_SAB_INT)
36 (1U << 4U),
37#endif
40};
41
48{
50 kENC_INDEXPulseFlag = (1U << 1U),
53#if !(defined(FSL_FEATURE_ENC_HAS_NO_CTRL2_SAB_INT) && FSL_FEATURE_ENC_HAS_NO_CTRL2_SAB_INT)
55#endif
59};
60
67{
68 kENC_RawHOMEStatusFlag = ENC_IMR_HOME_MASK,
69 kENC_RawINDEXStatusFlag = ENC_IMR_INDEX_MASK,
70 kENC_RawPHBStatusFlag = ENC_IMR_PHB_MASK,
71 kENC_RawPHAEXStatusFlag = ENC_IMR_PHA_MASK,
72 kENC_FilteredHOMEStatusFlag = ENC_IMR_FHOM_MASK,
73 kENC_FilteredINDEXStatusFlag = ENC_IMR_FIND_MASK,
74 kENC_FilteredPHBStatusFlag = ENC_IMR_FPHB_MASK,
75 kENC_FilteredPHAStatusFlag = ENC_IMR_FPHA_MASK,
76};
77
89
101
116
126
136
145
146#if (defined(FSL_FEATURE_ENC_HAS_CTRL3) && FSL_FEATURE_ENC_HAS_CTRL3)
153typedef enum _enc_prescaler
154{
155 kENC_ClockDiv1 = 0,
156 kENC_ClockDiv2 = 1,
157 kENC_ClockDiv4 = 2,
158 kENC_ClockDiv8 = 3,
159 kENC_ClockDiv16 = 4,
160 kENC_ClockDiv32 = 5,
161 kENC_ClockDiv64 = 6,
162 kENC_ClockDiv128 = 7,
163 kENC_ClockDiv256 = 8,
164 kENC_ClockDiv512 = 9,
165 kENC_ClockDiv1024 = 10,
166 kENC_ClockDiv2048 = 11,
167 kENC_ClockDiv4096 = 12,
168 kENC_ClockDiv8192 = 13,
169 kENC_ClockDiv16384 = 14,
170 kENC_ClockDiv32768 = 15,
171} enc_prescaler_t;
172#endif
173
174#if (defined(FSL_FEATURE_ENC_HAS_FILT_PRSC) && FSL_FEATURE_ENC_HAS_FILT_PRSC)
181typedef enum _enc_filter_prescaler
182{
183 kENC_FilterPrescalerDiv1 = 0U,
184 kENC_FilterPrescalerDiv2 = 1U,
185 kENC_FilterPrescalerDiv4 = 2U,
186 kENC_FilterPrescalerDiv8 = 3U,
187 kENC_FilterPrescalerDiv16 = 4U,
188 kENC_FilterPrescalerDiv32 = 5U,
189 kENC_FilterPrescalerDiv64 = 6U,
190 kENC_FilterPrescalerDiv128 = 7U,
191} enc_filter_prescaler_t;
192#endif
193
197typedef struct _enc_config
198{
199 /* Basic counter. */
203 /* Signal detection. */
210 /* Watchdog. */
216#if (defined(FSL_FEATURE_ENC_HAS_FILT_PRSC) && FSL_FEATURE_ENC_HAS_FILT_PRSC)
217 enc_filter_prescaler_t filterPrescaler;
218#endif
219
220 /* Filter for PHASEA, PHASEB, INDEX and HOME. */
221 uint16_t filterCount;
231 /* Position compare. */
235 /* Modulus counting. */
242#if (defined(FSL_FEATURE_ENC_HAS_CTRL3) && FSL_FEATURE_ENC_HAS_CTRL3)
243 /* Prescaler. */
244 bool enablePeriodMeasurementFunction;
245 enc_prescaler_t prescalerValue;
246#endif
248
262
263#if defined(__cplusplus)
264extern "C" {
265#endif
266
267/*******************************************************************************
268 * API
269 ******************************************************************************/
270
287void ENC_Init(ENC_Type *base, const enc_config_t *config);
288
298void ENC_Deinit(ENC_Type *base);
299
327
337
348void ENC_SetSelfTestConfig(ENC_Type *base, const enc_self_test_config_t *config);
349
356void ENC_EnableWatchdog(ENC_Type *base, bool enable);
357
364void ENC_SetInitialPositionValue(ENC_Type *base, uint32_t value);
365
379uint32_t ENC_GetStatusFlags(ENC_Type *base);
380
387void ENC_ClearStatusFlags(ENC_Type *base, uint32_t mask);
388
396static inline uint16_t ENC_GetSignalStatusFlags(ENC_Type *base)
397{
398 return base->IMR;
399}
413void ENC_EnableInterrupts(ENC_Type *base, uint32_t mask);
414
421void ENC_DisableInterrupts(ENC_Type *base, uint32_t mask);
422
430uint32_t ENC_GetEnabledInterrupts(ENC_Type *base);
431
446uint32_t ENC_GetPositionValue(ENC_Type *base);
447
459uint32_t ENC_GetHoldPositionValue(ENC_Type *base);
460
468static inline uint16_t ENC_GetPositionDifferenceValue(ENC_Type *base)
469{
470 return base->POSD;
471}
472
484static inline uint16_t ENC_GetHoldPositionDifferenceValue(ENC_Type *base)
485{
486 return base->POSDH;
487}
488
496static inline uint16_t ENC_GetRevolutionValue(ENC_Type *base)
497{
498 return base->REV;
499}
500
512static inline uint16_t ENC_GetHoldRevolutionValue(ENC_Type *base)
513{
514 return base->REVH;
515}
516
517#if (defined(FSL_FEATURE_ENC_HAS_LASTEDGE) && FSL_FEATURE_ENC_HAS_LASTEDGE)
525static inline uint16_t ENC_GetLastEdgeTimeValue(ENC_Type *base)
526{
527 return base->LASTEDGE;
528}
529
537static inline uint16_t ENC_GetHoldLastEdgeTimeValue(ENC_Type *base)
538{
539 return base->LASTEDGEH;
540}
541#endif
542
543#if (defined(FSL_FEATURE_ENC_HAS_POSDPER) && FSL_FEATURE_ENC_HAS_POSDPER)
551static inline uint16_t ENC_GetPositionDifferencePeriodValue(ENC_Type *base)
552{
553 return base->POSDPER;
554}
555
563static inline uint16_t ENC_GetPositionDifferencePeriodBufferValue(ENC_Type *base)
564{
565 return base->POSDPERBFR;
566}
567
575static inline uint16_t ENC_GetHoldPositionDifferencePeriodValue(ENC_Type *base)
576{
577 return base->POSDPERH;
578}
579#endif
582#if defined(__cplusplus)
583}
584#endif
585
588#endif /* FSL_ENC_H_ */
_enc_interrupt_enable
Interrupt enable/disable mask.
Definition fsl_enc.h:29
void ENC_EnableWatchdog(ENC_Type *base, bool enable)
Enable watchdog for ENC module.
Definition fsl_enc.c:332
_enc_status_flags
Status flag mask.
Definition fsl_enc.h:48
uint32_t ENC_GetPositionValue(ENC_Type *base)
Get the current position counter's value.
Definition fsl_enc.c:620
_enc_index_trigger_mode
Define INDEX signal's trigger mode.
Definition fsl_enc.h:96
enum _enc_position_match_mode enc_position_match_mode_t
Define type for the condition of POSMATCH pulses.
enum _enc_self_test_direction enc_self_test_direction_t
Define type for direction of self test generated signal.
uint32_t ENC_GetEnabledInterrupts(ENC_Type *base)
Get the enabled interrupts' flags.
Definition fsl_enc.c:562
void ENC_Init(ENC_Type *base, const enc_config_t *config)
Initialization for the ENC module.
Definition fsl_enc.c:94
void ENC_ClearStatusFlags(ENC_Type *base, uint32_t mask)
Clear the status flags.
Definition fsl_enc.c:401
enum _enc_revolution_count_condition enc_revolution_count_condition_t
Define type for determining how the revolution counter (REV) is incremented/decremented.
void ENC_EnableInterrupts(ENC_Type *base, uint32_t mask)
Enable the interrupts.
Definition fsl_enc.c:455
_enc_home_trigger_mode
Define HOME signal's trigger mode.
Definition fsl_enc.h:84
void ENC_SetInitialPositionValue(ENC_Type *base, uint32_t value)
Set initial position value for ENC module.
Definition fsl_enc.c:607
enum _enc_decoder_work_mode enc_decoder_work_mode_t
Define type for decoder work mode.
_enc_self_test_direction
Define type for direction of self test generated signal.
Definition fsl_enc.h:141
void ENC_GetDefaultConfig(enc_config_t *config)
Get an available pre-defined settings for ENC's configuration.
Definition fsl_enc.c:246
void ENC_DoSoftwareLoadInitialPositionValue(ENC_Type *base)
Load the initial position value to position counter.
Definition fsl_enc.c:287
struct _enc_self_test_config enc_self_test_config_t
Define configuration structure for self test module.
enum _enc_home_trigger_mode enc_home_trigger_mode_t
Define HOME signal's trigger mode.
_enc_decoder_work_mode
Define type for decoder work mode.
Definition fsl_enc.h:111
void ENC_SetSelfTestConfig(ENC_Type *base, const enc_self_test_config_t *config)
Enable and configure the self test function.
Definition fsl_enc.c:305
uint32_t ENC_GetHoldPositionValue(ENC_Type *base)
Get the hold position counter's value.
Definition fsl_enc.c:642
_enc_signal_status_flags
Signal status flag mask.
Definition fsl_enc.h:67
uint32_t ENC_GetStatusFlags(ENC_Type *base)
Get the status flags.
Definition fsl_enc.c:350
struct _enc_config enc_config_t
Define user configuration structure for ENC module.
enum _enc_index_trigger_mode enc_index_trigger_mode_t
Define INDEX signal's trigger mode.
_enc_position_match_mode
Define type for the condition of POSMATCH pulses.
Definition fsl_enc.h:121
_enc_revolution_count_condition
Define type for determining how the revolution counter (REV) is incremented/decremented.
Definition fsl_enc.h:131
void ENC_Deinit(ENC_Type *base)
De-initialization for the ENC module.
Definition fsl_enc.c:212
void ENC_DisableInterrupts(ENC_Type *base, uint32_t mask)
Disable the interrupts.
Definition fsl_enc.c:508
@ kENC_PositionCompareInerruptEnable
Definition fsl_enc.h:33
@ kENC_INDEXPulseInterruptEnable
Definition fsl_enc.h:31
@ kENC_SimultBothPhaseChangeInterruptEnable
Definition fsl_enc.h:35
@ kENC_HOMETransitionInterruptEnable
Definition fsl_enc.h:30
@ kENC_PositionRollOverInterruptEnable
Definition fsl_enc.h:38
@ kENC_PositionRollUnderInterruptEnable
Definition fsl_enc.h:39
@ kENC_WatchdogTimeoutInterruptEnable
Definition fsl_enc.h:32
@ kENC_INDEXPulseFlag
Definition fsl_enc.h:50
@ kENC_SimultBothPhaseChangeFlag
Definition fsl_enc.h:54
@ kENC_PositionRollOverFlag
Definition fsl_enc.h:56
@ kENC_PositionRollUnderFlag
Definition fsl_enc.h:57
@ kENC_WatchdogTimeoutFlag
Definition fsl_enc.h:51
@ kENC_PositionCompareFlag
Definition fsl_enc.h:52
@ kENC_HOMETransitionFlag
Definition fsl_enc.h:49
@ kENC_LastCountDirectionFlag
Definition fsl_enc.h:58
@ kENC_INDEXTriggerOnFallingEdge
Definition fsl_enc.h:99
@ kENC_INDEXTriggerOnRisingEdge
Definition fsl_enc.h:98
@ kENC_INDEXTriggerDisabled
Definition fsl_enc.h:97
@ kENC_HOMETriggerDisabled
Definition fsl_enc.h:85
@ kENC_HOMETriggerOnRisingEdge
Definition fsl_enc.h:86
@ kENC_HOMETriggerOnFallingEdge
Definition fsl_enc.h:87
@ kENC_SelfTestDirectionNegative
Definition fsl_enc.h:143
@ kENC_SelfTestDirectionPositive
Definition fsl_enc.h:142
@ kENC_DecoderWorkAsSignalPhaseCountMode
Definition fsl_enc.h:113
@ kENC_DecoderWorkAsNormalMode
Definition fsl_enc.h:112
@ kENC_RawPHBStatusFlag
Definition fsl_enc.h:70
@ kENC_FilteredPHBStatusFlag
Definition fsl_enc.h:74
@ kENC_RawINDEXStatusFlag
Definition fsl_enc.h:69
@ kENC_RawHOMEStatusFlag
Definition fsl_enc.h:68
@ kENC_FilteredPHAStatusFlag
Definition fsl_enc.h:75
@ kENC_RawPHAEXStatusFlag
Definition fsl_enc.h:71
@ kENC_FilteredINDEXStatusFlag
Definition fsl_enc.h:73
@ kENC_FilteredHOMEStatusFlag
Definition fsl_enc.h:72
@ kENC_POSMATCHOnPositionCounterEqualToComapreValue
Definition fsl_enc.h:122
@ kENC_POSMATCHOnReadingAnyPositionCounter
Definition fsl_enc.h:124
@ kENC_RevolutionCountOnRollOverModulus
Definition fsl_enc.h:133
@ kENC_RevolutionCountOnINDEXPulse
Definition fsl_enc.h:132
Define user configuration structure for ENC module.
Definition fsl_enc.h:198
bool enableWatchdog
Definition fsl_enc.h:211
enc_position_match_mode_t positionMatchMode
Definition fsl_enc.h:232
enc_index_trigger_mode_t INDEXTriggerMode
Definition fsl_enc.h:205
uint16_t filterSamplePeriod
Definition fsl_enc.h:226
enc_home_trigger_mode_t HOMETriggerMode
Definition fsl_enc.h:204
uint16_t filterCount
Definition fsl_enc.h:221
enc_revolution_count_condition_t revolutionCountCondition
Definition fsl_enc.h:236
bool enableTRIGGERClearPositionCounter
Definition fsl_enc.h:206
bool enableTRIGGERClearHoldPositionCounter
Definition fsl_enc.h:207
uint16_t watchdogTimeoutValue
Definition fsl_enc.h:212
bool enableModuloCountMode
Definition fsl_enc.h:237
uint32_t positionCompareValue
Definition fsl_enc.h:233
enc_decoder_work_mode_t decoderWorkMode
Definition fsl_enc.h:201
uint32_t positionModulusValue
Definition fsl_enc.h:238
bool enableReverseDirection
Definition fsl_enc.h:200
uint32_t positionInitialValue
Definition fsl_enc.h:240
Define configuration structure for self test module.
Definition fsl_enc.h:256
uint16_t signalPeriod
Definition fsl_enc.h:259
uint16_t signalCount
Definition fsl_enc.h:258
enc_self_test_direction_t signalDirection
Definition fsl_enc.h:257
Definition QDC_FSL/src/fsl_enc_defines.h:15