17#ifndef FSL_COMPONENT_ID
18#define FSL_COMPONENT_ID "platform.drivers.acmp"
37#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
76#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
87 tmp32 = (base->C0 & (~(CMP_C0_PMODE_MASK | CMP_C0_INVT_MASK | CMP_C0_COS_MASK | CMP_C0_OPE_MASK |
88 CMP_C0_HYSTCTR_MASK | CMP_C0_CFx_MASK)));
89#if defined(FSL_FEATURE_ACMP_HAS_C0_OFFSET_BIT) && (FSL_FEATURE_ACMP_HAS_C0_OFFSET_BIT == 1U)
90 tmp32 &= ~CMP_C0_OFFSET_MASK;
92 if (
config->enableHighSpeed)
94 tmp32 |= CMP_C0_PMODE_MASK;
96 if (
config->enableInvertOutput)
98 tmp32 |= CMP_C0_INVT_MASK;
100 if (
config->useUnfilteredOutput)
102 tmp32 |= CMP_C0_COS_MASK;
106 tmp32 |= CMP_C0_OPE_MASK;
108 tmp32 |= CMP_C0_HYSTCTR(
config->hysteresisMode);
109#if defined(FSL_FEATURE_ACMP_HAS_C0_OFFSET_BIT) && (FSL_FEATURE_ACMP_HAS_C0_OFFSET_BIT == 1U)
110 tmp32 |= CMP_C0_OFFSET(
config->offsetMode);
125#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
156 config->enableHighSpeed =
false;
157 config->enableInvertOutput =
false;
158 config->useUnfilteredOutput =
false;
159 config->enablePinOut =
false;
160#if defined(FSL_FEATURE_ACMP_HAS_C0_OFFSET_BIT) && (FSL_FEATURE_ACMP_HAS_C0_OFFSET_BIT == 1U)
179 base->C0 = ((base->C0 | CMP_C0_EN_MASK) & ~CMP_C0_CFx_MASK);
183 base->C0 &= ~(CMP_C0_EN_MASK | CMP_C0_CFx_MASK);
187#if defined(FSL_FEATURE_ACMP_HAS_C0_LINKEN_BIT) && (FSL_FEATURE_ACMP_HAS_C0_LINKEN_BIT == 1U)
203 base->C0 = ((base->C0 | CMP_C0_LINKEN_MASK) & ~CMP_C0_CFx_MASK);
207 base->C0 &= ~(CMP_C0_LINKEN_MASK | CMP_C0_CFx_MASK);
234 uint32_t tmp32 = (base->C1 & (~(CMP_C1_PSEL_MASK | CMP_C1_MSEL_MASK)));
239#if (defined(FSL_FEATURE_ACMP_HAS_C1_INPSEL_BIT) && (FSL_FEATURE_ACMP_HAS_C1_INPSEL_BIT == 1U))
240 tmp32 &= ~CMP_C1_INPSEL_MASK;
241 tmp32 |= CMP_C1_INPSEL(
config->positivePortInput);
244#if (defined(FSL_FEATURE_ACMP_HAS_C1_INNSEL_BIT) && (FSL_FEATURE_ACMP_HAS_C1_INNSEL_BIT == 1U))
245 tmp32 &= ~CMP_C1_INNSEL_MASK;
246 tmp32 |= CMP_C1_INNSEL(
config->negativePortInput);
249 tmp32 |= CMP_C1_PSEL(
config->plusMuxInput) | CMP_C1_MSEL(
config->minusMuxInput);
267 base->C0 = ((base->C0 | CMP_C0_DMAEN_MASK) & ~CMP_C0_CFx_MASK);
271 base->C0 &= ~(CMP_C0_DMAEN_MASK | CMP_C0_CFx_MASK);
288 base->C0 = ((base->C0 | CMP_C0_WE_MASK) & ~CMP_C0_CFx_MASK);
292 base->C0 &= ~(CMP_C0_WE_MASK | CMP_C0_CFx_MASK);
322 uint32_t tmp32 = (base->C0 & (~(CMP_C0_FILTER_CNT_MASK | CMP_C0_FPR_MASK | CMP_C0_SE_MASK | CMP_C0_CFx_MASK)));
326 tmp32 |= CMP_C0_SE_MASK;
328 tmp32 |= (CMP_C0_FILTER_CNT(
config->filterCount) | CMP_C0_FPR(
config->filterPeriod));
357 base->C1 &= ~CMP_C1_DACEN_MASK;
361 tmp32 = (base->C1 & (~(CMP_C1_VRSEL_MASK | CMP_C1_VOSEL_MASK)));
363 tmp32 |= (CMP_C1_VRSEL(
config->referenceVoltageSource) | CMP_C1_VOSEL(
config->DACValue) | CMP_C1_DACEN_MASK);
365#if defined(FSL_FEATURE_ACMP_HAS_C1_DACOE_BIT) && (FSL_FEATURE_ACMP_HAS_C1_DACOE_BIT == 1U)
366 tmp32 &= ~CMP_C1_DACOE_MASK;
369 tmp32 |= CMP_C1_DACOE_MASK;
373#if defined(FSL_FEATURE_ACMP_HAS_C1_DMODE_BIT) && (FSL_FEATURE_ACMP_HAS_C1_DMODE_BIT == 1U)
377 tmp32 &= ~CMP_C1_DMODE_MASK;
380 tmp32 |= CMP_C1_DMODE_MASK;
416 tmp32 = CMP_C2_CHnF_MASK;
417#if defined(FSL_FEATURE_ACMP_HAS_C2_RRE_BIT) && (FSL_FEATURE_ACMP_HAS_C2_RRE_BIT == 1U)
418 tmp32 |= CMP_C2_RRE_MASK;
420 base->C2 &= ~(tmp32);
427 tmp32 = (base->C1 & ~(CMP_C1_CHNn_MASK));
428 tmp32 |= ((
config->checkerChannelMask) << CMP_C1_CHN0_SHIFT);
435 (~(CMP_C2_FXMP_MASK | CMP_C2_FXMXCH_MASK | CMP_C2_NSAM_MASK | CMP_C2_INITMOD_MASK | CMP_C2_CHnF_MASK)));
436 tmp32 |= (CMP_C2_FXMP(
config->fixedPort) | CMP_C2_FXMXCH(
config->fixedChannelNumber) |
437 CMP_C2_NSAM(
config->sampleClockCount) | CMP_C2_INITMOD(
config->delayModulus));
438#if defined(FSL_FEATURE_ACMP_HAS_C2_RRE_BIT) && (FSL_FEATURE_ACMP_HAS_C2_RRE_BIT == 1U)
439 tmp32 |= CMP_C2_RRE_MASK;
458 uint32_t tmp32 = (base->C2 & ~(CMP_C2_ACOn_MASK | CMP_C2_CHnF_MASK));
460 tmp32 |= (mask << CMP_C2_ACOn_SHIFT);
473 uint32_t tmp32 = (base->C2 & (~CMP_C2_CHnF_MASK));
475 tmp32 |= (mask << CMP_C2_CH0F_SHIFT);
493 tmp32 = base->C0 & ~CMP_C0_CFx_MASK;
496 tmp32 = ((tmp32 | CMP_C0_IER_MASK) & ~CMP_C0_CFx_MASK);
500 tmp32 = ((tmp32 | CMP_C0_IEF_MASK) & ~CMP_C0_CFx_MASK);
511 tmp32 = ((tmp32 | CMP_C2_RRIE_MASK) & ~CMP_C2_CHnF_MASK);
533 tmp32 &= ~(CMP_C0_IER_MASK | CMP_C0_CFx_MASK);
537 tmp32 &= ~(CMP_C0_IEF_MASK | CMP_C0_CFx_MASK);
548 tmp32 &= ~(CMP_C2_RRIE_MASK | CMP_C2_CHnF_MASK);
561 uint32_t status = 0U;
562 uint32_t tmp32 = base->C0;
567 if (CMP_C0_CFR_MASK == (tmp32 & CMP_C0_CFR_MASK))
571 if (CMP_C0_CFF_MASK == (tmp32 & CMP_C0_CFF_MASK))
575 if (CMP_C0_COUT_MASK == (tmp32 & CMP_C0_COUT_MASK))
592 uint32_t tmp32 = (base->C0 & (~(CMP_C0_CFR_MASK | CMP_C0_CFF_MASK)));
597 tmp32 |= CMP_C0_CFR_MASK;
601 tmp32 |= CMP_C0_CFF_MASK;
606#if defined(FSL_FEATURE_ACMP_HAS_C3_REG) && (FSL_FEATURE_ACMP_HAS_C3_REG == 1U)
619 if (!
config->enablePositiveChannelDiscreteMode)
621 tmp32 |= CMP_C3_PCHCTEN_MASK;
623 if (!
config->enableNegativeChannelDiscreteMode)
625 tmp32 |= CMP_C3_NCHCTEN_MASK;
627 if (
config->enableResistorDivider)
629 tmp32 |= CMP_C3_RDIVE_MASK;
632 tmp32 |= CMP_C3_DMCS(
config->clockSource)
633 | CMP_C3_ACSAT(
config->sampleTime)
634 | CMP_C3_ACPH1TC(
config->phase1Time)
635 | CMP_C3_ACPH2TC(
config->phase2Time);
652 config->enablePositiveChannelDiscreteMode =
false;
653 config->enableNegativeChannelDiscreteMode =
false;
654 config->enableResistorDivider =
false;
static BenchController instance
static constexpr persistent_config_s * config
static uint32_t ACMP_GetInstance(CMP_Type *base)
Get the ACMP instance from the peripheral base address.
static CMP_Type *const s_acmpBases[]
static const clock_ip_name_t s_acmpClock[]
void ACMP_SetFilterConfig(CMP_Type *base, const acmp_filter_config_t *config)
Configures the filter.
void ACMP_Enable(CMP_Type *base, bool enable)
Enables or disables the ACMP.
void ACMP_GetDefaultDiscreteModeConfig(acmp_discrete_mode_config_t *config)
Get the default configuration for discrete mode setting.
uint32_t ACMP_GetStatusFlags(CMP_Type *base)
Gets status flags.
void ACMP_SetRoundRobinPreState(CMP_Type *base, uint32_t mask)
Defines the pre-set state of channels in round robin mode.
void ACMP_SetChannelConfig(CMP_Type *base, const acmp_channel_config_t *config)
Sets the channel configuration.
void ACMP_Init(CMP_Type *base, const acmp_config_t *config)
Initializes the ACMP.
void ACMP_EnableDMA(CMP_Type *base, bool enable)
Enables or disables DMA.
void ACMP_ClearRoundRobinStatusFlags(CMP_Type *base, uint32_t mask)
Clears the channel input changed flags in round robin mode.
void ACMP_DisableInterrupts(CMP_Type *base, uint32_t mask)
Disables interrupts.
void ACMP_Deinit(CMP_Type *base)
Deinitializes the ACMP.
void ACMP_SetDACConfig(CMP_Type *base, const acmp_dac_config_t *config)
Configures the internal DAC.
void ACMP_EnableInterrupts(CMP_Type *base, uint32_t mask)
Enables interrupts.
void ACMP_EnableLinkToDAC(CMP_Type *base, bool enable)
Enables the link from CMP to DAC enable.
void ACMP_EnableWindowMode(CMP_Type *base, bool enable)
Enables or disables window mode.
void ACMP_ClearStatusFlags(CMP_Type *base, uint32_t mask)
Clears status flags.
void ACMP_SetDiscreteModeConfig(CMP_Type *base, const acmp_discrete_mode_config_t *config)
Configure the discrete mode.
void ACMP_GetDefaultConfig(acmp_config_t *config)
Gets the default configuration for ACMP.
void ACMP_SetRoundRobinConfig(CMP_Type *base, const acmp_round_robin_config_t *config)
Configures the round robin mode.
@ kACMP_DiscreteSampleTimeAs1T
@ kACMP_RoundRobinInterruptEnable
@ kACMP_OutputFallingInterruptEnable
@ kACMP_OutputRisingInterruptEnable
@ kACMP_DiscretePhaseTimeAlt0
@ kACMP_DiscreteClockSlow
@ kACMP_DACWorkHighSpeedMode
@ kACMP_DACWorkLowSpeedMode
@ kACMP_OutputAssertEventFlag
@ kACMP_OutputFallingEventFlag
@ kACMP_OutputRisingEventFlag
enum _clock_ip_name clock_ip_name_t
Peripheral clock name difinition used for clock gate, clock source and clock divider setting....
static void CLOCK_DisableClock(clock_ip_name_t name)
Disable the clock for specific IP.
static void CLOCK_EnableClock(clock_ip_name_t name)
Enable the clock for specific IP.
static void enable(const char *param)
Configuration for channel.
Configuration for discrete mode.
Configuration for filter.
Configuration for round robin mode.