/* * Copyright (c) 2020, Texas Instruments Incorporated * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /*!**************************************************************************** * @file dl_timer.h * @brief Common General Purpose Timer (TIMx) Driver Library * @defgroup TIMX Common General Purpose Timer (TIMx) * * @anchor ti_dl_dl_timer__Overview * # Overview * GPTimer module has different variations and have been defined as TimerG * and TimerA. This file contains APIs which are common between * different variations. *
* @anchor ti_devices_msp_DL_TIMER_Usage * # Usage * It is not recommended to include this header file in the application. * In order to access TimerG and TimerA functionality include * to appropriate timer header file at the application level. Accessing the * functionality via the corresponding header file will allow user to * determine the functionality supported by the each Timer variant. * * To access TimerG functionality: * @code * // Import TIMG definitions * #include * @endcode * * To access TimerA functionality: * @code * // Import TIMA definitions * #include * @endcode * *
****************************************************************************** */ /** @addtogroup TIMX * @{ */ #ifndef ti_dl_dl_timer__include #define ti_dl_dl_timer__include #if defined(ti_dl_dl_timera__include) || defined(ti_dl_dl_timerg__include) || \ defined(DOXYGEN__INCLUDE) #include #include #include #include #if defined(__MSPM0_HAS_TIMER_A__) || defined(__MSPM0_HAS_TIMER_G__) #ifdef __cplusplus extern "C" { #endif /* clang-format off */ /** @addtogroup DL_TIMER_CCx * @{ */ /*! * @brief Selects Output direction for CCP0 */ #define DL_TIMER_CC0_OUTPUT (GPTIMER_CCPD_C0CCP0_OUTPUT) /*! * @brief Selects Input direction for CCP0 */ #define DL_TIMER_CC0_INPUT (GPTIMER_CCPD_C0CCP0_INPUT) /*! * @brief Selects Output direction for CCP1 */ #define DL_TIMER_CC1_OUTPUT (GPTIMER_CCPD_C0CCP1_OUTPUT) /*! * @brief Selects Input direction for CCP1 */ #define DL_TIMER_CC1_INPUT (GPTIMER_CCPD_C0CCP1_INPUT) /*! * @brief Selects Output direction for CCP2 */ #define DL_TIMER_CC2_OUTPUT (GPTIMER_CCPD_C0CCP2_OUTPUT) /*! * @brief Selects Input direction for CCP2 */ #define DL_TIMER_CC2_INPUT (GPTIMER_CCPD_C0CCP2_INPUT) /*! * @brief Selects Output direction for CCP3 */ #define DL_TIMER_CC3_OUTPUT (GPTIMER_CCPD_C0CCP3_OUTPUT) /*! * @brief Selects Input direction for CCP3 */ #define DL_TIMER_CC3_INPUT (GPTIMER_CCPD_C0CCP3_INPUT) /** @}*/ /** @addtogroup DL_TIMER_CC_MODE * @{ */ /*! * @brief Configures CC in Compare mode */ #define DL_TIMER_CC_MODE_COMPARE (GPTIMER_CCCTL_01_COC_COMPARE) /*! * @brief Configures CC in Capture mode */ #define DL_TIMER_CC_MODE_CAPTURE (GPTIMER_CCCTL_01_COC_CAPTURE) /** @}*/ /** @addtogroup DL_TIMER_CC_ZCOND * @{ */ /*! * @brief No event generates zero pulse */ #define DL_TIMER_CC_ZCOND_NONE (GPTIMER_CCCTL_01_ZCOND_CC_TRIG_NO_EFFECT) /*! * @brief Rising edge of CCP or trigger assertion edge generates zero pulse */ #define DL_TIMER_CC_ZCOND_TRIG_RISE (GPTIMER_CCCTL_01_ZCOND_CC_TRIG_RISE) /*! * @brief Falling edge of CCP or trigger or de-assertion edge generates zero * pulse */ #define DL_TIMER_CC_ZCOND_TRIG_FALL (GPTIMER_CCCTL_01_ZCOND_CC_TRIG_FALL) /*! * @brief Either edge of CCP or trigger change (assertion/de-assertion edge) * generates zero pulse */ #define DL_TIMER_CC_ZCOND_TRIG_EDGE (GPTIMER_CCCTL_01_ZCOND_CC_TRIG_EDGE) /** @}*/ /** @addtogroup DL_TIMER_CC_LCOND * @{ */ /*! * @brief No event generates load pulse */ #define DL_TIMER_CC_LCOND_NONE (GPTIMER_CCCTL_01_LCOND_CC_TRIG_NO_EFFECT) /*! * @brief Rising edge of CCP or trigger assertion edge generates load pulse */ #define DL_TIMER_CC_LCOND_TRIG_RISE (GPTIMER_CCCTL_01_LCOND_CC_TRIG_RISE) /*! * @brief Falling edge of CCP or trigger or de-assertion edge generates load * pulse */ #define DL_TIMER_CC_LCOND_TRIG_FALL (GPTIMER_CCCTL_01_LCOND_CC_TRIG_FALL) /*! * @brief Either edge of CCP or trigger change (assertion/de-assertion edge) * generates load pulse */ #define DL_TIMER_CC_LCOND_TRIG_EDGE (GPTIMER_CCCTL_01_LCOND_CC_TRIG_EDGE) /** @}*/ /** @addtogroup DL_TIMER_CC_ACOND * @{ */ /*! * @brief Each TIMCLK generates an advance pulse */ #define DL_TIMER_CC_ACOND_TIMCLK (GPTIMER_CCCTL_01_ACOND_TIMCLK) /*! * @brief Rising edge of CCP or trigger assertion edge generates an advance * pulse */ #define DL_TIMER_CC_ACOND_TRIG_RISE (GPTIMER_CCCTL_01_ACOND_CC_TRIG_RISE) /*! * @brief Falling edge of CCP or trigger de-assertion edge generates an advance * pulse */ #define DL_TIMER_CC_ACOND_TRIG_FALL (GPTIMER_CCCTL_01_ACOND_CC_TRIG_FALL) /*! * @brief Either edge of CCP or trigger change (assertion/de-assertion edge) * generates an advance pulse. */ #define DL_TIMER_CC_ACOND_TRIG_EDGE (GPTIMER_CCCTL_01_ACOND_CC_TRIG_EDGE) /*! * @brief CCP High or Trigger assertion generates an advance pulse. */ #define DL_TIMER_CC_ACOND_TRIG_HIGH (GPTIMER_CCCTL_01_ACOND_CC_TRIG_HIGH) /** @}*/ /** @addtogroup DL_TIMER_CC_CCOND * @{ */ /*! * @brief None (never captures) */ #define DL_TIMER_CC_CCOND_NOCAPTURE (GPTIMER_CCCTL_01_CCOND_NOCAPTURE) /*! * @brief Rising edge of CCP or trigger assertion edge generates a capture * pulse */ #define DL_TIMER_CC_CCOND_TRIG_RISE (GPTIMER_CCCTL_01_CCOND_CC_TRIG_RISE) /*! * @brief Falling edge of CCP or trigger de-assertion edge generates a capture * pulse */ #define DL_TIMER_CC_CCOND_TRIG_FALL (GPTIMER_CCCTL_01_CCOND_CC_TRIG_FALL) /*! * @brief Either edge of CCP or trigger change (assertion/de-assertion edge) * generates a capture pulse */ #define DL_TIMER_CC_CCOND_TRIG_EDGE (GPTIMER_CCCTL_01_CCOND_CC_TRIG_EDGE) /** @}*/ /** @addtogroup DL_TIMER_CC_OCTL_INIT_VAL * @{ */ /*! * @brief CCP is low while output is disabled */ #define DL_TIMER_CC_OCTL_INIT_VAL_LOW (GPTIMER_OCTL_01_CCPIV_LOW) /*! * @brief CCP is high while output is disabled */ #define DL_TIMER_CC_OCTL_INIT_VAL_HIGH (GPTIMER_OCTL_01_CCPIV_HIGH) /** @}*/ /** @addtogroup DL_TIMER_CC_OCTL_INV_OUT * @{ */ /*! * @brief CCP Output inversion is enabled */ #define DL_TIMER_CC_OCTL_INV_OUT_ENABLED (GPTIMER_OCTL_01_CCPOINV_INV) /*! * @brief CCP Output inversion is disabled */ #define DL_TIMER_CC_OCTL_INV_OUT_DISABLED (GPTIMER_OCTL_01_CCPOINV_NOINV) /** @}*/ /** @addtogroup DL_TIMER_CC_OCTL_SRC * @{ */ /*! * @brief Output controlled by function values (e.g. PWM) */ #define DL_TIMER_CC_OCTL_SRC_FUNCVAL (GPTIMER_OCTL_01_CCPO_FUNCVAL) /*! * @brief Output controlled by load event */ #define DL_TIMER_CC_OCTL_SRC_LOAD (GPTIMER_OCTL_01_CCPO_LOAD) /*! * @brief Output controlled by compare value = counter condition. */ #define DL_TIMER_CC_OCTL_SRC_CMPVAL (GPTIMER_OCTL_01_CCPO_CMPVAL) /*! * @brief Output controlled by zero event. */ #define DL_TIMER_CC_OCTL_SRC_ZERO (GPTIMER_OCTL_01_CCPO_ZERO) /*! * @brief Output controlled by capture event. */ #define DL_TIMER_CC_OCTL_SRC_CAPCOND (GPTIMER_OCTL_01_CCPO_CAPCOND) /*! * @brief Output controlled by fault condition. */ #define DL_TIMER_CC_OCTL_SRC_FAULTCOND (GPTIMER_OCTL_01_CCPO_FAULTCOND) /*! * @brief Mirror CCP of first capture and compare register in counter group. */ #define DL_TIMER_CC_OCTL_SRC_CC0_MIRR_ALL (GPTIMER_OCTL_01_CCPO_CC0_MIRROR_ALL) /*! * @brief Mirror CCP of second capture and compare register in counter group. */ #define DL_TIMER_CC_OCTL_SRC_CC1_MIRR_ALL (GPTIMER_OCTL_01_CCPO_CC1_MIRROR_ALL) /*! * @brief Dead band inserted output */ #define DL_TIMER_CC_OCTL_SRC_DEAD_BAND (GPTIMER_OCTL_01_CCPO_DEADBAND) /*! * @brief Counter direction. */ #define DL_TIMER_CC_OCTL_SRC_CNTDIR (GPTIMER_OCTL_01_CCPO_CNTDIR) /** @}*/ /** @addtogroup DL_TIMER_CC_SWFRCACT_CMPL * @{ */ /*! * @brief The CCP complimentary output value is unaffected by the event. */ #define DL_TIMER_CC_SWFRCACT_CMPL_DISABLED (GPTIMER_CCACT_01_SWFRCACT_CMPL_DISABLED) /*! * @brief CCP complimentary output value is set high. */ #define DL_TIMER_CC_SWFRCACT_CMPL_HIGH (GPTIMER_CCACT_01_SWFRCACT_CMPL_CCP_HIGH) /*! * @brief CCP complimentary output value is set low. */ #define DL_TIMER_CC_SWFRCACT_CMPL_LOW (GPTIMER_CCACT_01_SWFRCACT_CMPL_CCP_LOW) /** @}*/ /** @addtogroup DL_TIMER_CC_SWFRCACT * @{ */ /*! * @brief The CCP output value is unaffected by the event. */ #define DL_TIMER_CC_SWFRCACT_DISABLED (GPTIMER_CCACT_01_SWFRCACT_DISABLED) /*! * @brief CCP output value is set high. */ #define DL_TIMER_CC_SWFRCACT_HIGH (GPTIMER_CCACT_01_SWFRCACT_CCP_HIGH) /*! * @brief CCP output value is set low. */ #define DL_TIMER_CC_SWFRCACT_LOW (GPTIMER_CCACT_01_SWFRCACT_CCP_LOW) /** @}*/ /** @addtogroup DL_TIMER_CC_FEXACT * @{ */ /*! * @brief The CCP output value is unaffected by the event. */ #define DL_TIMER_CC_FEXACT_DISABLED (GPTIMER_CCACT_01_FEXACT_DISABLED) /*! * @brief CCP output value is set high. */ #define DL_TIMER_CC_FEXACT_HIGH (GPTIMER_CCACT_01_FEXACT_CCP_HIGH) /*! * @brief CCP output value is set low. */ #define DL_TIMER_CC_FEXACT_LOW (GPTIMER_CCACT_01_FEXACT_CCP_LOW) /*! * @brief CCP output value is toggled. */ #define DL_TIMER_CC_FEXACT_TOGGLE (GPTIMER_CCACT_01_FEXACT_CCP_TOGGLE) /*! * @brief CCP output value is Hi-Z. */ #define DL_TIMER_CC_FEXACT_HIGHZ (GPTIMER_CCACT_01_FEXACT_CCP_HIGHZ) /** @}*/ /** @addtogroup DL_TIMER_CC_FENACT * @{ */ /*! * @brief The CCP output value is unaffected by the event. */ #define DL_TIMER_CC_FENACT_DISABLED (GPTIMER_CCACT_01_FENACT_DISABLED) /*! * @brief CCP output value is set high. */ #define DL_TIMER_CC_FENACT_CCP_HIGH (GPTIMER_CCACT_01_FENACT_CCP_HIGH) /*! * @brief CCP output value is set low */ #define DL_TIMER_CC_FENACT_CCP_LOW (GPTIMER_CCACT_01_FENACT_CCP_LOW) /*! * @brief CCP output value is toggled. */ #define DL_TIMER_CC_FENACT_CCP_TOGGLE \ (GPTIMER_CCACT_01_FENACT_CCP_TOGGLE) /*! * @brief CCP output value is Hi-Z. */ #define DL_TIMER_CC_FENACT_HIGHZ (GPTIMER_CCACT_01_FENACT_CCP_HIGHZ) /** @}*/ /** @addtogroup DL_TIMER_CC_CC2UACT * @{ */ /*! * @brief The CCP output value is unaffected by the event. */ #define DL_TIMER_CC_CC2UACT_DISABLED (GPTIMER_CCACT_01_CC2UACT_DISABLED) /*! * @brief CCP output value is set high. */ #define DL_TIMER_CC_CC2UACT_CCP_HIGH (GPTIMER_CCACT_01_CC2UACT_CCP_HIGH) /*! * @brief CCP output value is set low */ #define DL_TIMER_CC_CC2UACT_CCP_LOW (GPTIMER_CCACT_01_CC2UACT_CCP_LOW) /*! * @brief CCP output value is toggled. */ #define DL_TIMER_CC_CC2UACT_CCP_TOGGLE \ (GPTIMER_CCACT_01_CC2UACT_CCP_TOGGLE) /** @}*/ /** @addtogroup DL_TIMER_CC_CC2DACT * @{ */ /*! * @brief The CCP output value is unaffected by the event. */ #define DL_TIMER_CC_CC2DACT_DISABLED (GPTIMER_CCACT_01_CC2DACT_DISABLED) /*! * @brief CCP output value is set high. */ #define DL_TIMER_CC_CC2DACT_CCP_HIGH (GPTIMER_CCACT_01_CC2DACT_CCP_HIGH) /*! * @brief CCP output value is set low */ #define DL_TIMER_CC_CC2DACT_CCP_LOW (GPTIMER_CCACT_01_CC2DACT_CCP_LOW) /*! * @brief CCP output value is toggled. */ #define DL_TIMER_CC_CC2DACT_CCP_TOGGLE \ (GPTIMER_CCACT_01_CC2DACT_CCP_TOGGLE) /** @}*/ /** @addtogroup DL_TIMER_CC_CUACT * @{ */ /*! * @brief The CCP output value is unaffected by the event */ #define DL_TIMER_CC_CUACT_DISABLED (GPTIMER_CCACT_01_CUACT_DISABLED) /*! * @brief CCP output value is set high */ #define DL_TIMER_CC_CUACT_CCP_HIGH (GPTIMER_CCACT_01_CUACT_CCP_HIGH) /*! * @brief CCP output value is set low */ #define DL_TIMER_CC_CUACT_CCP_LOW (GPTIMER_CCACT_01_CUACT_CCP_LOW) /*! * @brief CCP output value is toggled */ #define DL_TIMER_CC_CUACT_CCP_TOGGLE (GPTIMER_CCACT_01_CUACT_CCP_TOGGLE) /** @}*/ /** @addtogroup DL_TIMER_CC_CDACT * @{ */ /*! * @brief The CCP output value is unaffected by the event */ #define DL_TIMER_CC_CDACT_DISABLED (GPTIMER_CCACT_01_CDACT_DISABLED) /*! * @brief CCP output value is set high */ #define DL_TIMER_CC_CDACT_CCP_HIGH (GPTIMER_CCACT_01_CDACT_CCP_HIGH) /*! * @brief CCP output value is set low */ #define DL_TIMER_CC_CDACT_CCP_LOW (GPTIMER_CCACT_01_CDACT_CCP_LOW) /*! * @brief CCP output value is toggled */ #define DL_TIMER_CC_CDACT_CCP_TOGGLE (GPTIMER_CCACT_01_CDACT_CCP_TOGGLE) /** @}*/ /** @addtogroup DL_TIMER_CC_LACT * @{ */ /*! * @brief The CCP output value is unaffected by the event */ #define DL_TIMER_CC_LACT_DISABLED (GPTIMER_CCACT_01_LACT_DISABLED) /*! * @brief CCP output value is set high */ #define DL_TIMER_CC_LACT_CCP_HIGH (GPTIMER_CCACT_01_LACT_CCP_HIGH) /*! * @brief CCP output value is low */ #define DL_TIMER_CC_LACT_CCP_LOW (GPTIMER_CCACT_01_LACT_CCP_LOW) /*! * @brief CCP output value is toggled */ #define DL_TIMER_CC_LACT_CCP_TOGGLE (GPTIMER_CCACT_01_LACT_CCP_TOGGLE) /** @}*/ /** @addtogroup DL_TIMER_CC_ZACT * @{ */ /*! * @brief The CCP output value is unaffected by the event */ #define DL_TIMER_CC_ZACT_DISABLED (GPTIMER_CCACT_01_ZACT_DISABLED) /*! * @brief CCP output value is high */ #define DL_TIMER_CC_ZACT_CCP_HIGH (GPTIMER_CCACT_01_ZACT_CCP_HIGH) /*! * @brief CCP output value is low */ #define DL_TIMER_CC_ZACT_CCP_LOW (GPTIMER_CCACT_01_ZACT_CCP_LOW) /*! * @brief CCP output value is toggled */ #define DL_TIMER_CC_ZACT_CCP_TOGGLE (GPTIMER_CCACT_01_ZACT_CCP_TOGGLE) /** @}*/ /** @addtogroup DL_TIMER_CC_INPUT_INV * @{ */ /*! * @brief CCP input is not inverted */ #define DL_TIMER_CC_INPUT_INV_NOINVERT (GPTIMER_IFCTL_01_INV_NOINVERT) /*! * @brief CCP input is inverted */ #define DL_TIMER_CC_INPUT_INV_INVERT (GPTIMER_IFCTL_01_INV_INVERT) /** @}*/ /** @addtogroup DL_TIMER_CC_IN_SEL * @{ */ /*! * @brief CCP of the corresponding capture compare unit */ #define DL_TIMER_CC_IN_SEL_CCPX (GPTIMER_IFCTL_01_ISEL_CCPX_INPUT) /*! * @brief Input pair CCPX of the capture compare unit. For CCP0 input * pair is CCP1 and viceversa. */ #define DL_TIMER_CC_IN_SEL_CCPX_PAIR (GPTIMER_IFCTL_01_ISEL_CCPX_INPUT_PAIR) /*! * @brief CCP0 of the counter */ #define DL_TIMER_CC_IN_SEL_CCP0 (GPTIMER_IFCTL_01_ISEL_CCP0_INPUT) /*! * @brief Trigger */ #define DL_TIMER_CC_IN_SEL_TRIG (GPTIMER_IFCTL_01_ISEL_TRIG_INPUT) /*! * @brief XOR of CCP inputs as input source */ #define DL_TIMER_CC_IN_SEL_CCP_XOR (GPTIMER_IFCTL_01_ISEL_CCP_XOR) /*! * @brief subscriber 0 event as input source */ #define DL_TIMER_CC_IN_SEL_FSUB0 (GPTIMER_IFCTL_01_ISEL_FSUB0) /*! * @brief subscriber 1 event as input source */ #define DL_TIMER_CC_IN_SEL_FSUB1 (GPTIMER_IFCTL_01_ISEL_FSUB1) /*! * @brief Comparator 0 output */ #define DL_TIMER_CC_IN_SEL_COMP0 (GPTIMER_IFCTL_01_ISEL_COMP0) /*! * @brief Comparator 1 output */ #define DL_TIMER_CC_IN_SEL_COMP1 (GPTIMER_IFCTL_01_ISEL_COMP1) /*! * @brief Comparator 2 output. */ #define DL_TIMER_CC_IN_SEL_COMP2 (GPTIMER_IFCTL_01_ISEL_COMP2) /** @}*/ /** @addtogroup DL_TIMER_FAULT_SOURCE * @{ */ /*! * @brief Disables COMP0 as fault source */ #define DL_TIMER_FAULT_SOURCE_COMP0_DISABLE \ (GPTIMER_FSCTL_FAC0EN_DISABLE | (GPTIMER_FCTL_FSENAC0_LOWCTIVE << 16)) /*! * @brief Enables COMP0 as fault source and fault input is active low */ #define DL_TIMER_FAULT_SOURCE_COMP0_SENSE_LOW \ (GPTIMER_FSCTL_FAC0EN_ENABLE | (GPTIMER_FCTL_FSENAC0_LOWCTIVE << 16)) /*! * @brief Enables COMP0 as fault source and fault input is active high */ #define DL_TIMER_FAULT_SOURCE_COMP0_SENSE_HIGH \ (GPTIMER_FSCTL_FAC0EN_ENABLE | (GPTIMER_FCTL_FSENAC0_HIGHACTIVE << 16)) /*! * @brief Disables COMP1 as fault source */ #define DL_TIMER_FAULT_SOURCE_COMP1_DISABLE \ (GPTIMER_FSCTL_FAC1EN_DISABLE | (GPTIMER_FCTL_FSENAC1_LOWCTIVE << 16)) /*! * @brief Enables COMP1 as fault source and fault input is active low */ #define DL_TIMER_FAULT_SOURCE_COMP1_SENSE_LOW \ (GPTIMER_FSCTL_FAC1EN_ENABLE | (GPTIMER_FCTL_FSENAC1_LOWCTIVE << 16)) /*! * @brief Enables COMP1 as fault source and fault input is active high */ #define DL_TIMER_FAULT_SOURCE_COMP1_SENSE_HIGH \ (GPTIMER_FSCTL_FAC1EN_ENABLE | (GPTIMER_FCTL_FSENAC1_HIGHACTIVE << 16)) /*! * @brief Disables COMP2 as fault source */ #define DL_TIMER_FAULT_SOURCE_COMP2_DISABLE \ (GPTIMER_FSCTL_FAC2EN_DISABLE | (GPTIMER_FCTL_FSENAC2_LOWCTIVE << 16)) /*! * @brief Enables COMP2 as fault source and fault input is active low */ #define DL_TIMER_FAULT_SOURCE_COMP2_SENSE_LOW \ (GPTIMER_FSCTL_FAC2EN_ENABLE | (GPTIMER_FCTL_FSENAC2_LOWCTIVE << 16)) /*! * @brief Enables COMP2 as fault source and fault input is active high */ #define DL_TIMER_FAULT_SOURCE_COMP2_SENSE_HIGH \ (GPTIMER_FSCTL_FAC2EN_ENABLE | (GPTIMER_FCTL_FSENAC2_HIGHACTIVE << 16)) /*! * @brief Disables external fault pin 0 as fault source */ #define DL_TIMER_FAULT_SOURCE_EXTERNAL_0_DISABLE \ (GPTIMER_FSCTL_FEX0EN_DISABLE | (GPTIMER_FCTL_FSENEXT0_LOWCTIVE << 16)) /*! * @brief Enables external fault pin 0 as fault source and fault input is active * low */ #define DL_TIMER_FAULT_SOURCE_EXTERNAL_0_SENSE_LOW \ (GPTIMER_FSCTL_FEX0EN_ENABLE | (GPTIMER_FCTL_FSENEXT0_LOWCTIVE << 16)) /*! * @brief Enables external fault pin 0 as fault source and fault input is active * high */ #define DL_TIMER_FAULT_SOURCE_EXTERNAL_0_SENSE_HIGH \ (GPTIMER_FSCTL_FEX0EN_ENABLE | (GPTIMER_FCTL_FSENEXT0_HIGHACTIVE << 16)) /*! * @brief Disables external fault pin 1 as fault source */ #define DL_TIMER_FAULT_SOURCE_EXTERNAL_1_DISABLE \ (GPTIMER_FSCTL_FEX1EN_DISABLE | (GPTIMER_FCTL_FSENEXT1_LOWCTIVE << 16)) /*! * @brief Enables external fault pin 1 as fault source and fault input is active * low */ #define DL_TIMER_FAULT_SOURCE_EXTERNAL_1_SENSE_LOW \ (GPTIMER_FSCTL_FEX1EN_ENABLE | (GPTIMER_FCTL_FSENEXT1_LOWCTIVE << 16)) /*! * @brief Enables external fault pin 1 as fault source and fault input is active * high */ #define DL_TIMER_FAULT_SOURCE_EXTERNAL_1_SENSE_HIGH \ (GPTIMER_FSCTL_FEX1EN_ENABLE | (GPTIMER_FCTL_FSENEXT1_HIGHACTIVE << 16)) /*! * @brief Disables external fault pin 2 as fault source */ #define DL_TIMER_FAULT_SOURCE_EXTERNAL_2_DISABLE \ (GPTIMER_FSCTL_FEX2EN_DISABLE | (GPTIMER_FCTL_FSENEXT2_LOWCTIVE << 16)) /*! * @brief Enables external fault pin 2 as fault source and fault input is active * low */ #define DL_TIMER_FAULT_SOURCE_EXTERNAL_2_SENSE_LOW \ (GPTIMER_FSCTL_FEX2EN_ENABLE | (GPTIMER_FCTL_FSENEXT2_LOWCTIVE << 16)) /*! * @brief Enables external fault pin 2 as fault source and fault input is active * high */ #define DL_TIMER_FAULT_SOURCE_EXTERNAL_2_SENSE_HIGH \ (GPTIMER_FSCTL_FEX2EN_ENABLE | (GPTIMER_FCTL_FSENEXT2_HIGHACTIVE << 16)) /** @}*/ /** @addtogroup DL_TIMER_FAULT_CONFIG_TFIM * @{ */ /*! * @brief Selected trigger doesn't participate as a fault input. */ #define DL_TIMER_FAULT_CONFIG_TFIM_DISABLED (GPTIMER_FCTL_TFIM_DISABLED) /*! * @brief Selected trigger participates as a fault input. */ #define DL_TIMER_FAULT_CONFIG_TFIM_ENABLED (GPTIMER_FCTL_TFIM_ENABLED) /** @}*/ /** @addtogroup DL_TIMER_FAULT_CONFIG_FL * @{ */ /*! * @brief Overall fault condition is not dependent on the F bit in RIS */ #define DL_TIMER_FAULT_CONFIG_FL_NO_LATCH (GPTIMER_FCTL_FL_NO_LATCH) /*! * @brief Overall fault condition is dependent on the F bit in RIS */ #define DL_TIMER_FAULT_CONFIG_FL_LATCH_SW_CLR (GPTIMER_FCTL_FL_LATCH_SW_CLR) /*! * @brief Fault condition is latched. Fault condition is cleared on a zero event * if the fault input is 0 */ #define DL_TIMER_FAULT_CONFIG_FL_LATCH_Z_CLR (GPTIMER_FCTL_FL_LATCH_Z_CLR) /*! * @brief Fault condition is latched. Fault condition is cleared on a load event * if the fault input is 0 */ #define DL_TIMER_FAULT_CONFIG_FL_LATCH_LD_CLR (GPTIMER_FCTL_FL_LATCH_LD_CLR) /** @}*/ /** @addtogroup DL_TIMER_FAULT_CONFIG_FI * @{ */ /*! * @brief Fault condition is independent on all selected fault sources * coming into the Timer */ #define DL_TIMER_FAULT_CONFIG_FI_INDEPENDENT (GPTIMER_FCTL_FI_INDEPENDENT) /*! * @brief Fault condition is dependent on all selected fault sources * coming into the Timer */ #define DL_TIMER_FAULT_CONFIG_FI_DEPENDENT (GPTIMER_FCTL_FI_DEPENDENT) /** @}*/ /** @addtogroup DL_TIMER_FAULT_CONFIG_FIEN * @{ */ /*! * @brief Disables the input for fault detection from the device pin. */ #define DL_TIMER_FAULT_CONFIG_FIEN_DISABLED (GPTIMER_FCTL_FIEN_DISABLED) /*! * @brief Enables the input for fault detection from the device pin. */ #define DL_TIMER_FAULT_CONFIG_FIEN_ENABLED (GPTIMER_FCTL_FIEN_ENABLED) /** @}*/ /** @addtogroup DL_TIMER_FAULT_FILT * @{ */ /*! * @brief Input bypasses filter */ #define DL_TIMER_FAULT_FILTER_BYPASS (GPTIMER_FIFCTL_FILTEN_BYPASS) /*! * @brief Input filter is enabled */ #define DL_TIMER_FAULT_FILTER_FILTERED (GPTIMER_FIFCTL_FILTEN_FILTERED) /** @}*/ /** @addtogroup DL_TIMER_FAULT_FILTER_CPV * @{ */ /*! * @brief Input filter uses a stricter consecutive period count */ #define DL_TIMER_FAULT_FILTER_CPV_CONSEC_PER (GPTIMER_FIFCTL_CPV_CONSEC_PER) /*! * @brief Input filter uses majority voting */ #define DL_TIMER_FAULT_FILTER_CPV_VOTING (GPTIMER_FIFCTL_CPV_VOTING) /** @}*/ /** @addtogroup DL_TIMER_FAULT_FILTER_FP * @{ */ /*! * @brief Sample period for the input filter is set to 3 TIMCLK */ #define DL_TIMER_FAULT_FILTER_FP_PER_3 (GPTIMER_FIFCTL_FP_PER_3) /*! * @brief Sample period for the input filter is set to 5 TIMCLK */ #define DL_TIMER_FAULT_FILTER_FP_PER_5 (GPTIMER_FIFCTL_FP_PER_5) /*! * @brief Sample period for the input filter is set to 8 TIMCLK */ #define DL_TIMER_FAULT_FILTER_FP_PER_8 (GPTIMER_FIFCTL_FP_PER_8) /** @}*/ /** @addtogroup DL_TIMER_CC_INPUT_FILT_CPV * @{ */ /*! * @brief Input filter uses a stricter consecutive period count */ #define DL_TIMER_CC_INPUT_FILT_CPV_CONSEC_PER (GPTIMER_IFCTL_01_CPV_CONSECUTIVE) /*! * @brief Input filter uses majority voting */ #define DL_TIMER_CC_INPUT_FILT_CPV_VOTING (GPTIMER_IFCTL_01_CPV_VOTING) /** @}*/ /** @addtogroup DL_TIMER_CC_INPUT_FILT_FP * @{ */ /*! * @brief Sample period for the input filter is set to 3 TIMCLK */ #define DL_TIMER_CC_INPUT_FILT_FP_PER_3 (GPTIMER_IFCTL_01_FP__3) /*! * @brief Sample period for the input filter is set to 5 TIMCLK */ #define DL_TIMER_CC_INPUT_FILT_FP_PER_5 (GPTIMER_IFCTL_01_FP__5) /*! * @brief Sample period for the input filter is set to 8 TIMCLK */ #define DL_TIMER_CC_INPUT_FILT_FP_PER_8 (GPTIMER_IFCTL_01_FP__8) /** @}*/ /** @addtogroup DL_TIMER_INTERRUPT * @{ */ /*! * @brief Repeat Counter interrupt */ #define DL_TIMER_INTERRUPT_REPC_EVENT (GPTIMER_CPU_INT_IMASK_REPC_SET) /*! * @brief Fault interrupt */ #define DL_TIMER_INTERRUPT_FAULT_EVENT (GPTIMER_CPU_INT_IMASK_F_SET) /*! * @brief Timer zero interrupt */ #define DL_TIMER_INTERRUPT_ZERO_EVENT (GPTIMER_CPU_INT_IMASK_Z_SET) /*! * @brief Timer load interrupt */ #define DL_TIMER_INTERRUPT_LOAD_EVENT (GPTIMER_CPU_INT_IMASK_L_SET) /*! * @brief Timer capture for compare 0 down interrupt */ #define DL_TIMER_INTERRUPT_CC0_DN_EVENT (GPTIMER_CPU_INT_IMASK_CCD0_SET) /*! * @brief Timer capture for compare 1 down interrupt */ #define DL_TIMER_INTERRUPT_CC1_DN_EVENT (GPTIMER_CPU_INT_IMASK_CCD1_SET) /*! * @brief Timer capture for compare 2 down interrupt */ #define DL_TIMER_INTERRUPT_CC2_DN_EVENT (GPTIMER_CPU_INT_IMASK_CCD2_SET) /*! * @brief Timer capture for compare 3 down interrupt */ #define DL_TIMER_INTERRUPT_CC3_DN_EVENT (GPTIMER_CPU_INT_IMASK_CCD3_SET) /*! * @brief Timer capture for compare 4 down interrupt */ #define DL_TIMER_INTERRUPT_CC4_DN_EVENT (GPTIMER_CPU_INT_IMASK_CCD4_SET) /*! * @brief Timer capture for compare 5 down interrupt */ #define DL_TIMER_INTERRUPT_CC5_DN_EVENT (GPTIMER_CPU_INT_IMASK_CCD5_SET) /*! * @brief Timer capture for compare 0 up interrupt */ #define DL_TIMER_INTERRUPT_CC0_UP_EVENT (GPTIMER_CPU_INT_IMASK_CCU0_SET) /*! * @brief Timer capture for compare 1 up interrupt */ #define DL_TIMER_INTERRUPT_CC1_UP_EVENT (GPTIMER_CPU_INT_IMASK_CCU1_SET) /*! * @brief Timer capture for compare 2 up interrupt */ #define DL_TIMER_INTERRUPT_CC2_UP_EVENT (GPTIMER_CPU_INT_IMASK_CCU2_SET) /*! * @brief Timer capture for compare 3 up interrupt */ #define DL_TIMER_INTERRUPT_CC3_UP_EVENT (GPTIMER_CPU_INT_IMASK_CCU3_SET) /*! * @brief Timer capture for compare 4 up interrupt */ #define DL_TIMER_INTERRUPT_CC4_UP_EVENT (GPTIMER_CPU_INT_IMASK_CCU4_SET) /*! * @brief Timer capture for compare 5 up interrupt */ #define DL_TIMER_INTERRUPT_CC5_UP_EVENT (GPTIMER_CPU_INT_IMASK_CCU5_SET) /*! * @brief Timer over flow interrupt */ #define DL_TIMER_INTERRUPT_OVERFLOW_EVENT (GPTIMER_CPU_INT_IMASK_TOV_SET) /*! * @brief Timer QEI mode direction change event */ #define DL_TIMER_INTERRUPT_DC_EVENT (GPTIMER_CPU_INT_IMASK_DC_SET) /*! * @brief Timer QEI mode transition error */ #define DL_TIMER_INTERRUPT_QEIERR_EVENT (GPTIMER_CPU_INT_IMASK_QEIERR_SET) /** @}*/ /** @addtogroup DL_TIMER_EVENT * @{ */ /*! * @brief Repeat Counter event */ #define DL_TIMER_EVENT_REPC_EVENT (GPTIMER_GEN_EVENT0_IMASK_REPC_SET) /*! * @brief Fault event */ #define DL_TIMER_EVENT_FAULT_EVENT (GPTIMER_GEN_EVENT0_IMASK_F_SET) /*! * @brief Timer zero event */ #define DL_TIMER_EVENT_ZERO_EVENT (GPTIMER_GEN_EVENT0_IMASK_Z_SET) /*! * @brief Timer load event */ #define DL_TIMER_EVENT_LOAD_EVENT (GPTIMER_GEN_EVENT0_IMASK_L_SET) /*! * @brief Timer capture for compare 0 down event */ #define DL_TIMER_EVENT_CC0_DN_EVENT (GPTIMER_GEN_EVENT0_IMASK_CCD0_SET) /*! * @brief Timer capture for compare 1 down event */ #define DL_TIMER_EVENT_CC1_DN_EVENT (GPTIMER_GEN_EVENT0_IMASK_CCD1_SET) /*! * @brief Timer capture for compare 2 down interrupt */ #define DL_TIMER_EVENT_CC2_DN_EVENT (GPTIMER_GEN_EVENT0_IMASK_CCD2_SET) /*! * @brief Timer capture for compare 3 down event */ #define DL_TIMER_EVENT_CC3_DN_EVENT (GPTIMER_GEN_EVENT0_IMASK_CCD3_SET) /*! * @brief Timer capture for compare 4 down event */ #define DL_TIMER_EVENT_CC4_DN_EVENT (GPTIMER_GEN_EVENT0_IMASK_CCD4_SET) /*! * @brief Timer capture for compare 5 down event */ #define DL_TIMER_EVENT_CC5_DN_EVENT (GPTIMER_GEN_EVENT0_IMASK_CCD5_SET) /*! * @brief Timer capture for compare 0 up event */ #define DL_TIMER_EVENT_CC0_UP_EVENT (GPTIMER_GEN_EVENT0_IMASK_CCU0_SET) /*! * @brief Timer capture for compare 1 up event */ #define DL_TIMER_EVENT_CC1_UP_EVENT (GPTIMER_GEN_EVENT0_IMASK_CCU1_SET) /*! * @brief Timer capture for compare 2 up event */ #define DL_TIMER_EVENT_CC2_UP_EVENT (GPTIMER_GEN_EVENT0_IMASK_CCU2_SET) /*! * @brief Timer capture for compare 3 up event */ #define DL_TIMER_EVENT_CC3_UP_EVENT (GPTIMER_GEN_EVENT0_IMASK_CCU3_SET) /*! * @brief Timer capture for compare 4 up event */ #define DL_TIMER_EVENT_CC4_UP_EVENT (GPTIMER_GEN_EVENT0_IMASK_CCU4_SET) /*! event */ #define DL_TIMER_EVENT_CC5_UP_EVENT (GPTIMER_GEN_EVENT0_IMASK_CCU5_SET) /*! * @brief Timer over flow event */ #define DL_TIMER_EVENT_OVERFLOW_EVENT (GPTIMER_GEN_EVENT0_IMASK_TOV_SET) /*! * @brief Timer qei mode direction change event */ #define DL_TIMER_EVENT_DC_EVENT (GPTIMER_GEN_EVENT0_IMASK_DC_SET) /*! * @brief Timer qei mode transition error */ #define DL_TIMER_EVENT_QEIERR_EVENT (GPTIMER_GEN_EVENT0_IMASK_QEIERR_SET) /** @}*/ /** @addtogroup DL_TIMER_CCP0_DIS_OUT_ADV * @{ */ /** * @brief CCP0 output is forced low when timer is disabled */ #define DL_TIMER_CCP0_DIS_OUT_ADV_FORCE_LOW (GPTIMER_ODIS_C0CCP0_CCP_OUTPUT_LOW) /** * @brief CCP0 output is set by the OCTL when timer is disabled */ #define DL_TIMER_CCP0_DIS_OUT_ADV_SET_BY_OCTL \ (GPTIMER_ODIS_C0CCP0_CCP_OUTPUT_OCTL) /** @}*/ /** @addtogroup DL_TIMER_CCP1_DIS_OUT_ADV * @{ */ /** * @brief CCP1 output is forced low when timer is disabled */ #define DL_TIMER_CCP1_DIS_OUT_ADV_FORCE_LOW (GPTIMER_ODIS_C0CCP1_CCP_OUTPUT_LOW) /** * @brief CCP1 output is set by the OCTL when timer is disabled */ #define DL_TIMER_CCP1_DIS_OUT_ADV_SET_BY_OCTL \ (GPTIMER_ODIS_C0CCP1_CCP_OUTPUT_OCTL) /** @}*/ /** @addtogroup DL_TIMER_CCP2_DIS_OUT_ADV * @{ */ /** * @brief CCP2 output is forced low when timer is disabled */ #define DL_TIMER_CCP2_DIS_OUT_ADV_FORCE_LOW (GPTIMER_ODIS_C0CCP2_CCP_OUTPUT_LOW) /** * @brief CCP2 output is set by the OCTL when timer is disabled */ #define DL_TIMER_CCP2_DIS_OUT_ADV_SET_BY_OCTL \ (GPTIMER_ODIS_C0CCP2_CCP_OUTPUT_OCTL) /** @}*/ /** @addtogroup DL_TIMER_CCP3_DIS_OUT_ADV * @{ */ /** * @brief CCP3 output is forced low when timer is disabled */ #define DL_TIMER_CCP3_DIS_OUT_ADV_FORCE_LOW (GPTIMER_ODIS_C0CCP3_CCP_OUTPUT_LOW) /** * @brief CCP3 output is set by the OCTL when timer is disabled */ #define DL_TIMER_CCP3_DIS_OUT_ADV_SET_BY_OCTL \ (GPTIMER_ODIS_C0CCP3_CCP_OUTPUT_OCTL) /** @}*/ /* clang-format on */ /*! @enum DL_TIMER_CLOCK */ typedef enum { /*! Selects BUSCLK as clock source */ DL_TIMER_CLOCK_BUSCLK = GPTIMER_CLKSEL_BUSCLK_SEL_ENABLE, /*! Selects 2X BUSCLK as clock source */ DL_TIMER_CLOCK_2X_BUSCLK = GPTIMER_CLKSEL_BUS2XCLK_SEL_ENABLE, /*! Selects MFCLK as clock source */ DL_TIMER_CLOCK_MFCLK = GPTIMER_CLKSEL_MFCLK_SEL_ENABLE, /*! Selects LFCLK as clock source */ DL_TIMER_CLOCK_LFCLK = GPTIMER_CLKSEL_LFCLK_SEL_ENABLE, /*! Disables selected clock source */ DL_TIMER_CLOCK_DISABLE = GPTIMER_CLKSEL_LFCLK_SEL_DISABLE, } DL_TIMER_CLOCK; /*! @enum DL_TIMER_CLOCK_DIVIDE */ typedef enum { /*! Timer source clock divide ratio set to 1 */ DL_TIMER_CLOCK_DIVIDE_1 = GPTIMER_CLKDIV_RATIO_DIV_BY_1, /*! Timer source clock divide ratio set to 2 */ DL_TIMER_CLOCK_DIVIDE_2 = GPTIMER_CLKDIV_RATIO_DIV_BY_2, /*! Timer source clock divide ratio set to 3 */ DL_TIMER_CLOCK_DIVIDE_3 = GPTIMER_CLKDIV_RATIO_DIV_BY_3, /*! Timer source clock divide ratio set to 4 */ DL_TIMER_CLOCK_DIVIDE_4 = GPTIMER_CLKDIV_RATIO_DIV_BY_4, /*! Timer source clock divide ratio set to 5 */ DL_TIMER_CLOCK_DIVIDE_5 = GPTIMER_CLKDIV_RATIO_DIV_BY_5, /*! Timer source clock divide ratio set to 6 */ DL_TIMER_CLOCK_DIVIDE_6 = GPTIMER_CLKDIV_RATIO_DIV_BY_6, /*! Timer source clock divide ratio set to 7 */ DL_TIMER_CLOCK_DIVIDE_7 = GPTIMER_CLKDIV_RATIO_DIV_BY_7, /*! Timer source clock divide ratio set to 8 */ DL_TIMER_CLOCK_DIVIDE_8 = GPTIMER_CLKDIV_RATIO_DIV_BY_8, } DL_TIMER_CLOCK_DIVIDE; /*! @enum DL_TIMER_CCP_DIS_OUT */ typedef enum { /*! CCP output source is disabled and driven low before conditional * inversion */ DL_TIMER_CCP_DIS_OUT_LOW = GPTIMER_ODIS_C0CCP0_CCP_OUTPUT_LOW, /*! CCP output source is not disabled */ DL_TIMER_CCP_DIS_OUT_SET_BY_OCTL = GPTIMER_ODIS_C0CCP0_CCP_OUTPUT_OCTL, } DL_TIMER_CCP_DIS_OUT; /*! @enum DL_TIMER_CC_INDEX */ typedef enum { /*! Index associated to Capture Compare 0 */ DL_TIMER_CC_0_INDEX = 0, /*! Index associated to Capture Compare 1 */ DL_TIMER_CC_1_INDEX = 1, /*! Index associated to Capture Compare 2 */ DL_TIMER_CC_2_INDEX = 2, /*! Index associated to Capture Compare 3 */ DL_TIMER_CC_3_INDEX = 3, /*! Index associated to Capture Compare 4 */ DL_TIMER_CC_4_INDEX = 4, /*! Index associated to Capture Compare 5 */ DL_TIMER_CC_5_INDEX = 5, } DL_TIMER_CC_INDEX; /*! @enum DL_TIMER_EXT_TRIG_SEL*/ typedef enum { /*! External trigger 0 */ DL_TIMER_EXT_TRIG_SEL_TRIG_0 = GPTIMER_TSEL_ETSEL_TRIG0, /*! External trigger 1 */ DL_TIMER_EXT_TRIG_SEL_TRIG_1 = GPTIMER_TSEL_ETSEL_TRIG1, /*! External trigger 2 */ DL_TIMER_EXT_TRIG_SEL_TRIG_2 = GPTIMER_TSEL_ETSEL_TRIG2, /*! External trigger 3 */ DL_TIMER_EXT_TRIG_SEL_TRIG_3 = GPTIMER_TSEL_ETSEL_TRIG3, /*! External trigger 4 */ DL_TIMER_EXT_TRIG_SEL_TRIG_4 = GPTIMER_TSEL_ETSEL_TRIG4, /*! External trigger 5 */ DL_TIMER_EXT_TRIG_SEL_TRIG_5 = GPTIMER_TSEL_ETSEL_TRIG5, /*! External trigger 6 */ DL_TIMER_EXT_TRIG_SEL_TRIG_6 = GPTIMER_TSEL_ETSEL_TRIG6, /*! External trigger 7 */ DL_TIMER_EXT_TRIG_SEL_TRIG_7 = GPTIMER_TSEL_ETSEL_TRIG7, /*! External trigger 8 */ DL_TIMER_EXT_TRIG_SEL_TRIG_8 = GPTIMER_TSEL_ETSEL_TRIG8, /*! External trigger 9 */ DL_TIMER_EXT_TRIG_SEL_TRIG_9 = GPTIMER_TSEL_ETSEL_TRIG9, /*! External trigger 10 */ DL_TIMER_EXT_TRIG_SEL_TRIG_10 = GPTIMER_TSEL_ETSEL_TRIG10, /*! External trigger 11 */ DL_TIMER_EXT_TRIG_SEL_TRIG_11 = GPTIMER_TSEL_ETSEL_TRIG11, /*! External trigger 12 */ DL_TIMER_EXT_TRIG_SEL_TRIG_12 = GPTIMER_TSEL_ETSEL_TRIG12, /*! External trigger 13 */ DL_TIMER_EXT_TRIG_SEL_TRIG_13 = GPTIMER_TSEL_ETSEL_TRIG13, /*! External trigger 14 */ DL_TIMER_EXT_TRIG_SEL_TRIG_14 = GPTIMER_TSEL_ETSEL_TRIG14, /*! External trigger 15 */ DL_TIMER_EXT_TRIG_SEL_TRIG_15 = GPTIMER_TSEL_ETSEL_TRIG15, /*! External event subscriber 0 */ DL_TIMER_EXT_TRIG_SEL_TRIG_SUB_0 = GPTIMER_TSEL_ETSEL_TRIG_SUB0, /*! External event subscriber 1 */ DL_TIMER_EXT_TRIG_SEL_TRIG_SUB_1 = GPTIMER_TSEL_ETSEL_TRIG_SUB1, } DL_TIMER_EXT_TRIG_SEL; /*! @enum DL_TIMER_TIMER_MODE */ typedef enum { /*! Configures Timer in one shot mode in DOWN COUNTING mode */ DL_TIMER_TIMER_MODE_ONE_SHOT = (GPTIMER_CTRCTL_CM_DOWN | GPTIMER_CTRCTL_REPEAT_REPEAT_0), /*! Configures Timer in periodic mode in DOWN COUNTING mode */ DL_TIMER_TIMER_MODE_PERIODIC = (GPTIMER_CTRCTL_CM_DOWN | GPTIMER_CTRCTL_REPEAT_REPEAT_1), /*! Configures Timer in one shot mode in UP COUNTING mode */ DL_TIMER_TIMER_MODE_ONE_SHOT_UP = (GPTIMER_CTRCTL_CM_UP | GPTIMER_CTRCTL_REPEAT_REPEAT_0), /*! Configures Timer in periodic mode in UP COUNTING mode */ DL_TIMER_TIMER_MODE_PERIODIC_UP = (GPTIMER_CTRCTL_CM_UP | GPTIMER_CTRCTL_REPEAT_REPEAT_1), /*! Configures Timer in one shot mode in UP/DOWN COUNTING mode */ DL_TIMER_TIMER_MODE_ONE_SHOT_UP_DOWN = (GPTIMER_CTRCTL_CM_UP_DOWN | GPTIMER_CTRCTL_REPEAT_REPEAT_0), /*! Configures Timer in periodic mode in UP/DOWN COUNTING mode */ DL_TIMER_TIMER_MODE_PERIODIC_UP_DOWN = (GPTIMER_CTRCTL_CM_UP_DOWN | GPTIMER_CTRCTL_REPEAT_REPEAT_1), } DL_TIMER_TIMER_MODE; /*! @enum DL_TIMER_CAPTURE_MODE */ typedef enum { /*! Configures Timer in edge time capture mode and timer is configured *! in down counting mode */ DL_TIMER_CAPTURE_MODE_EDGE_TIME, /*! Configures Timer in period capture mode and timer is configured *! in down counting mode */ DL_TIMER_CAPTURE_MODE_PERIOD_CAPTURE, /*! Configures Timer in pulse width capture mode and timer is configured *! in down counting mode */ DL_TIMER_CAPTURE_MODE_PULSE_WIDTH, /*! Configures Timer in edge time capture mode and timer is configured *! in up counting mode */ DL_TIMER_CAPTURE_MODE_EDGE_TIME_UP, /*! Configures Timer in period capture mode and timer is configured *! in up counting mode */ DL_TIMER_CAPTURE_MODE_PERIOD_CAPTURE_UP, /*! Configures Timer in pulse width capture mode and timer is configured *! in up counting mode */ DL_TIMER_CAPTURE_MODE_PULSE_WIDTH_UP, } DL_TIMER_CAPTURE_MODE; /*! @enum DL_TIMER_CAPTURE_COMBINED_MODE */ typedef enum { /*! Configures Timer in pulse width and period mode and timer is configured *! in down counting mode */ DL_TIMER_CAPTURE_COMBINED_MODE_PULSE_WIDTH_AND_PERIOD, /*! Configures Timer in pulse width and period mode and timer is configured *! in up counting mode */ DL_TIMER_CAPTURE_COMBINED_MODE_PULSE_WIDTH_AND_PERIOD_UP, } DL_TIMER_CAPTURE_COMBINED_MODE; /*! @enum DL_TIMER_COMPARE_MODE */ typedef enum { /*! Configures Timer in edge count mode and timer is configured *! in down counting mode */ DL_TIMER_COMPARE_MODE_EDGE_COUNT, /*! Configures Timer in edge count mode and timer is configured *! in up counting mode */ DL_TIMER_COMPARE_MODE_EDGE_COUNT_UP, /*! Configures Timer in edge count mode and timer is configured *! in up/down counting mode */ DL_TIMER_COMPARE_MODE_EDGE_COUNT_UP_DOWN, } DL_TIMER_COMPARE_MODE; /*! @enum DL_TIMER_COUNT_MODE */ typedef enum { /*! Timer counts in DOWN mode */ DL_TIMER_COUNT_MODE_DOWN = GPTIMER_CTRCTL_CM_DOWN, /*! Timer counts in UP/DOWN mode */ DL_TIMER_COUNT_MODE_UP_DOWN = GPTIMER_CTRCTL_CM_UP_DOWN, /*! Timer counts in UP mode */ DL_TIMER_COUNT_MODE_UP = GPTIMER_CTRCTL_CM_UP, } DL_TIMER_COUNT_MODE; /*! @enum DL_TIMER */ typedef enum { /*! Start running timer */ DL_TIMER_START = GPTIMER_CTRCTL_EN_ENABLED, /*! Don't start running timer */ DL_TIMER_STOP = GPTIMER_CTRCTL_EN_DISABLED, } DL_TIMER; /*! @enum DL_TIMER_INTERM_INT */ typedef enum { /*! Enables intermediate interrupt in timer mode */ DL_TIMER_INTERM_INT_ENABLED = GPTIMER_CCCTL_01_COC_COMPARE, /*! Disabled intermediate interrupt in timer mode */ DL_TIMER_INTERM_INT_DISABLED = GPTIMER_CCCTL_01_COC_CAPTURE, } DL_TIMER_INTERM_INT; /*! @enum DL_TIMER_CAPTURE_EDGE_DETECTION_MODE */ typedef enum { /*! Selects rising edge detection */ DL_TIMER_CAPTURE_EDGE_DETECTION_MODE_RISING = GPTIMER_CCCTL_01_CCOND_CC_TRIG_RISE, /*! Selects falling edge detection */ DL_TIMER_CAPTURE_EDGE_DETECTION_MODE_FALLING = GPTIMER_CCCTL_01_CCOND_CC_TRIG_FALL, /*! Selects both falling and rising edge detection */ DL_TIMER_CAPTURE_EDGE_DETECTION_MODE_EDGE = GPTIMER_CCCTL_01_CCOND_CC_TRIG_EDGE, } DL_TIMER_CAPTURE_EDGE_DETECTION_MODE; /*! @enum DL_TIMER_COMPARE_EDGE_DETECTION_MODE */ typedef enum { /*! Selects rising edge detection */ DL_TIMER_COMPARE_EDGE_DETECTION_MODE_RISING = GPTIMER_CCCTL_01_ACOND_CC_TRIG_RISE, /*! Selects falling edge detection */ DL_TIMER_COMPARE_EDGE_DETECTION_MODE_FALLING = GPTIMER_CCCTL_01_ACOND_CC_TRIG_FALL, /*! Selects both (rising and falling) edge detection */ DL_TIMER_COMPARE_EDGE_DETECTION_MODE_EDGE = GPTIMER_CCCTL_01_ACOND_CC_TRIG_EDGE, } DL_TIMER_COMPARE_EDGE_DETECTION_MODE; /*! @enum DL_TIMER_PWM_MODE */ typedef enum { /*! Configured Timer for PWM in edge align mode */ DL_TIMER_PWM_MODE_EDGE_ALIGN = GPTIMER_CTRCTL_CM_DOWN, /*! Configured Timer for PWM in edge align mode */ DL_TIMER_PWM_MODE_EDGE_ALIGN_UP = GPTIMER_CTRCTL_CM_UP, /*! Configured Timer for PWM in center align mode */ DL_TIMER_PWM_MODE_CENTER_ALIGN = GPTIMER_CTRCTL_CM_UP_DOWN, } DL_TIMER_PWM_MODE; /*! @enum DL_TIMER_DEAD_BAND_MODE */ typedef enum { /*! Selects dead band insertion mode 0 */ DL_TIMER_DEAD_BAND_MODE_0 = GPTIMER_DBCTL_M1_ENABLE_DISABLED, /*! Selects dead band insertion mode 1 */ DL_TIMER_DEAD_BAND_MODE_1 = GPTIMER_DBCTL_M1_ENABLE_ENABLED, } DL_TIMER_DEAD_BAND_MODE; /*! @enum DL_TIMER_FAULT_ENTRY_CCP */ typedef enum { /*! The CCP output value is not affected by the event */ DL_TIMER_FAULT_ENTRY_CCP_DISABLED = GPTIMER_CCACT_01_FENACT_DISABLED, /*! The CCP output value is set high */ DL_TIMER_FAULT_ENTRY_CCP_HIGH = GPTIMER_CCACT_01_FENACT_CCP_HIGH, /*! The CCP output value is set to low */ DL_TIMER_FAULT_ENTRY_CCP_LOW = GPTIMER_CCACT_01_FENACT_CCP_LOW, /*! The CCP output value is toggled*/ DL_TIMER_FAULT_ENTRY_CCP_TOGGLE = GPTIMER_CCACT_01_FENACT_CCP_TOGGLE, /*! The CCP output value is High-Z*/ DL_TIMER_FAULT_ENTRY_CCP_HIGHZ = GPTIMER_CCACT_01_FENACT_CCP_HIGHZ, } DL_TIMER_FAULT_ENTRY_CCP; /*! @enum DL_TIMER_FAULT_EXIT_CCP */ typedef enum { /*! The CCP output value is not affected by the event */ DL_TIMER_FAULT_EXIT_CCP_DISABLED = GPTIMER_CCACT_01_FEXACT_DISABLED, /*! The CCP output value is set high */ DL_TIMER_FAULT_EXIT_CCP_HIGH = GPTIMER_CCACT_01_FEXACT_CCP_HIGH, /*! The CCP output value is set to low */ DL_TIMER_FAULT_EXIT_CCP_LOW = GPTIMER_CCACT_01_FEXACT_CCP_LOW, /*! The CCP output value is toggled*/ DL_TIMER_FAULT_EXIT_CCP_TOGGLE = GPTIMER_CCACT_01_FEXACT_CCP_TOGGLE, /*! The CCP output value is High-Z*/ DL_TIMER_FAULT_EXIT_CCP_HIGHZ = GPTIMER_CCACT_01_FEXACT_CCP_HIGHZ, } DL_TIMER_FAULT_EXIT_CCP; /*! @enum DL_TIMER_FAULT_EXIT_CTR */ typedef enum { /*! Timer resumes counting upon release of fault condition */ DL_TIMER_FAULT_EXIT_CTR_RESUME = GPTIMER_CTRCTL_FRB_RESUME, /*! Timer resumes operation based on counter value after enable * configuration */ DL_TIMER_FAULT_EXIT_CTR_CVAE_ACTION = GPTIMER_CTRCTL_FRB_CVAE_ACTION, } DL_TIMER_FAULT_EXIT_CTR; /*! @enum DL_TIMER_FAULT_ENTRY_CTR */ typedef enum { /*! Timer counter continues running during fault */ DL_TIMER_FAULT_ENTRY_CTR_CONT_COUNT = GPTIMER_CTRCTL_FB_CONT_COUNT, /*! Timer counter continues is suspended during fault */ DL_TIMER_FAULT_ENTRY_CTR_SUSP_COUNT = GPTIMER_CTRCTL_FB_SUSP_COUNT, } DL_TIMER_FAULT_ENTRY_CTR; /*! @enum DL_TIMER_CROSS_TRIG_SRC */ typedef enum { /*! Use FSUB0 for Event manager */ DL_TIMER_CROSS_TRIG_SRC_FSUB0 = GPTIMER_CTTRIGCTL_EVTCTTRIGSEL_FSUB0, /*! Use FSUB1 for Event manager */ DL_TIMER_CROSS_TRIG_SRC_FSUB1 = GPTIMER_CTTRIGCTL_EVTCTTRIGSEL_FSUB1, /*! Use Zero event as cross trigger source */ DL_TIMER_CROSS_TRIG_SRC_ZERO = GPTIMER_CTTRIGCTL_EVTCTTRIGSEL_Z, /*! Use Load event as cross trigger source */ DL_TIMER_CROSS_TRIG_SRC_LOAD = GPTIMER_CTTRIGCTL_EVTCTTRIGSEL_L, /*! Use Capture Compare Down 0 event as cross trigger source. */ DL_TIMER_CROSS_TRIG_SRC_CCD0 = GPTIMER_CTTRIGCTL_EVTCTTRIGSEL_CCD0, /*! Use Capture Compare Down 1 event as cross trigger source. */ DL_TIMER_CROSS_TRIG_SRC_CCD1 = GPTIMER_CTTRIGCTL_EVTCTTRIGSEL_CCD1, /*! Use Capture Compare Down 2 event as cross trigger source. */ DL_TIMER_CROSS_TRIG_SRC_CCD2 = GPTIMER_CTTRIGCTL_EVTCTTRIGSEL_CCD2, /*! Use Capture Compare Down 3 event as cross trigger source. */ DL_TIMER_CROSS_TRIG_SRC_CCD3 = GPTIMER_CTTRIGCTL_EVTCTTRIGSEL_CCD3, /*! Use Capture Compare Up 0 event as cross trigger source. */ DL_TIMER_CROSS_TRIG_SRC_CCU0 = GPTIMER_CTTRIGCTL_EVTCTTRIGSEL_CCU0, /*! Use Capture Compare Up 1 event as cross trigger source. */ DL_TIMER_CROSS_TRIG_SRC_CCU1 = GPTIMER_CTTRIGCTL_EVTCTTRIGSEL_CCU1, /*! Use Capture Compare Up 2 event as cross trigger source. */ DL_TIMER_CROSS_TRIG_SRC_CCU2 = GPTIMER_CTTRIGCTL_EVTCTTRIGSEL_CCU2, /*! Use Capture Compare Up 3 event as cross trigger source. */ DL_TIMER_CROSS_TRIG_SRC_CCU3 = GPTIMER_CTTRIGCTL_EVTCTTRIGSEL_CCU3, } DL_TIMER_CROSS_TRIG_SRC; /*! @enum DL_TIMER_CROSS_TRIGGER_INPUT */ typedef enum { /*! Cross Triggering through subscriber ports enabled */ DL_TIMER_CROSS_TRIGGER_INPUT_ENABLED = GPTIMER_CTTRIGCTL_EVTCTEN_ENABLE, /*! Cross Triggering through subscriber ports disabled */ DL_TIMER_CROSS_TRIGGER_INPUT_DISABLED = GPTIMER_CTTRIGCTL_EVTCTEN_DISABLED, } DL_TIMER_CROSS_TRIGGER_INPUT; /*! @enum DL_TIMER_CROSS_TRIGGER_MODE */ typedef enum { /*! Cross Triggering Enabled */ DL_TIMER_CROSS_TRIGGER_MODE_ENABLED = GPTIMER_CTTRIGCTL_CTEN_ENABLE, /*! Cross Triggering Disabled */ DL_TIMER_CROSS_TRIGGER_MODE_DISABLED = GPTIMER_CTTRIGCTL_CTEN_DISABLED, } DL_TIMER_CROSS_TRIGGER_MODE; /*! @enum DL_TIMER_IIDX */ typedef enum { /*! Timer interrupt index for zero interrupt */ DL_TIMER_IIDX_ZERO = GPTIMER_CPU_INT_IIDX_STAT_Z, /*! Timer interrupt index for load interrupt */ DL_TIMER_IIDX_LOAD = GPTIMER_CPU_INT_IIDX_STAT_L, /*! Timer interrupt index for compare 0 down interrupt */ DL_TIMER_IIDX_CC0_DN = GPTIMER_CPU_INT_IIDX_STAT_CCD0, /*! Timer interrupt index for compare 1 down interrupt */ DL_TIMER_IIDX_CC1_DN = GPTIMER_CPU_INT_IIDX_STAT_CCD1, /*! Timer interrupt index for compare 2 down interrupt */ DL_TIMER_IIDX_CC2_DN = GPTIMER_CPU_INT_IIDX_STAT_CCD2, /*! Timer interrupt index for compare 3 down interrupt */ DL_TIMER_IIDX_CC3_DN = GPTIMER_CPU_INT_IIDX_STAT_CCD3, /*! Timer interrupt index for compare 0 up interrupt */ DL_TIMER_IIDX_CC0_UP = GPTIMER_CPU_INT_IIDX_STAT_CCU0, /*! Timer interrupt index for compare 1 up interrupt */ DL_TIMER_IIDX_CC1_UP = GPTIMER_CPU_INT_IIDX_STAT_CCU1, /*! Timer interrupt index for compare 2 up interrupt */ DL_TIMER_IIDX_CC2_UP = GPTIMER_CPU_INT_IIDX_STAT_CCU2, /*! Timer interrupt index for compare 3 up interrupt */ DL_TIMER_IIDX_CC3_UP = GPTIMER_CPU_INT_IIDX_STAT_CCU3, /*! Timer interrupt index for compare 4 down interrupt */ DL_TIMER_IIDX_CC4_DN = GPTIMER_CPU_INT_IIDX_STAT_CCD4, /*! Timer interrupt index for compare 5 down interrupt */ DL_TIMER_IIDX_CC5_DN = GPTIMER_CPU_INT_IIDX_STAT_CCD5, /*! Timer interrupt index for compare 4 up interrupt */ DL_TIMER_IIDX_CC4_UP = GPTIMER_CPU_INT_IIDX_STAT_CCU4, /*! Timer interrupt index for compare 5 up interrupt */ DL_TIMER_IIDX_CC5_UP = GPTIMER_CPU_INT_IIDX_STAT_CCU5, /*! Timer interrupt index for fault interrupt */ DL_TIMER_IIDX_FAULT = GPTIMER_CPU_INT_IIDX_STAT_F, /*! Timer interrupt index for timer overflow interrupt */ DL_TIMER_IIDX_OVERFLOW = GPTIMER_CPU_INT_IIDX_STAT_TOV, /*! Timer interrupt index for repeat counter * @note This is a Timer A specific interrupt. */ DL_TIMER_IIDX_REPEAT_COUNT = GPTIMER_CPU_INT_IIDX_STAT_REPC, /*! Timer interrupt index for direction change interrupt * @note Please refer the Timer TRM to determine TIMG instances which * support this feature. */ DL_TIMER_IIDX_DIR_CHANGE = GPTIMER_CPU_INT_IIDX_STAT_DC, /*! Timer interrupt index for QEI incorrect state transition * @note Please refer the Timer TRM to determine TIMG instances which * support this feature. */ DL_TIMER_IIDX_QEIERR = GPTIMER_CPU_INT_IIDX_STAT_QEIERR, } DL_TIMER_IIDX; /*! @enum DL_TIMER_PUBLISHER_INDEX */ typedef enum { /*! TIMER Publisher index 0 */ DL_TIMER_PUBLISHER_INDEX_0 = 0, /*! TIMER Publisher index 1 */ DL_TIMER_PUBLISHER_INDEX_1 = 1 } DL_TIMER_PUBLISHER_INDEX; /*! @enum DL_TIMER_SUBSCRIBER_INDEX */ typedef enum { /*! TIMER Subscriber index 0 */ DL_TIMER_SUBSCRIBER_INDEX_0 = 0, /*! TIMER Subscriber index 1 */ DL_TIMER_SUBSCRIBER_INDEX_1 = 1 } DL_TIMER_SUBSCRIBER_INDEX; /*! @enum DL_TIMER_EVENT_ROUTE */ typedef enum { /*! TIMER event route 1 */ DL_TIMER_EVENT_ROUTE_1 = 0, /*! TIMER event route 2 */ DL_TIMER_EVENT_ROUTE_2 = 12 } DL_TIMER_EVENT_ROUTE; /*! @enum DL_TIMER_INPUT_CHAN */ typedef enum { /*! Selected timer instance channel 0 as input capture channel */ DL_TIMER_INPUT_CHAN_0, /*! Selects timer instance channel 1 as input capture channel */ DL_TIMER_INPUT_CHAN_1, /*! Selects timer instance channel 2 as input capture channel. * Please refer to device DS to determine number of input channels * by the timer instance */ DL_TIMER_INPUT_CHAN_2, /*! Selects timer instance channel 3 as input capture channel. * Please refer to device DS to determine number of input channels * by the timer instance */ DL_TIMER_INPUT_CHAN_3, } DL_TIMER_INPUT_CHAN; /*! @enum DL_TIMER_DEBUG_RES */ typedef enum { /*! Resume counting */ DL_TIMER_DEBUG_RES_RESUME = GPTIMER_CTRCTL_DRB_RESUME, /*! Perform the action as specified by the Counter Value After Enable (CVAE) *! field. */ DL_TIMER_DEBUG_RES_CVAE_ACTION = GPTIMER_CTRCTL_DRB_CVAE_ACTION, } DL_TIMER_DEBUG_RES; /*! @enum DL_TIMER_CZC */ typedef enum { /*! Zero event is controlled by CCCTL0 Zero condition */ DL_TIMER_CZC_CCCTL0_ZCOND = GPTIMER_CTRCTL_CZC_CCCTL0_ZCOND, /*! Zero event is controlled by CCCTL1 Zero condition */ DL_TIMER_CZC_CCCTL1_ZCOND = GPTIMER_CTRCTL_CZC_CCCTL1_ZCOND, /*! Zero event is controlled by CCCTL2 Zero condition */ DL_TIMER_CZC_CCCTL2_ZCOND = GPTIMER_CTRCTL_CZC_CCCTL2_ZCOND, /*! Zero event is controlled by CCCTL3 Zero condition */ DL_TIMER_CZC_CCCTL3_ZCOND = GPTIMER_CTRCTL_CZC_CCCTL3_ZCOND, /*! Zero event is controlled by 2-input QEI mode */ DL_TIMER_CZC_QEI_2INP = GPTIMER_CTRCTL_CZC_QEI_2INP, /*! Zero event is controlled by 3-input QEI mode */ DL_TIMER_CZC_QEI_3INP = GPTIMER_CTRCTL_CZC_QEI_3INP, } DL_TIMER_CZC; /*! @enum DL_TIMER_CAC */ typedef enum { /*! Advance event is controlled by CCCTL0 advance condition */ DL_TIMER_CAC_CCCTL0_ACOND = GPTIMER_CTRCTL_CAC_CCCTL0_ACOND, /*! Advance event is controlled by CCCTL1 advance condition */ DL_TIMER_CAC_CCCTL1_ACOND = GPTIMER_CTRCTL_CAC_CCCTL1_ACOND, /*! Advance event is controlled by CCCTL2 advance condition */ DL_TIMER_CAC_CCCTL2_ACOND = GPTIMER_CTRCTL_CAC_CCCTL2_ACOND, /*! Advance event is controlled by CCCTL3 advance condition */ DL_TIMER_CAC_CCCTL3_ACOND = GPTIMER_CTRCTL_CAC_CCCTL3_ACOND, /*! Advance event is controlled by 2-input QEI mode */ DL_TIMER_CAC_QEI_2INP = GPTIMER_CTRCTL_CAC_QEI_2INP, /*! Advance event is controlled by 3-input QEI mode */ DL_TIMER_CAC_QEI_3INP = GPTIMER_CTRCTL_CAC_QEI_3INP, } DL_TIMER_CAC; /*! @enum DL_TIMER_CLC */ typedef enum { /*! Load event is controlled by CCCTL0 load condition */ DL_TIMER_CLC_CCCTL0_LCOND = GPTIMER_CTRCTL_CLC_CCCTL0_LCOND, /*! Load event is controlled by CCCTL1 load condition */ DL_TIMER_CLC_CCCTL1_LCOND = GPTIMER_CTRCTL_CLC_CCCTL1_LCOND, /*! Load event is controlled by CCCTL2 load condition */ DL_TIMER_CLC_CCCTL2_LCOND = GPTIMER_CTRCTL_CLC_CCCTL2_LCOND, /*! Load event is controlled by CCCTL3 load condition */ DL_TIMER_CLC_CCCTL3_LCOND = GPTIMER_CTRCTL_CLC_CCCTL3_LCOND, /*! Load event is controlled by 2-input QEI mode */ DL_TIMER_CLC_QEI_2INP = GPTIMER_CTRCTL_CLC_QEI_2INP, /*! Load event is controlled by 3-input QEI mode */ DL_TIMER_CLC_QEI_3INP = GPTIMER_CTRCTL_CLC_QEI_3INP, } DL_TIMER_CLC; /*! @enum DL_TIMER_COUNT_AFTER_EN */ typedef enum { /*! The counter is set to the LOAD register value */ DL_TIMER_COUNT_AFTER_EN_LOAD_VAL = GPTIMER_CTRCTL_CVAE_LDVAL, /*! The counter value is unchanged from its current value */ DL_TIMER_COUNT_AFTER_EN_NO_CHANGE = GPTIMER_CTRCTL_CVAE_NOCHANGE, /*! The counter is set to zero */ DL_TIMER_COUNT_AFTER_EN_ZERO = GPTIMER_CTRCTL_CVAE_ZEROVAL, } DL_TIMER_COUNT_AFTER_EN; /*! @enum DL_TIMER_REPEAT_MODE */ typedef enum { /*! Does not automatically advance following a zero event */ DL_TIMER_REPEAT_MODE_DISABLED = GPTIMER_CTRCTL_REPEAT_REPEAT_0, /*! Continues to advance following a zero event */ DL_TIMER_REPEAT_MODE_ENABLED = GPTIMER_CTRCTL_REPEAT_REPEAT_1, /*! Continues to advance following a zero event if the debug mode is not in *! effect, or following the release of the debug mode */ DL_TIMER_REPEAT_MODE_ENABLED_DEBUG = GPTIMER_CTRCTL_REPEAT_REPEAT_3, } DL_TIMER_REPEAT_MODE; /*! @enum DL_TIMER_CC_UPDATE_METHOD */ typedef enum { /*! Value written to the CCACT.SWFRCACT register has immediate effect */ DL_TIMER_CC_UPDATE_METHOD_IMMEDIATE = (GPTIMER_CCCTL_01_CCUPD_IMMEDIATELY), /*! Following a zero event. Writes to the CCx_y register are stored in * Shadow register and transferred to CCx_y in the TIMCLK cycle following * CTR equals 0 */ DL_TIMER_CC_UPDATE_METHOD_ZERO_EVT = (GPTIMER_CCCTL_01_CCUPD_ZERO_EVT), /*! Following a compare (down) event. Writes to the CCx_y register are * stored in Shadow register and transferred to CCx_y in the TIMCLK cycle * following CTR equals the CCx_y register value.*/ DL_TIMER_CC_UPDATE_METHOD_COMP_DN_EVT = (GPTIMER_CCCTL_01_CCUPD_COMPARE_DOWN_EVT), /*! Following a compare (up) event. Writes to the CCx_y register are stored * in Shadow register and transferred to CCx_y in the TIMCLK cycle * following CTR equals the CCx_y register value. */ DL_TIMER_CC_UPDATE_METHOD_COMP_UP_EVT = (GPTIMER_CCCTL_01_CCUPD_COMPARE_UP_EVT), /*! Following a zero or load event. Writes to the CCx_y register are stored * in Shadow register and transferred to CCx_y in the TIMCLK cycle * following CTR equals 0 or CTR. Equals LDn. Note this update mechanism * is defined for use only in configurations using up/down counting. * This mode is not intended for use in down count configurations */ DL_TIMER_CC_UPDATE_METHOD_ZERO_OR_LOAD_EVT = (GPTIMER_CCCTL_01_CCUPD_ZERO_LOAD_EVT), /*! Following a zero event with repeat count also zero. Writes to the CCx_y * register are stored in Shadow register and transferred to CCx_y in the * TIMCLK cycle following CTR equals 0 and if RC equal 0.*/ DL_TIMER_CC_UPDATE_METHOD_ZERO_RC_EVT = (GPTIMER_CCCTL_01_CCUPD_ZERO_RC_ZERO_EVT), /*! Following a TRIG pulse, writes to the *! Capture Compare register are stored in shadow register and transferred *! to Capture Compare register in the TIMCLK cycle following timer counter *! equal to zero AND repeaet counter value is 0 */ DL_TIMER_CC_UPDATE_METHOD_TRIG_EVT = (GPTIMER_CCCTL_01_CCUPD_TRIG), } DL_TIMER_CC_UPDATE_METHOD; /*! @enum DL_TIMER_CCACT_UPDATE_METHOD */ typedef enum { /*! Value written to the CCACT register has immediate effect */ DL_TIMER_CCACT_UPDATE_METHOD_IMMEDIATE = (GPTIMER_CCCTL_01_CCACTUPD_IMMEDIATELY), /*! Following a zero event (CTR=0) Writes to the CCACTx_y register * are stored in shadow register and transferred to CCACTx_y in the * TIMCLK cycle following CTR equals 0. */ DL_TIMER_CCACT_UPDATE_METHOD_ZERO_EVT = (GPTIMER_CCCTL_01_CCACTUPD_ZERO_EVT), /*! Following a CCD event (CTR=CC_xy). Writes to the CCACTx_y register * are stored in shadow register and transferred to CCACTx_y in the TIMCLK * cycle following CTR equals the CCx_y register value. */ DL_TIMER_CCACT_UPDATE_METHOD_COMP_DN_EVT = (GPTIMER_CCCTL_01_CCACTUPD_COMPARE_DOWN_EVT), /*! Following a CCU event (CTR=CC_xy) Writes to the CCACTx_y register are * stored in shadow register and transferred to CCACTx_y in the TIMCLK * cycle following CTR equals the CCx_y register value. */ DL_TIMER_CCACT_UPDATE_METHOD_COMP_UP_EVT = (GPTIMER_CCCTL_01_CCACTUPD_COMPARE_UP_EVT), /*! Following a zero event (CTR=0) or load event (CTR = LOAD) Writes to the * CCACTx_y register are stored in shadow register and transferred to * CCACTx_y in the TIMCLK cycle following CTR equals 0 or CTR. E */ DL_TIMER_CCACT_UPDATE_METHOD_ZERO_OR_LOAD_EVT = (GPTIMER_CCCTL_01_CCACTUPD_ZERO_LOAD_EVT), /*! Following a zero event (CTR=0) with repeat count also zero (RC=0). * Writes to the CCACTx_y register are stored in shadow register and * transferred to CCACTx_y in the TIMCLK cycle following CTR equals 0 * and if RC equal 0.*/ DL_TIMER_CCACT_UPDATE_METHOD_ZERO_RC_EVT = (GPTIMER_CCCTL_01_CCACTUPD_ZERO_RC_ZERO_EVT), /*! On a TRIG pulse, the value stored in CCACT_xy shadow register is loaded * into CCACT_xy register. */ DL_TIMER_CCACT_UPDATE_METHOD_TRIG_EVT = (GPTIMER_CCCTL_01_CCACTUPD_TRIG), } DL_TIMER_CCACT_UPDATE_METHOD; /*! @enum DL_TIMER_SEC_COMP_DOWN_EVT */ typedef enum { /*! Selects Capture Compare down event based on Capture Compare register 0 *! value */ DL_TIMER_SEC_COMP_DOWN_EVT_SEL_CC0 = (GPTIMER_CCCTL_01_CC2SELD_SEL_CCD0), /*! Selects Capture Compare down event based on Capture Compare register 1 *! value */ DL_TIMER_SEC_COMP_DOWN_EVT_SEL_CC1 = (GPTIMER_CCCTL_01_CC2SELD_SEL_CCD1), /*! Selects Capture Compare down event based on Capture Compare register 2 *! value */ DL_TIMER_SEC_COMP_DOWN_EVT_SEL_CC2 = (GPTIMER_CCCTL_01_CC2SELD_SEL_CCD2), /*! Selects Capture Compare down event based on Capture Compare register 3 *! value */ DL_TIMER_SEC_COMP_DOWN_EVT_SEL_CC3 = (GPTIMER_CCCTL_01_CC2SELD_SEL_CCD3), /*! Selects Capture Compare down event based on Capture Compare register 4 *! value */ DL_TIMER_SEC_COMP_DOWN_EVT_SEL_CC4 = (GPTIMER_CCCTL_01_CC2SELD_SEL_CCD4), /*! Selects Capture Compare down event based on Capture Compare register 5 *! value */ DL_TIMER_SEC_COMP_DOWN_EVT_SEL_CC5 = (GPTIMER_CCCTL_01_CC2SELD_SEL_CCD5), } DL_TIMER_SEC_COMP_DOWN_EVT; /*! @enum DL_TIMER_SEC_COMP_UP_EVT */ typedef enum { /*! Selects Capture Compare up event based on Capture Compare register 0 *! value */ DL_TIMER_SEC_COMP_UP_EVT_SEL_CC0 = (GPTIMER_CCCTL_01_CC2SELU_SEL_CCU0), /*! Selects Capture Compare up event based on Capture Compare register 1 *! value */ DL_TIMER_SEC_COMP_UP_EVT_SEL_CC1 = (GPTIMER_CCCTL_01_CC2SELU_SEL_CCU1), /*! Selects Capture Compare up event based on Capture Compare register 2 *! value */ DL_TIMER_SEC_COMP_UP_EVT_SEL_CC2 = (GPTIMER_CCCTL_01_CC2SELU_SEL_CCU2), /*! Selects Capture Compare up event based on Capture Compare register 3 *! value */ DL_TIMER_SEC_COMP_UP_EVT_SEL_CC3 = (GPTIMER_CCCTL_01_CC2SELU_SEL_CCU3), /*! Selects Capture Compare up event based on Capture Compare register 4 *! value */ DL_TIMER_SEC_COMP_UP_EVT_SEL_CC4 = (GPTIMER_CCCTL_01_CC2SELU_SEL_CCU4), /*! Selects Capture Compare up event based on Capture Compare register 5 *! value */ DL_TIMER_SEC_COMP_UP_EVT_SEL_CC5 = (GPTIMER_CCCTL_01_CC2SELU_SEL_CCU5), } DL_TIMER_SEC_COMP_UP_EVT; /*! @enum DL_TIMER_SEC_COMP_UP_ACT_SEL */ typedef enum { /*! Second comparator output action is disabled. */ DL_TIMER_SEC_COMP_UP_ACT_SEL_DISABLE = GPTIMER_CCACT_01_CC2UACT_DISABLED, /*! Timer channel is set high when the second comparator up counting event * is detected */ DL_TIMER_SEC_COMP_UP_ACT_SEL_HIGH = GPTIMER_CCACT_01_CC2UACT_CCP_HIGH, /*! Timer channel is set low when the second comparator up counting event * is detected */ DL_TIMER_SEC_COMP_UP_ACT_SEL_LOW = GPTIMER_CCACT_01_CC2UACT_CCP_LOW, /*! Timer channel is toggles when the second comparator up counting event * is detected */ DL_TIMER_SEC_COMP_UP_ACT_SEL_TOGGLE = GPTIMER_CCACT_01_CC2UACT_CCP_TOGGLE, } DL_TIMER_SEC_COMP_UP_ACT_SEL; /*! @enum DL_TIMER_SEC_COMP_DOWN_ACT_SEL */ typedef enum { /*! Second comparator output action is disabled. */ DL_TIMER_SEC_COMP_DOWN_ACT_SEL_DISABLE = GPTIMER_CCACT_01_CC2DACT_DISABLED, /*! Timer channel is set high when the second comparator down counting event * is detected */ DL_TIMER_SEC_COMP_DOWN_ACT_SEL_HIGH = GPTIMER_CCACT_01_CC2DACT_CCP_HIGH, /*! Timer channel is set low when the second comparator down counting event * is detected */ DL_TIMER_SEC_COMP_DOWN_ACT_SEL_LOW = GPTIMER_CCACT_01_CC2DACT_CCP_LOW, /*! Timer channel is toggles when the second comparator down counting event * is detected */ DL_TIMER_SEC_COMP_DOWN_ACT_SEL_TOGGLE = GPTIMER_CCACT_01_CC2DACT_CCP_TOGGLE, } DL_TIMER_SEC_COMP_DOWN_ACT_SEL; /*! @enum DL_TIMER_SUPP_COMP_EVT_RC */ typedef enum { /*! Capture compare up and down events are always generated from the counter *! when their conditions are genreated */ DL_TIMER_SUPP_COMP_EVT_RC_DISABLED = (GPTIMER_CCCTL_01_SCERCNEZ_DISABLED), /*! Capture compare up and down events are generated from the counter when *! their conditions are genreated and the repeat counter value is 0 */ DL_TIMER_SUPP_COMP_EVT_RC_ENABLED = (GPTIMER_CCCTL_01_SCERCNEZ_ENABLED), } DL_TIMER_SUPP_COMP_EVT_RC; /*! @enum DL_TIMER_FORCE_OUT */ typedef enum { /*! The CCP output value is unaffected */ DL_TIMER_FORCE_OUT_DISABLED = (GPTIMER_CCACT_01_SWFRCACT_DISABLED), /*! Output value is set high */ DL_TIMER_FORCE_OUT_HIGH = (GPTIMER_CCACT_01_SWFRCACT_CCP_HIGH), /*! Output value is set low */ DL_TIMER_FORCE_OUT_LOW = (GPTIMER_CCACT_01_SWFRCACT_CCP_LOW), } DL_TIMER_FORCE_OUT; /*! @enum DL_TIMER_FORCE_CMPL_OUT */ typedef enum { /*! The complementary CCP output value is unaffected */ DL_TIMER_FORCE_CMPL_OUT_DISABLED = (GPTIMER_CCACT_01_SWFRCACT_CMPL_DISABLED), /*! Complementary CCP output is set high */ DL_TIMER_FORCE_CMPL_OUT_HIGH = (GPTIMER_CCACT_01_SWFRCACT_CMPL_CCP_HIGH), /*! Complementary CCP output is set low */ DL_TIMER_FORCE_CMPL_OUT_LOW = (GPTIMER_CCACT_01_SWFRCACT_CMPL_CCP_LOW), } DL_TIMER_FORCE_CMPL_OUT; /*! @enum DL_TIMER_CORE_HALT */ typedef enum { /*! Timer will halt immediately, even if the resultant state will result in corruption if the system is restarted */ DL_TIMER_CORE_HALT_IMMEDIATE = (GPTIMER_PDBGCTL_FREE_STOP | GPTIMER_PDBGCTL_SOFT_IMMEDIATE), /*! Timer blocks the debug freeze until it has reached a boundary where it can resume without corruption */ DL_TIMER_CORE_HALT_DELAYED = (GPTIMER_PDBGCTL_FREE_STOP | GPTIMER_PDBGCTL_SOFT_DELAYED), /*! Timer ignores the state of the Core Halted input */ DL_TIMER_CORE_HALT_FREE_RUN = (GPTIMER_PDBGCTL_FREE_RUN | GPTIMER_PDBGCTL_SOFT_DELAYED), } DL_TIMER_CORE_HALT; /*! * @brief Configuration struct for @ref DL_Timer_setClockConfig. */ typedef struct { /*! Selects timer module clock source @ref DL_TIMER_CLOCK*/ DL_TIMER_CLOCK clockSel; /*! Selects the timer module clock divide ratio @ref DL_TIMER_CLOCK_DIVIDE */ DL_TIMER_CLOCK_DIVIDE divideRatio; /*! Selects the timer module clock prescaler. Valid range 0-255 */ uint8_t prescale; } DL_Timer_ClockConfig; /*! * @brief Configuration struct for @ref DL_Timer_initTimerMode. */ typedef struct { /*! One shot or Periodic mode configuration. One of * @ref DL_TIMER_TIMER_MODE */ DL_TIMER_TIMER_MODE timerMode; /*! Actual period will be period_actual=(period +1)T_TIMCLK * where T_TIMCLK is the period of the timer source clock. */ uint32_t period; /*! Start timer after configuration @ref DL_TIMER */ DL_TIMER startTimer; /*! Generate intermediate counter interrupt * @ref DL_TIMER_INTERM_INT*/ DL_TIMER_INTERM_INT genIntermInt; /*! Counter value when intermediate interrupt should be generated. This * member must be set to 0 when * @ref genIntermInt == DL_TIMER_INTERM_INT_DISABLED */ uint32_t counterVal; } DL_Timer_TimerConfig; /*! * @brief Configuration struct for @ref DL_Timer_initCaptureMode. */ typedef struct { /*! Selects capture mode. One of @ref DL_TIMER_CAPTURE_MODE */ DL_TIMER_CAPTURE_MODE captureMode; /*! Specifies the capture period. period_actual=(period +1)T_TIMCLK * where T_TIMCLK is the period of the timer source clock. */ uint32_t period; /*! Start timer after configuration @ref DL_TIMER */ DL_TIMER startTimer; /*! Specifies the edge detection mode. One of @ref DL_TIMER_CAPTURE_EDGE_DETECTION_MODE*/ DL_TIMER_CAPTURE_EDGE_DETECTION_MODE edgeCaptMode; /*! Selects input channel used for capture mode */ DL_TIMER_INPUT_CHAN inputChan; /*! Specifies if input should be inverted. One of * @ref DL_TIMER_CC_INPUT_INV */ uint32_t inputInvMode; } DL_Timer_CaptureConfig; /*! * @brief Configuration struct for @ref DL_Timer_initCaptureTriggerMode. */ typedef struct { /*! Selects capture mode. One of @ref DL_TIMER_CAPTURE_MODE */ DL_TIMER_CAPTURE_MODE captureMode; /*! Specifies the capture period. period_actual=(period +1) * T_TIMCLK * where T_TIMCLK is the period of the timer source clock. */ uint32_t period; /*! Start timer after configuration. One of @ref DL_TIMER */ DL_TIMER startTimer; } DL_Timer_CaptureTriggerConfig; /*! * @brief Configuration struct for @ref DL_Timer_initCaptureCombinedMode. */ typedef struct { /*! Selects capture mode. One of @ref DL_TIMER_CAPTURE_COMBINED_MODE */ DL_TIMER_CAPTURE_COMBINED_MODE captureMode; /*! Specifies the capture period. period_actual=(period +1)T_TIMCLK * where T_TIMCLK is the period of the timer source clock. */ uint32_t period; /*! Start timer after configuration @ref DL_TIMER */ DL_TIMER startTimer; /*! Selects input channel used for capture mode. One of @ref DL_TIMER_INPUT_CHAN */ DL_TIMER_INPUT_CHAN inputChan; /*! Specifies if input should be inverted. One of * @ref DL_TIMER_CC_INPUT_INV */ uint32_t inputInvMode; } DL_Timer_CaptureCombinedConfig; /*! * @brief Configuration struct for @ref DL_Timer_initCompareMode. */ typedef struct { /*! Selects capture mode. One of @ref DL_TIMER_COMPARE_MODE */ DL_TIMER_COMPARE_MODE compareMode; /*! Specifies the intial count value. In edge count mode this value will * decrease everytime the configured edge detection mode is detected. * The counter will be reset to this value after the reaching zero. */ uint32_t count; /*! Specifies the edge detection mode. One of @ref DL_TIMER_CAPTURE_EDGE_DETECTION_MODE*/ DL_TIMER_COMPARE_EDGE_DETECTION_MODE edgeDetectMode; /*! Selects input channel used for compare mode. One of @ref DL_TIMER_INPUT_CHAN */ DL_TIMER_INPUT_CHAN inputChan; /*! Specifies if input should be inverted. One of * @ref DL_TIMER_CC_INPUT_INV */ uint32_t inputInvMode; /*! Start timer after configuration. One of @ref DL_TIMER */ DL_TIMER startTimer; } DL_Timer_CompareConfig; /*! * @brief Configuration struct for @ref DL_Timer_initCompareTriggerMode. */ typedef struct { /*! Selects capture mode. One of @ref DL_TIMER_COMPARE_MODE */ DL_TIMER_COMPARE_MODE compareMode; /*! Specifies the intial count value. In edge count mode this value will * decrease everytime the configured edge detection mode is detected. * The counter will be reset to this value after the reaching zero. */ uint32_t count; /*! Specifies the edge detection mode. One of @ref DL_TIMER_CAPTURE_EDGE_DETECTION_MODE*/ DL_TIMER_COMPARE_EDGE_DETECTION_MODE edgeDetectMode; /*! Start timer after configuration. One of @ref DL_TIMER */ DL_TIMER startTimer; } DL_Timer_CompareTriggerConfig; /** * @brief Configuration struct for @ref DL_Timer_initPWMMode. */ typedef struct { /*! Specifies the pwm period. The actual value configured to LOAD register * depends on the pwmMode selected. When * pwmMode = DL_TIMER_PWM_MODE_EDGE_ALIGN, LOAD = (period -1). When * pwmMode = DL_TIMER_PWM_MODE_CENTER_ALIGN, LOAD = (period / 2). * Actual PWM freq = (Timer_freq/(prescaler * divideRatio * period)) */ uint32_t period; /*! Specifies the PWM Mode. One of @ref DL_TIMER_PWM_MODE */ DL_TIMER_PWM_MODE pwmMode; /*! Specifies if this is a counter with four capture compare registers. Please refer to the device datasheet to determine if Timer instance supports four capture compare registers */ bool isTimerWithFourCC; /*! Start timer after configuration @ref DL_TIMER */ DL_TIMER startTimer; } DL_Timer_PWMConfig; /** * @brief Configuration structure to backup Timer peripheral state before * entering STOP or STANDBY mode. Used by @ref DL_Timer_saveConfiguration * and @ref DL_Timer_restoreConfiguration */ typedef struct { /*! Timer subscriber 0 channel ID. Value between 0 - 15. */ uint32_t sub0PortConf; /*! Timer subscriber 1 channel ID. Value between 0 - 15. */ uint32_t sub1PortConf; /*! Timer publisher 0 channel ID. Value between 0 - 15. */ uint32_t pub0PortConf; /*! Timer publisher 1 channel ID. Value between 0 - 15. */ uint32_t pub1PortConf; /*! Timer clockDivider configuration.*/ uint32_t clkDivConf; /*! Timer clock prescaler configuration.*/ uint32_t clockPscConf; /*! Timer Clock Source Select configuration.*/ uint32_t clkSelConf; /*! Timer Clock configuration.*/ uint32_t countClkConf; /*! Timer interrupt configuration for EVENT0.*/ uint32_t intEvnt0Conf; /*! Timer interrupt configuration for EVENT1.*/ uint32_t intEvnt1Conf; /*! Timer interrupt configuration for EVENT2.*/ uint32_t intEvnt2Conf; /*! Timer CCP Direction configuration.*/ uint32_t ccpDirConf; /*! Timer CCP Output forced low configuration.*/ uint32_t outDisConf; /*! Timer Cross Timer Trigger Control configuration.*/ uint32_t crossTrigCtl; /*! Timer Cross Trigger Configuration */ uint32_t tSelConf; /*! Timer Cross Timer Trigger*/ uint32_t crossTrigConf; /*! Timer counter value. Timer counter value is stored but user can * specify if counter is restore via restoreCounter argument in * @ref DL_Timer_restoreConfiguration */ uint32_t cntVal; /*! Timer counter control configuration */ uint32_t cntCtlConf; /*! Timer load value */ uint32_t loadVal; /*! Timer Capture or Compare 0 value */ uint32_t cc0Val; /*! Timer Capture or Compare 1 value */ uint32_t cc1Val; /*! Timer Capture or Compare 2 value */ uint32_t cc2Val; /*! Timer Capture or Compare 3 value */ uint32_t cc3Val; /*! Timer Capture or Compare Control Register 0 */ uint32_t cc0Ctl; /*! Timer Capture or Compare Control Register 1 */ uint32_t cc1Ctl; /*! Timer Capture or Compare Control Register 2 */ uint32_t cc2Ctl; /*! Timer Capture or Compare Control Register 3 */ uint32_t cc3Ctl; /*! Timer Capture or Compare Output Control Register 0 */ uint32_t cc0OutCtl; /*! Timer Capture or Compare Output Control Register 1 */ uint32_t cc1OutCtl; /*! Timer Capture or Compare Output Control Register 2 */ uint32_t cc2OutCtl; /*! Timer Capture or Compare Output Control Register 3 */ uint32_t cc3OutCtl; /*! Timer Capture or Compare Signal Generator Action Control Register 0 */ uint32_t cc0ActCtl; /*! Timer Capture or Compare Signal Generator Action Control Register 1 */ uint32_t cc1ActCtl; /*! Timer Capture or Compare Signal Generator Action Control Register 2 */ uint32_t cc2ActCtl; /*! Timer Capture or Compare Signal Generator Action Control Register 3 */ uint32_t cc3ActCtl; /*! Timer Capture or Compare Input Filter and Inversion Control * Register 0 */ uint32_t in0FiltCtl; /*! Timer Capture or Compare Input Filter and Inversion Control * Register 1 */ uint32_t in1FiltCtl; /*! Timer Capture or Compare Input Filter and Inversion Control * Register 2 */ uint32_t in2FiltCtl; /*! Timer Capture or Compare Input Filter and Inversion Control * Register 3 */ uint32_t in3FiltCtl; /*! Boolean flag indicating whether or not a valid configuration structure * exists. Should not be modified by the user. */ bool backupRdy; } DL_Timer_backupConfig; /*! @enum DL_TIMER_QEI_MODE */ typedef enum { /*! Set QEI to 2 input mode: PHA->CCP0, PHB->CCP1. */ DL_TIMER_QEI_MODE_2_INPUT = (GPTIMER_CTRCTL_CLC_QEI_2INP | GPTIMER_CTRCTL_CAC_QEI_2INP | GPTIMER_CTRCTL_CZC_QEI_2INP), /*! Set QEI to 3 input mode: PHA->CCP0, PHB->CCP1, Index input signal->IDX. */ DL_TIMER_QEI_MODE_3_INPUT = (GPTIMER_CTRCTL_CLC_QEI_3INP | GPTIMER_CTRCTL_CAC_QEI_3INP | GPTIMER_CTRCTL_CZC_QEI_3INP), } DL_TIMER_QEI_MODE; /*! @enum DL_TIMER_QEI_DIRECTION */ typedef enum { /*! Encoder counter going down */ DL_TIMER_QEI_DIR_DOWN = GPTIMER_QDIR_DIR_DOWN, /*! Encoder counter going up */ DL_TIMER_QEI_DIR_UP = GPTIMER_QDIR_DIR_UP, } DL_TIMER_QEI_DIRECTION; /** * @brief Enables the Peripheral Write Enable (PWREN) register for the timer * * Before any peripheral registers can be configured by software, the * peripheral itself must be enabled by writing the ENABLE bit together with * the appropriate KEY value to the peripheral's PWREN register. * * @param gptimer Pointer to the register overlay for the * peripheral */ __STATIC_INLINE void DL_Timer_enablePower(GPTIMER_Regs *gptimer) { gptimer->GPRCM.PWREN = (GPTIMER_PWREN_KEY_UNLOCK_W | GPTIMER_PWREN_ENABLE_ENABLE); } /** * @brief Disables the Peripheral Write Enable (PWREN) register for the timer * * When the PWREN.ENABLE bit is cleared, the peripheral's registers are not * accessible for read/write operations. * * @note This API does not provide large power savings. * * @param gptimer Pointer to the register overlay for the * peripheral */ __STATIC_INLINE void DL_Timer_disablePower(GPTIMER_Regs *gptimer) { gptimer->GPRCM.PWREN = (GPTIMER_PWREN_KEY_UNLOCK_W | GPTIMER_PWREN_ENABLE_DISABLE); } /** * @brief Returns if the Peripheral Write Enable (PWREN) register for the timer * is enabled * * Before any peripheral registers can be configured by software, the * peripheral itself must be enabled by writing the ENABLE bit together with * the appropriate KEY value to the peripheral's PWREN register. * * When the PWREN.ENABLE bit is cleared, the peripheral's registers are not * accessible for read/write operations. * * @param gptimer Pointer to the register overlay for the * peripheral * * @return true if peripheral register access is enabled * @return false if peripheral register access is disabled */ __STATIC_INLINE bool DL_Timer_isPowerEnabled(const GPTIMER_Regs *gptimer) { return ((gptimer->GPRCM.PWREN & GPTIMER_PWREN_ENABLE_MASK) == GPTIMER_PWREN_ENABLE_ENABLE); } /** * @brief Resets timer peripheral * * @param gptimer Pointer to the register overlay for the * peripheral */ __STATIC_INLINE void DL_Timer_reset(GPTIMER_Regs *gptimer) { gptimer->GPRCM.RSTCTL = (GPTIMER_RSTCTL_KEY_UNLOCK_W | GPTIMER_RSTCTL_RESETSTKYCLR_CLR | GPTIMER_RSTCTL_RESETASSERT_ASSERT); } /** * @brief Returns if timer peripheral has been reset * * @param gptimer Pointer to the register overlay for the * peripheral * * @return true if peripheral was reset * @return false if peripheral wasn't reset */ __STATIC_INLINE bool DL_Timer_isReset(const GPTIMER_Regs *gptimer) { return ((gptimer->GPRCM.STAT & GPTIMER_STAT_RESETSTKY_MASK) == GPTIMER_STAT_RESETSTKY_RESET); } /** * @brief Sets CCP Direction * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccpConfig Direction configuration for CCP as input or * output. Bitwise OR of @ref DL_TIMER_CCx */ __STATIC_INLINE void DL_Timer_setCCPDirection( GPTIMER_Regs *gptimer, uint32_t ccpConfig) { gptimer->COMMONREGS.CCPD = (ccpConfig); } /** * @brief Gets CCP Direction * * @param[in] gptimer Pointer to the register overlay for the * peripheral * * @return Bitwise OR of CCP Direction configuration @ref DL_TIMER_CCx */ __STATIC_INLINE uint32_t DL_Timer_getCCPDirection(const GPTIMER_Regs *gptimer) { return (gptimer->COMMONREGS.CCPD); } /** * @brief Forces the output of the timer low via the ODIS register. * This can be useful during shutdown or configuring the timer. * The output pin still passes through the inversion (INV) bit. * See figure "Output connection for TIMG" in Technical * Reference Manual (TRM) for diagram. * DL_Timer_overrideCCPOut() can be used for for similar * functionality, where independent overrride settings for the * output and complementary output channels can be configured. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccp0Config Output Configuration for CCP0. One of @ref * DL_TIMER_CCP_DIS_OUT * @param[in] ccp1Config Output Configuration for CCP1. One of @ref * DL_TIMER_CCP_DIS_OUT */ __STATIC_INLINE void DL_Timer_setCCPOutputDisabled(GPTIMER_Regs *gptimer, DL_TIMER_CCP_DIS_OUT ccp0Config, DL_TIMER_CCP_DIS_OUT ccp1Config) { DL_Common_updateReg(&gptimer->COMMONREGS.ODIS, (((uint32_t) ccp0Config) | ((uint32_t) ccp1Config << GPTIMER_ODIS_C0CCP1_OFS)), (GPTIMER_ODIS_C0CCP0_MASK | GPTIMER_ODIS_C0CCP1_MASK)); } /** * @brief Sets CCP Output configuration for timer instances with more than * two CCP channels via the ODIS register. The output pin still passes through * the inversion (INV) bit. * * @note Refer to device datasheet to determine if timer instance supports * this feature. Only Timer instance which supports more than two CCP channels * should use this API. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccpOdisConfig Output Configuration for CCP channels. Bitwise OR * @ref DL_TIMER_CCP0_DIS_OUT_ADV, * @ref DL_TIMER_CCP1_DIS_OUT_ADV, * @ref DL_TIMER_CCP2_DIS_OUT_ADV, * @ref DL_TIMER_CCP3_DIS_OUT_ADV */ __STATIC_INLINE void DL_Timer_setCCPOutputDisabledAdv( GPTIMER_Regs *gptimer, uint32_t ccpOdisConfig) { DL_Common_updateReg(&gptimer->COMMONREGS.ODIS, (ccpOdisConfig), (GPTIMER_ODIS_C0CCP0_MASK | GPTIMER_ODIS_C0CCP1_MASK | GPTIMER_ODIS_C0CCP2_MASK | GPTIMER_ODIS_C0CCP3_MASK)); } /** * @brief Configure timer source clock * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] config Pointer to the clock configuration struct * @ref DL_Timer_ClockConfig. */ void DL_Timer_setClockConfig( GPTIMER_Regs *gptimer, const DL_Timer_ClockConfig *config); /** * @brief Get timer source clock configuration * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] config Pointer to the clock configuration struct * @ref DL_Timer_ClockConfig. */ void DL_Timer_getClockConfig( const GPTIMER_Regs *gptimer, DL_Timer_ClockConfig *config); /** * @brief Enable timer clock * @param[in] gptimer Pointer to the register overlay for the * peripheral * */ __STATIC_INLINE void DL_Timer_enableClock(GPTIMER_Regs *gptimer) { gptimer->COMMONREGS.CCLKCTL = (GPTIMER_CCLKCTL_CLKEN_ENABLED); } /** * @brief Disable timer clock * @param[in] gptimer Pointer to the register overlay for the * peripheral * */ __STATIC_INLINE void DL_Timer_disableClock(GPTIMER_Regs *gptimer) { gptimer->COMMONREGS.CCLKCTL = (GPTIMER_CCLKCTL_CLKEN_DISABLED); } /** * @brief Returns if timer clock is disabled * @param[in] gptimer Pointer to the register overlay for the * peripheral * * @return true if clock is enabled * @return false if clock is disabled */ __STATIC_INLINE bool DL_Timer_isClockEnabled(const GPTIMER_Regs *gptimer) { return ((gptimer->COMMONREGS.CCLKCTL & GPTIMER_CCLKCTL_CLKEN_MASK) == GPTIMER_CCLKCTL_CLKEN_ENABLED); } /** * @brief Configure Cross Timer Trigger * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ctSource Selects cross trigger source. * @ref DL_TIMER_CROSS_TRIG_SRC * * @param[in] enInTrigCond Cofigures Input Trigger Conditions to the * Timer module as a condition for Cross Triggers * @ref DL_TIMER_CROSS_TRIGGER_INPUT * * @param[in] enCrossTrig Configures Timer Cross trigger * @ref DL_TIMER_CROSS_TRIGGER_MODE * */ __STATIC_INLINE void DL_Timer_configCrossTrigger(GPTIMER_Regs *gptimer, DL_TIMER_CROSS_TRIG_SRC ctSource, DL_TIMER_CROSS_TRIGGER_INPUT enInTrigCond, DL_TIMER_CROSS_TRIGGER_MODE enCrossTrig) { gptimer->COMMONREGS.CTTRIGCTL = (uint32_t)((uint32_t) ctSource | (uint32_t) enInTrigCond | (uint32_t) enCrossTrig); } /** * @brief Configure Cross Timer Trigger source * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ctSource Selects cross trigger source. * @ref DL_TIMER_CROSS_TRIG_SRC * */ __STATIC_INLINE void DL_Timer_configCrossTriggerSrc( GPTIMER_Regs *gptimer, DL_TIMER_CROSS_TRIG_SRC ctSource) { DL_Common_updateReg(&gptimer->COMMONREGS.CTTRIGCTL, (uint32_t) ctSource, GPTIMER_CTTRIGCTL_EVTCTTRIGSEL_MASK); } /** * @brief Enables/DIsables Input Trigger condition for Cross Timer Trigger * * @param[in] gptimer Pointer to the register overlay for the * peripheral * * @param[in] enInTrigCond Cofigures Input Trigger Conditions to the * Timer module as a condition for Cross Triggers * @ref DL_TIMER_CROSS_TRIGGER_INPUT * */ __STATIC_INLINE void DL_Timer_configCrossTriggerInputCond( GPTIMER_Regs *gptimer, DL_TIMER_CROSS_TRIGGER_INPUT enInTrigCond) { DL_Common_updateReg(&gptimer->COMMONREGS.CTTRIGCTL, (uint32_t) enInTrigCond, GPTIMER_CTTRIGCTL_EVTCTEN_MASK); } /** * @brief Enable/Disable Cross Timer Trigger * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] enCrossTrig Configures Timer Cross trigger * @ref DL_TIMER_CROSS_TRIGGER_MODE * */ __STATIC_INLINE void DL_Timer_configCrossTriggerEnable( GPTIMER_Regs *gptimer, DL_TIMER_CROSS_TRIGGER_MODE enCrossTrig) { DL_Common_updateReg(&gptimer->COMMONREGS.CTTRIGCTL, (uint32_t) enCrossTrig, GPTIMER_CTTRIGCTL_CTEN_MASK); } /** * @brief Get Cross Timer Trigger configuration * * @param[in] gptimer Pointer to the register overlay for the * peripheral * * @return Bitwise OR of @ref DL_TIMER_CROSS_TRIG_SRC, * @ref DL_TIMER_CROSS_TRIGGER_INPUT, @ref DL_TIMER_CROSS_TRIGGER_MODE, * */ __STATIC_INLINE uint32_t DL_Timer_getCrossTriggerConfig( const GPTIMER_Regs *gptimer) { return (gptimer->COMMONREGS.CTTRIGCTL); } /** * @brief Get Cross Timer Trigger source * * @param[in] gptimer Pointer to the register overlay for the * peripheral * * @return One of @ref DL_TIMER_CROSS_TRIG_SRC * */ __STATIC_INLINE DL_TIMER_CROSS_TRIG_SRC DL_Timer_getCrossTriggerSrc( const GPTIMER_Regs *gptimer) { uint32_t ctSource = gptimer->COMMONREGS.CTTRIGCTL & GPTIMER_CTTRIGCTL_EVTCTTRIGSEL_MASK; return (DL_TIMER_CROSS_TRIG_SRC)(ctSource); } /** * @brief Get Input Trigger condition for Cross Timer Trigger * * @param[in] gptimer Pointer to the register overlay for the * peripheral * * @return One of @ref DL_TIMER_CROSS_TRIGGER_INPUT * */ __STATIC_INLINE DL_TIMER_CROSS_TRIGGER_INPUT DL_Timer_getCrossTriggerInputCond( const GPTIMER_Regs *gptimer) { uint32_t triggerCondition = gptimer->COMMONREGS.CTTRIGCTL & GPTIMER_CTTRIGCTL_EVTCTEN_MASK; return (DL_TIMER_CROSS_TRIGGER_INPUT)(triggerCondition); } /** * @brief Checks if Cross Timer Trigger is enabled or disabled * * @param[in] gptimer Pointer to the register overlay for the * peripheral * * @return One of @ref DL_TIMER_CROSS_TRIGGER_MODE * */ __STATIC_INLINE DL_TIMER_CROSS_TRIGGER_MODE DL_Timer_getCrossTriggerEnable( const GPTIMER_Regs *gptimer) { uint32_t mode = gptimer->COMMONREGS.CTTRIGCTL & GPTIMER_CTTRIGCTL_CTEN_MASK; return (DL_TIMER_CROSS_TRIGGER_MODE)(mode); } /** * @brief Generates a synchronized trigger condition across all trigger * enabled Timer instances * * @param[in] gptimer Pointer to the register overlay for the * peripheral */ __STATIC_INLINE void DL_Timer_generateCrossTrigger(GPTIMER_Regs *gptimer) { gptimer->COMMONREGS.CTTRIG = GPTIMER_CTTRIG_TRIG_GENERATE; } /** * @brief Enable shadow to activate load of buffered registers and * register fields. * * @note Please refer to the device datasheet to determine shadow features * avaialable per timer instance. * * @param[in] gptimer Pointer to the register overlay for the * peripheral */ __STATIC_INLINE void DL_Timer_enableShadowFeatures(GPTIMER_Regs *gptimer) { gptimer->COMMONREGS.GCTL |= GPTIMER_GCTL_SHDWLDEN_ENABLE; } /** * @brief Disable shadow to activate load of buffered registers and * register fields. * * @note Please refer to the device datasheet to determine shadow features * avaialable per timer instance. * * @param[in] gptimer Pointer to the register overlay for the * peripheral */ __STATIC_INLINE void DL_Timer_disableShadowFeatures(GPTIMER_Regs *gptimer) { gptimer->COMMONREGS.GCTL &= ~(GPTIMER_GCTL_SHDWLDEN_ENABLE); } /** * @brief Sets timer LOAD register value * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] value Value to be loaded to timer LOAD * register. Refer to the device datasheet to * determine the bit width of the counter for * the selected Timer instance. * */ __STATIC_INLINE void DL_Timer_setLoadValue( GPTIMER_Regs *gptimer, uint32_t value) { gptimer->COUNTERREGS.LOAD = value; } /** * @brief Gets the timer LOAD register value * * @param[in] gptimer Pointer to the register overlay for the * peripheral * * @return Returns the timer's LOAD register value. * */ __STATIC_INLINE uint32_t DL_Timer_getLoadValue(const GPTIMER_Regs *gptimer) { return (gptimer->COUNTERREGS.LOAD & GPTIMER_LOAD_LD_MAXIMUM); } /** * @brief Gets the current counter value of the timer * * @param[in] gptimer Pointer to the register overlay for the * peripheral * * @return Returns the timer counter value */ __STATIC_INLINE uint32_t DL_Timer_getTimerCount(const GPTIMER_Regs *gptimer) { return (gptimer->COUNTERREGS.CTR & GPTIMER_CTR_CCTR_MASK); } /** * @brief Set timer counter value * * @note Warning setting the counter value directly while the * timer's counter is running can lead to unpredictable behavior. * This function should only be used when the timer's counter * isn't running. If you need to change the counter value while * it is running then use DL_Timer_setLoadValue(). For TimerH use * DL_TimerH_setLoadValue() instead. These functions will * update the LOAD register which will safely copy its * value to the counter register. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] value Value to set the timer counter value to * */ __STATIC_INLINE void DL_Timer_setTimerCount( GPTIMER_Regs *gptimer, uint32_t value) { gptimer->COUNTERREGS.CTR = value; } /** * @brief Enable suppression of load and zero events * * @note Refer to device datasheet to determine if timer instance supports * this feature. Only Timer instance which supports Repeat Counter supports * this feature. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * */ __STATIC_INLINE void DL_Timer_enableLZEventSuppression(GPTIMER_Regs *gptimer) { gptimer->COUNTERREGS.CTRCTL |= (GPTIMER_CTRCTL_SLZERCNEZ_ENABLED); } /** * @brief Disable suppression of load and zero events * * @note Refer to device datasheet to determine if timer instance supports * this feature. Only Timer instances which supports Repeat Counter supports * this feature. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * */ __STATIC_INLINE void DL_Timer_disableLZEventSuppression(GPTIMER_Regs *gptimer) { gptimer->COUNTERREGS.CTRCTL &= ~(GPTIMER_CTRCTL_SLZERCNEZ_ENABLED); } /** * @brief Checks if suppression of load and zero events is enabled * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @return Returns the status ofsuppression of load and zero events * * @retval true suppression of load and zero events is enabled * @retval false suppression of load and zero events is disabled * */ __STATIC_INLINE bool DL_Timer_isLZEventSuppressionEnabled( const GPTIMER_Regs *gptimer) { return (GPTIMER_CTRCTL_SLZERCNEZ_ENABLED == (gptimer->COUNTERREGS.CTRCTL & GPTIMER_CTRCTL_SLZERCNEZ_MASK)); } /** * @brief Configures timer behavior during debug release/exit * * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] debResB Specifies timer behavior upon * relase/exit of debug mode. * @ref DL_TIMER_DEBUG_RES * */ __STATIC_INLINE void DL_Timer_setDebugReleaseBehavior( GPTIMER_Regs *gptimer, DL_TIMER_DEBUG_RES debResB) { DL_Common_updateReg(&gptimer->COUNTERREGS.CTRCTL, (uint32_t) debResB, GPTIMER_CTRCTL_DRB_MASK); } /** * @brief Get timer resume behavior after relase/exit of debug mode. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @return @ref DL_TIMER_DEBUG_RES * */ __STATIC_INLINE DL_TIMER_DEBUG_RES DL_Timer_getDebugReleaseBehavior( const GPTIMER_Regs *gptimer) { uint32_t debResB = gptimer->COUNTERREGS.CTRCTL & GPTIMER_CTRCTL_DRB_MASK; return ((DL_TIMER_DEBUG_RES)(debResB)); } /** * @brief Configure timer counter control operation * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] zeroCtl Specifies event which zeroes the counter value. * @ref DL_TIMER_CZC * @param[in] advCtl Specifies event which increments or * decrements the counter value. * @ref DL_TIMER_CAC * @param[in] loadCtl Specifies event which sets counter value * with LD register value. * @ref DL_TIMER_CLC */ __STATIC_INLINE void DL_Timer_setCounterControl(GPTIMER_Regs *gptimer, DL_TIMER_CZC zeroCtl, DL_TIMER_CAC advCtl, DL_TIMER_CLC loadCtl) { DL_Common_updateReg(&gptimer->COUNTERREGS.CTRCTL, ((uint32_t) zeroCtl | (uint32_t) advCtl | (uint32_t) loadCtl), (GPTIMER_CTRCTL_CZC_MASK | GPTIMER_CTRCTL_CAC_MASK | GPTIMER_CTRCTL_CLC_MASK)); } /** * @brief Get timer counter zero control operation * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @return @ref DL_TIMER_CZC */ __STATIC_INLINE DL_TIMER_CZC DL_Timer_getCounterZeroControl( const GPTIMER_Regs *gptimer) { uint32_t zeroCtl = gptimer->COUNTERREGS.CTRCTL & GPTIMER_CTRCTL_CZC_MASK; return ((DL_TIMER_CZC)(zeroCtl)); } /** * @brief Get timer counter advance control operation * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @return @ref DL_TIMER_CAC */ __STATIC_INLINE DL_TIMER_CAC DL_Timer_getCounterAdvanceControl( const GPTIMER_Regs *gptimer) { uint32_t advCtl = gptimer->COUNTERREGS.CTRCTL & GPTIMER_CTRCTL_CAC_MASK; return ((DL_TIMER_CAC)(advCtl)); } /** * @brief Get timer counter load control operation * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @return @ref DL_TIMER_CLC */ __STATIC_INLINE DL_TIMER_CLC DL_Timer_getCounterLoadControl( const GPTIMER_Regs *gptimer) { uint32_t loadCtl = gptimer->COUNTERREGS.CTRCTL & GPTIMER_CTRCTL_CLC_MASK; return ((DL_TIMER_CLC)(loadCtl)); } /** * @brief Configure timer counter couting mode * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] countMode Specifies timer counter couting mode. * @ref DL_TIMER_COUNT_MODE */ __STATIC_INLINE void DL_Timer_setCounterMode( GPTIMER_Regs *gptimer, DL_TIMER_COUNT_MODE countMode) { DL_Common_updateReg(&gptimer->COUNTERREGS.CTRCTL, ((uint32_t) countMode), (GPTIMER_CTRCTL_CM_MASK)); } /** * @brief Get timer counter couting mode * * @param[in] gptimer Pointer to the register overlay for the * peripheral * * @return @ref DL_TIMER_COUNT_MODE */ __STATIC_INLINE DL_TIMER_COUNT_MODE DL_Timer_getCounterMode( const GPTIMER_Regs *gptimer) { uint32_t cmMode = (gptimer->COUNTERREGS.CTRCTL & GPTIMER_CTRCTL_CM_MASK); return ((DL_TIMER_COUNT_MODE) cmMode); } /** * @brief Configures counter value after enable * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] cvae Speficies counter value after enable. * @ref DL_TIMER_COUNT_AFTER_EN * */ __STATIC_INLINE void DL_Timer_setCounterValueAfterEnable( GPTIMER_Regs *gptimer, DL_TIMER_COUNT_AFTER_EN cvae) { DL_Common_updateReg(&gptimer->COUNTERREGS.CTRCTL, (uint32_t) cvae, GPTIMER_CTRCTL_CVAE_MASK); } /** * @brief Returns counter value after enable cofiguration * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @return @ref DL_TIMER_COUNT_AFTER_EN * */ __STATIC_INLINE DL_TIMER_COUNT_AFTER_EN DL_Timer_getCounterValueAfterEnable( const GPTIMER_Regs *gptimer) { uint32_t cvae = gptimer->COUNTERREGS.CTRCTL & GPTIMER_CTRCTL_CVAE_MASK; return ((DL_TIMER_COUNT_AFTER_EN)(cvae)); } /** * @brief Configure timer repeat counter mode * * @note Refer to device datasheet to determine if timer instance supports * this feature. Only Timer instances which supports repeat counter supports * this feature. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] repeatMode Specifies timer repeat counter mode * @ref DL_TIMER_REPEAT_MODE */ __STATIC_INLINE void DL_Timer_setCounterRepeatMode( GPTIMER_Regs *gptimer, DL_TIMER_REPEAT_MODE repeatMode) { DL_Common_updateReg(&gptimer->COUNTERREGS.CTRCTL, (uint32_t) repeatMode, GPTIMER_CTRCTL_REPEAT_MASK); } /** * @brief Get timer repeat counter mode * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @return @ref DL_TIMER_REPEAT_MODE */ __STATIC_INLINE DL_TIMER_REPEAT_MODE DL_Timer_getCounterRepeatMode( const GPTIMER_Regs *gptimer) { uint32_t repeatMode = gptimer->COUNTERREGS.CTRCTL & GPTIMER_CTRCTL_REPEAT_MASK; return ((DL_TIMER_REPEAT_MODE)(repeatMode)); } /** * @brief Configure timer in one shot or periodic timer mode * Initializes all the common configurable options for the TIMx peripheral when * used in Timer mode. Any other custom configuration can be done after calling * this API. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] config Pointer to the mode configuration struct * @ref DL_Timer_TimerConfig. * */ void DL_Timer_initTimerMode( GPTIMER_Regs *gptimer, const DL_Timer_TimerConfig *config); /** * @brief Configure timer in edge count, period capture, edge time or * pulse-width capture mode * Initializes all the common configurable options for the TIMx peripheral when * used in Capture mode. Any other custom configuration can be done after * calling this API. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] config Pointer to the mode configuration struct * @ref DL_Timer_CaptureConfig. * */ void DL_Timer_initCaptureMode( GPTIMER_Regs *gptimer, const DL_Timer_CaptureConfig *config); /** * @brief Configure timer in edge count, period capture, edge time or * pulse-width capture mode using the trigger as input source * Initializes all the common configurable options for the TIMx peripheral when * used in Capture mode. Any other custom configuration can be done after * calling this API. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] config Pointer to the mode configuration struct * @ref DL_Timer_CaptureTriggerConfig. * */ void DL_Timer_initCaptureTriggerMode( GPTIMER_Regs *gptimer, const DL_Timer_CaptureTriggerConfig *config); /** * @brief Configure timer in combined pulse-width and period capture * Initializes all the common configurable options for the TIMx peripheral when * used in Capture mode. Any other custom configuration can be done after * calling this API. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] config Pointer to the mode configuration struct * @ref DL_Timer_CaptureCombinedConfig. * */ void DL_Timer_initCaptureCombinedMode( GPTIMER_Regs *gptimer, const DL_Timer_CaptureCombinedConfig *config); /** * @brief Configure timer in edge count compare mode * Initializes all the common configurable options for the TIMx peripheral when * used in Compare mode. Any other custom configuration can be done after * calling this API. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] config Pointer to the mode configuration struct * @ref DL_Timer_CompareConfig. * */ void DL_Timer_initCompareMode( GPTIMER_Regs *gptimer, const DL_Timer_CompareConfig *config); /** * @brief Configure timer in edge count compare mode using the trigger as * input source * Initializes all the common configurable options for the TIMx peripheral when * used in Compare mode. Any other custom configuration can be done after * calling this API. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] config Pointer to the mode configuration struct * @ref DL_Timer_CompareTriggerConfig. * */ void DL_Timer_initCompareTriggerMode( GPTIMER_Regs *gptimer, const DL_Timer_CompareTriggerConfig *config); /** * @brief Configure timer in Pulse Width Modulation Mode * Initializes all the common configurable options for the TIMx peripheral when * used in PWM mode. Any other custom configuration can be done after calling * this API. Configures the top two CC blocks and then configures the bottom * two CC blocks. * * @param gptimer Pointer to the register overlay for the * peripheral * @param config Pointer to the mode configuration struct * @ref DL_Timer_PWMConfig. */ void DL_Timer_initFourCCPWMMode( GPTIMER_Regs *gptimer, const DL_Timer_PWMConfig *config); /*! * @brief Redirects to common @ref DL_Timer_initFourCCPWMMode */ #define DL_Timer_initPWMMode DL_Timer_initFourCCPWMMode /** * @brief Reset register controlling counter operation * * @param[in] gptimer Pointer to the register overlay for the * peripheral * */ __STATIC_INLINE void DL_Timer_resetCounterMode(GPTIMER_Regs *gptimer) { gptimer->COUNTERREGS.CTRCTL = GPTIMER_CTRCTL_EN_DISABLED; } /** * @brief Sets Timer Capture Compare Value * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] value Value to write to capture compare register * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * */ void DL_Timer_setCaptureCompareValue( GPTIMER_Regs *gptimer, uint32_t value, DL_TIMER_CC_INDEX ccIndex); /** * @brief Get Timer Capture Compare value * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * * @return The current capture compare value * * */ uint32_t DL_Timer_getCaptureCompareValue( GPTIMER_Regs *gptimer, DL_TIMER_CC_INDEX ccIndex); /** * @brief Sets Capture Compare Control configuration * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccMode Specifies whether the CC register is used as a * capture register or a compare register * @ref DL_TIMER_CC_MODE * @param[in] ccCondMask Specifies zero, load, advance and capture * conditions. Bitwise OR of @ref DL_TIMER_CC_ZCOND, * @ref DL_TIMER_CC_LCOND, @ref DL_TIMER_CC_ACOND, * @ref DL_TIMER_CC_CCOND * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * */ void DL_Timer_setCaptureCompareCtl(GPTIMER_Regs *gptimer, uint32_t ccMode, uint32_t ccCondMask, DL_TIMER_CC_INDEX ccIndex); /** * @brief Gets Capture Compare Control configuration * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * * @return Bitwise OR of @ref DL_TIMER_CC_MODE, @ref DL_TIMER_CC_ZCOND, * @ref DL_TIMER_CC_LCOND, @ref DL_TIMER_CC_ACOND, * @ref DL_TIMER_CC_CCOND * */ uint32_t DL_Timer_getCaptureCompareCtl( GPTIMER_Regs *gptimer, DL_TIMER_CC_INDEX ccIndex); /** * @brief Configures source for second capture compare down event * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] secCompDn Specifies second capture compare down event * source. @ref DL_TIMER_SEC_COMP_DOWN_EVT * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * */ void DL_Timer_setSecondCompSrcDn(GPTIMER_Regs *gptimer, DL_TIMER_SEC_COMP_DOWN_EVT secCompDn, DL_TIMER_CC_INDEX ccIndex); /** * @brief Gets source for second capture compare down event * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * @return @ref DL_TIMER_SEC_COMP_DOWN_EVT */ DL_TIMER_SEC_COMP_DOWN_EVT DL_Timer_getSecondCompSrcDn( GPTIMER_Regs *gptimer, DL_TIMER_CC_INDEX ccIndex); /** * @brief Configures source for second capture compare up event * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] secCompUp Specifies second capture compare up event * source. @ref DL_TIMER_SEC_COMP_UP_EVT * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * */ void DL_Timer_setSecondCompSrcUp(GPTIMER_Regs *gptimer, DL_TIMER_SEC_COMP_UP_EVT secCompUp, DL_TIMER_CC_INDEX ccIndex); /** * @brief Gets source for second capture compare down event * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * @return @ref DL_TIMER_SEC_COMP_UP_EVT */ DL_TIMER_SEC_COMP_UP_EVT DL_Timer_getSecondCompSrcUp( GPTIMER_Regs *gptimer, DL_TIMER_CC_INDEX ccIndex); /** * @brief Enables suppression of compare event if repeat counter is not equal to * zero * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. */ void DL_Timer_enableSuppressionOfCompEvent( GPTIMER_Regs *gptimer, DL_TIMER_CC_INDEX ccIndex); /** * @brief Disables suppression of compare event if repeat counter is not equal * to zero * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. */ void DL_Timer_disableSuppressionOfCompEvent( GPTIMER_Regs *gptimer, DL_TIMER_CC_INDEX ccIndex); /** * @brief Configures capture compare shadow register update method * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccUpdtMode Specifies capture compare shadow register update * method. @ref DL_TIMER_CC_UPDATE_METHOD * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * */ void DL_Timer_setCaptCompUpdateMethod(GPTIMER_Regs *gptimer, DL_TIMER_CC_UPDATE_METHOD ccUpdtMode, DL_TIMER_CC_INDEX ccIndex); /** * @brief Gets capture compare shadow register update method * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * @return @ref DL_TIMER_CC_UPDATE_METHOD */ DL_TIMER_CC_UPDATE_METHOD DL_Timer_getCaptCompUpdateMethod( GPTIMER_Regs *gptimer, DL_TIMER_CC_INDEX ccIndex); /** * @brief Configures capture compare action shadow register update method * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccUpdtMode Specifies capture compare action shadow register * update method. @ref DL_TIMER_CCACT_UPDATE_METHOD * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * */ void DL_Timer_setCaptCompActUpdateMethod(GPTIMER_Regs *gptimer, DL_TIMER_CCACT_UPDATE_METHOD ccUpdtMode, DL_TIMER_CC_INDEX ccIndex); /** * @brief Gets capture compare action shadow register update method * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccIndex Index associated to capture compare action * register @ref DL_TIMER_CC_INDEX. * @return @ref DL_TIMER_CCACT_UPDATE_METHOD */ DL_TIMER_CCACT_UPDATE_METHOD DL_Timer_getCaptCompActUpdateMethod( GPTIMER_Regs *gptimer, DL_TIMER_CC_INDEX ccIndex); /** * @brief Sets Capture Compare Output Control * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccpIV Specifies the logical value put on the CCP * output while the output is disabled * @ref DL_TIMER_CC_OCTL_INIT_VAL * @param[in] ccpOInv Specifies if the he output as selected by ccpo is * inverted. @ref DL_TIMER_CC_OCTL_INV_OUT * @param[in] ccpO CCP Output Source @ref DL_TIMER_CC_OCTL_SRC * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * */ void DL_Timer_setCaptureCompareOutCtl(GPTIMER_Regs *gptimer, uint32_t ccpIV, uint32_t ccpOInv, uint32_t ccpO, DL_TIMER_CC_INDEX ccIndex); /** * @brief Gets Capture Compare Output Control * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * * @return Bitwise OR of @ref DL_TIMER_CC_OCTL_INIT_VAL, * @ref DL_TIMER_CC_OCTL_INV_OUT, @ref DL_TIMER_CC_OCTL_SRC * */ uint32_t DL_Timer_getCaptureCompareOutCtl( GPTIMER_Regs *gptimer, DL_TIMER_CC_INDEX ccIndex); /** * @brief Sets actions of the signal generator * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] actionsMask Bit mask of signal generator actions. Bitwise OR of * @ref DL_TIMER_CC_SWFRCACT_CMPL, @ref DL_TIMER_CC_SWFRCACT, * @ref DL_TIMER_CC_CC2UACT, @ref DL_TIMER_CC_CC2DACT, * @ref DL_TIMER_CC_FEXACT, @ref DL_TIMER_CC_FENACT, * @ref DL_TIMER_CC_CUACT, @ref DL_TIMER_CC_CDACT, * @ref DL_TIMER_CC_LACT, @ref DL_TIMER_CC_ZACT, * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * */ void DL_Timer_setCaptureCompareAction( GPTIMER_Regs *gptimer, uint32_t actionsMask, DL_TIMER_CC_INDEX ccIndex); /** * @brief Gets actions of the signal generator * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * * @return Bitwise OR of @ref DL_TIMER_CC_SWFRCACT_CMPL, @ref DL_TIMER_CC_SWFRCACT, * @ref DL_TIMER_CC_CC2UACT, @ref DL_TIMER_CC_CC2DACT, * @ref DL_TIMER_CC_FEXACT, @ref DL_TIMER_CC_FENACT, * @ref DL_TIMER_CC_CUACT, @ref DL_TIMER_CC_CDACT, * @ref DL_TIMER_CC_LACT, @ref DL_TIMER_CC_ZACT. * */ uint32_t DL_Timer_getCaptureCompareAction( GPTIMER_Regs *gptimer, DL_TIMER_CC_INDEX ccIndex); /** * @brief Set second comparator down counting timer channel output action * * The timer channel output will be set to selected * @ref DL_TIMER_SEC_COMP_DOWN_ACT_SEL when the timer counter reaches the * configured capture compare value configure by * @sa DL_Timer_setSecondCompSrcDn * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] secCompDnAct One of @ref DL_TIMER_SEC_COMP_DOWN_ACT_SEL. * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * */ void DL_Timer_setSecondCompActionDn(GPTIMER_Regs *gptimer, DL_TIMER_SEC_COMP_DOWN_ACT_SEL secCompDnAct, DL_TIMER_CC_INDEX ccIndex); /** * @brief Gets second comparator down counting timer channel output action * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * * @return @ref DL_TIMER_SEC_COMP_DOWN_ACT_SEL * */ DL_TIMER_SEC_COMP_DOWN_ACT_SEL DL_Timer_getSecondCompActionDn( GPTIMER_Regs *gptimer, DL_TIMER_CC_INDEX ccIndex); /** * @brief Sets second comparator up counting timer channel output action * * The timer channel output will be set to selected * @ref DL_TIMER_SEC_COMP_UP_ACT_SEL when the timer counter reaches the * configured capture compare value configure by * @sa DL_Timer_setSecondCompSrcUp * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] secCompUpAct One of @ref DL_TIMER_SEC_COMP_UP_ACT_SEL. * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * */ void DL_Timer_setSecondCompActionUp(GPTIMER_Regs *gptimer, DL_TIMER_SEC_COMP_UP_ACT_SEL secCompUpAct, DL_TIMER_CC_INDEX ccIndex); /** * @brief Gets second comparator up counting timer channel output action * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * * @return @ref DL_TIMER_SEC_COMP_UP_ACT_SEL * */ DL_TIMER_SEC_COMP_UP_ACT_SEL DL_Timer_getSecondCompActionUp( GPTIMER_Regs *gptimer, DL_TIMER_CC_INDEX ccIndex); /** * @brief Overrides the timer CCP output * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] out Specifies the CCP output state. * @ref DL_TIMER_FORCE_OUT * @param[in] outComp If timer insatance supports complementary output, * it allows to override complementary out also. * If timer instance doesn't support complementary * output, this parameter is ignored. * @ref DL_TIMER_FORCE_CMPL_OUT * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. */ void DL_Timer_overrideCCPOut(GPTIMER_Regs *gptimer, DL_TIMER_FORCE_OUT out, DL_TIMER_FORCE_CMPL_OUT outComp, DL_TIMER_CC_INDEX ccIndex); /** * @brief Sets Capture Compare Input * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] inv Specifies whether the selected input is * inverted. @ref DL_TIMER_CC_INPUT_INV * @param[in] isel Selects the input source to the filter * input. @ref DL_TIMER_CC_IN_SEL * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * */ void DL_Timer_setCaptureCompareInput(GPTIMER_Regs *gptimer, uint32_t inv, uint32_t isel, DL_TIMER_CC_INDEX ccIndex); /** * @brief Gets Capture Compare Input * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * * @return Bitwise OR of @ref DL_TIMER_CC_INPUT_FILT_CPV, * @ref DL_TIMER_CC_INPUT_FILT_FP * */ uint32_t DL_Timer_getCaptureCompareInput( GPTIMER_Regs *gptimer, DL_TIMER_CC_INDEX ccIndex); /** * @brief Sets Capture Compare Input Filter * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] cpv Specifies fitering mode. * @ref DL_TIMER_CC_INPUT_FILT_CPV * @param[in] fp Specifies the filter period. * @ref DL_TIMER_CC_INPUT_FILT_FP * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * */ void DL_Timer_setCaptureCompareInputFilter(GPTIMER_Regs *gptimer, uint32_t cpv, uint32_t fp, DL_TIMER_CC_INDEX ccIndex); /** * @brief Gets Capture Compare Input Filter * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * * @return Bitwise OR of @ref DL_TIMER_CC_INPUT_FILT_CPV, * @ref DL_TIMER_CC_INPUT_FILT_FP * */ uint32_t DL_Timer_getCaptureCompareInputFilter( GPTIMER_Regs *gptimer, DL_TIMER_CC_INDEX ccIndex); /** * @brief Enables the capture compare input filter * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. */ void DL_Timer_enableCaptureCompareInputFilter( GPTIMER_Regs *gptimer, DL_TIMER_CC_INDEX ccIndex); /** * @brief Disables the capture compare input filter * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. */ void DL_Timer_disableCaptureCompareInputFilter( GPTIMER_Regs *gptimer, DL_TIMER_CC_INDEX ccIndex); /** * @brief Checks if the capture compare input filter is enabled * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * @return Returns the status of capture compare input filter * * @retval true capture compare input filter is enabled * @retval false capture compare input filter is disabled */ bool DL_Timer_isCaptureCompareInputFilterEnabled( GPTIMER_Regs *gptimer, DL_TIMER_CC_INDEX ccIndex); /** * @brief Sets dead band fall and raise delay * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] falldelay The number of TIMCLK periods inserted between * the fall of CCPi and the rise of CCPBo. Valid * range [0- 4095] * @param[in] risedelay The number of TIMCLK periods inserted * between the fall of CCPi and the rise of CCPAo. * Valid range [0- 4095]. * @param[in] mode Specifies the dead band insertion mode. One of * @ref DL_TIMER_DEAD_BAND_MODE * */ __STATIC_INLINE void DL_Timer_setDeadBand(GPTIMER_Regs *gptimer, uint16_t falldelay, uint16_t risedelay, uint32_t mode) { gptimer->COUNTERREGS.DBCTL = (((uint32_t) falldelay << GPTIMER_DBCTL_FALLDELAY_OFS) | (uint32_t) risedelay | mode); } /** * @brief Gets dead band fall delay * * @param[in] gptimer Pointer to the register overlay for the * peripheral * * @return Dead Band Fall delay in TIMCLK */ __STATIC_INLINE uint16_t DL_Timer_getDeadBandFallDelay( const GPTIMER_Regs *gptimer) { uint32_t temp = (gptimer->COUNTERREGS.DBCTL & GPTIMER_DBCTL_FALLDELAY_MASK) >> GPTIMER_DBCTL_FALLDELAY_OFS; return ((uint16_t) temp); } /** * @brief Gets dead band rise delay * * @param[in] gptimer Pointer to the register overlay for the * peripheral * * @return Dead Band Rise delay in TIMCLK */ __STATIC_INLINE uint16_t DL_Timer_getDeadBandRiseDelay( const GPTIMER_Regs *gptimer) { return (uint16_t)( (gptimer->COUNTERREGS.DBCTL) & (GPTIMER_DBCTL_RISEDELAY_MASK)); } /** * @brief Set External Trigger Event * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] trigSel External Trigger Select * @ref DL_TIMER_EXT_TRIG_SEL * */ __STATIC_INLINE void DL_Timer_setExternalTriggerEvent( GPTIMER_Regs *gptimer, DL_TIMER_EXT_TRIG_SEL trigSel) { DL_Common_updateReg(&gptimer->COUNTERREGS.TSEL, (uint32_t) trigSel, GPTIMER_TSEL_ETSEL_MASK); } /** * @brief Gets External Trigger Event * * @param[in] gptimer Pointer to the register overlay for the * peripheral * * @return @ref DL_TIMER_EXT_TRIG_SEL * */ __STATIC_INLINE DL_TIMER_EXT_TRIG_SEL DL_Timer_getExternalTriggerEvent( const GPTIMER_Regs *gptimer) { uint32_t trigSel = gptimer->COUNTERREGS.TSEL & GPTIMER_TSEL_ETSEL_MASK; return (DL_TIMER_EXT_TRIG_SEL)(trigSel); } /** * @brief Enables external trigger * * @param[in] gptimer Pointer to the register overlay for the * peripheral * */ __STATIC_INLINE void DL_Timer_enableExternalTrigger(GPTIMER_Regs *gptimer) { gptimer->COUNTERREGS.TSEL |= (GPTIMER_TSEL_TE_ENABLED); } /** * @brief Disables external trigger * * @param[in] gptimer Pointer to the register overlay for the * peripheral * */ __STATIC_INLINE void DL_Timer_disableExternalTrigger(GPTIMER_Regs *gptimer) { gptimer->COUNTERREGS.TSEL &= ~(GPTIMER_TSEL_TE_ENABLED); } /** * @brief Checks if external trigger is enabled * * @param[in] gptimer Pointer to the register overlay for the * peripheral * * @return Returns the status of external trigger * * @retval true external trigger is enabled * @retval false external trigger is disabled */ __STATIC_INLINE bool DL_Timer_isExternalTriggerEnabled( const GPTIMER_Regs *gptimer) { return ((gptimer->COUNTERREGS.TSEL & GPTIMER_TSEL_TE_MASK) == GPTIMER_TSEL_TE_ENABLED); } /** * @brief Sets repeat counter value. Repeat counter feature is used to * reduce interupt overhead. * @note This feature is not supported by all TimerA instances. * Please refer to the "TIMx Configurations" table in the * device specific datasheet to determine TimerA instances which * support "Repeat Counter" configuration. * * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] repeatCount Specifies repeat counter value * */ __STATIC_INLINE void DL_Timer_setRepeatCounter( GPTIMER_Regs *gptimer, uint8_t repeatCount) { gptimer->COUNTERREGS.RCLD = (repeatCount); } /** * @brief Gets repeat counter value. * @note This feature is not supported by all TimerA instances. * Please refer to the "TIMx Configurations" table in the * device specific datasheet to determine TimerA instances which * support "Repeat Counter" configuration. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * * @return Repeat counter value. * */ __STATIC_INLINE uint8_t DL_Timer_getRepeatCounter(const GPTIMER_Regs *gptimer) { return ((uint8_t)(gptimer->COUNTERREGS.RC & GPTIMER_RC_RC_MASK)); } /** * @brief Enables phase load * * @param[in] gptimer Pointer to the register overlay for the * peripheral * */ __STATIC_INLINE void DL_Timer_enablePhaseLoad(GPTIMER_Regs *gptimer) { gptimer->COUNTERREGS.CTRCTL |= (GPTIMER_CTRCTL_PLEN_ENABLED); } /** * @brief Disables phase load * * @param[in] gptimer Pointer to the register overlay for the * peripheral * * */ __STATIC_INLINE void DL_Timer_disablePhaseLoad(GPTIMER_Regs *gptimer) { gptimer->COUNTERREGS.CTRCTL &= ~(GPTIMER_CTRCTL_PLEN_ENABLED); } /** * @brief Checks if phase load enabled * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @return Returns the status of phase load * * @retval true phase load is enabled * @retval false phase load is disabled * */ __STATIC_INLINE bool DL_Timer_isPhaseLoadEnabled(const GPTIMER_Regs *gptimer) { return (GPTIMER_CTRCTL_PLEN_ENABLED == (gptimer->COUNTERREGS.CTRCTL & GPTIMER_CTRCTL_PLEN_MASK)); } /** * @brief Sets phase load value * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] value Phase load value * */ __STATIC_INLINE void DL_Timer_setPhaseLoadValue( GPTIMER_Regs *gptimer, uint32_t value) { gptimer->COUNTERREGS.PL = (value); } /** * @brief Gets phase load value * * @param[in] gptimer Pointer to the register overlay for the * peripheral * * @return Phase load value */ __STATIC_INLINE uint32_t DL_Timer_getPhaseLoadValue( const GPTIMER_Regs *gptimer) { return ((uint32_t)(gptimer->COUNTERREGS.PL & GPTIMER_PL_PHASE_MASK)); } /** * @brief Starts Timer Counter * * @param[in] gptimer Pointer to the register overlay for the * peripheral * */ __STATIC_INLINE void DL_Timer_startCounter(GPTIMER_Regs *gptimer) { gptimer->COUNTERREGS.CTRCTL |= (GPTIMER_CTRCTL_EN_ENABLED); } /** * @brief Stops Timer Counter * * @param[in] gptimer Pointer to the register overlay for the * peripheral * */ __STATIC_INLINE void DL_Timer_stopCounter(GPTIMER_Regs *gptimer) { gptimer->COUNTERREGS.CTRCTL &= ~(GPTIMER_CTRCTL_EN_ENABLED); } /** * @brief Check if timer is actively running * * @param[in] gptimer Pointer to the register overlay for the * peripheral * * @return Returns the running status of the Timer * * @retval true Timer is running * @retval false Timer is not running */ __STATIC_INLINE bool DL_Timer_isRunning(const GPTIMER_Regs *gptimer) { return ((gptimer->COUNTERREGS.CTRCTL & GPTIMER_CTRCTL_EN_MASK) == GPTIMER_CTRCTL_EN_ENABLED); } /** * @brief Configure Quadrature Encoder Interface (QEI) * * @post User should call @ref DL_Timer_setLoadValue and * @ref DL_Timer_startCounter to complete the QEI Configuration. * Refer to Timer TRM for more details. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] mode Choose QEI input mode. One of @ref DL_TIMER_QEI_MODE * @param[in] invert Control whether selected input is inverted. * One of @ref DL_TIMER_CC_INPUT_INV * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. */ __STATIC_INLINE void DL_Timer_configQEI(GPTIMER_Regs *gptimer, DL_TIMER_QEI_MODE mode, uint32_t invert, DL_TIMER_CC_INDEX ccIndex) { gptimer->COUNTERREGS.CCCTL_01[ccIndex] = GPTIMER_CCCTL_01_CCOND_CC_TRIG_RISE | GPTIMER_CCCTL_01_COC_CAPTURE; gptimer->COUNTERREGS.IFCTL_01[ccIndex] = GPTIMER_IFCTL_01_ISEL_CCPX_INPUT | invert; gptimer->COUNTERREGS.CTRCTL = (uint32_t) mode | GPTIMER_CTRCTL_CVAE_NOCHANGE | GPTIMER_CTRCTL_CM_UP_DOWN | GPTIMER_CTRCTL_REPEAT_REPEAT_1; } /** * @brief Configure Hall Input Mode * * @note Refer to device datasheet to determine if timer instance supports * this feature. Only TIMGx instances with QEI support should use this API. * * @post User should call @ref DL_Timer_setLoadValue and * @ref DL_Timer_startCounter to complete the Hall Input Mode Configuration. * Refer to Timer TRM for more details. * * @param[in] gptimer Pointer to the register overlay for the * peripheral */ void DL_Timer_configQEIHallInputMode(GPTIMER_Regs *gptimer); /** * @brief Get direction of Quadrature Encoder Interface (QEI) count * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @retval One of @ref DL_TIMER_QEI_DIRECTION values */ __STATIC_INLINE DL_TIMER_QEI_DIRECTION DL_Timer_getQEIDirection( const GPTIMER_Regs *gptimer) { uint32_t qeiDirection = gptimer->COUNTERREGS.QDIR & GPTIMER_QDIR_DIR_MASK; return (DL_TIMER_QEI_DIRECTION)(qeiDirection); } /** * @brief Sets Fault Configuration * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] faultConfMask Specifies faults configuration. Bitwise OR of * @ref DL_TIMER_FAULT_CONFIG_TFIM, * @ref DL_TIMER_FAULT_CONFIG_FL, * @ref DL_TIMER_FAULT_CONFIG_FI, * @ref DL_TIMER_FAULT_CONFIG_FIEN * */ __STATIC_INLINE void DL_Timer_setFaultConfig( GPTIMER_Regs *gptimer, uint32_t faultConfMask) { DL_Common_updateReg(&gptimer->COUNTERREGS.FCTL, faultConfMask, (GPTIMER_FCTL_TFIM_MASK | GPTIMER_FCTL_FL_MASK | GPTIMER_FCTL_FI_MASK | GPTIMER_FCTL_FIEN_MASK)); } /** * @brief Gets Fault Configuration * * @param[in] gptimer Pointer to the register overlay for the * peripheral * * @return Bitwise OR value of @ref DL_TIMER_FAULT_CONFIG_TFIM, * @ref DL_TIMER_FAULT_CONFIG_FL, @ref DL_TIMER_FAULT_CONFIG_FI, * @ref DL_TIMER_FAULT_CONFIG_FIEN * */ __STATIC_INLINE uint32_t DL_Timer_getFaultConfig(const GPTIMER_Regs *gptimer) { return (gptimer->COUNTERREGS.FCTL & (GPTIMER_FCTL_FIEN_MASK | GPTIMER_FCTL_FI_MASK | GPTIMER_FCTL_FL_MASK | GPTIMER_FCTL_TFIM_MASK)); } /** * @brief Enables fault input detection * * @param[in] gptimer Pointer to the register overlay for the * peripheral */ __STATIC_INLINE void DL_Timer_enableFaultInput(GPTIMER_Regs *gptimer) { gptimer->COUNTERREGS.FCTL |= (GPTIMER_FCTL_FIEN_ENABLED); } /** * @brief Disables fault input detection * * @param[in] gptimer Pointer to the register overlay for the * peripheral */ __STATIC_INLINE void DL_Timer_disableFaultInput(GPTIMER_Regs *gptimer) { gptimer->COUNTERREGS.FCTL &= ~(GPTIMER_FCTL_FIEN_ENABLED); } /** * @brief Specifies if fault input is enabled * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @return true Fault input is enabled * @return false Fault input is disabled */ __STATIC_INLINE bool DL_Timer_isFaultInputEnabled(const GPTIMER_Regs *gptimer) { return (GPTIMER_FCTL_FIEN_ENABLED == (gptimer->COUNTERREGS.FCTL & GPTIMER_FCTL_FIEN_MASK)); } /** * @brief Enables source clock fault detection * * @param[in] gptimer Pointer to the register overlay for the * peripheral */ __STATIC_INLINE void DL_Timer_enableClockFaultDetection(GPTIMER_Regs *gptimer) { gptimer->COMMONREGS.FSCTL |= (GPTIMER_FSCTL_FCEN_DISABLE); } /** * @brief Disables source clock fault detection * * @param[in] gptimer Pointer to the register overlay for the * peripheral */ __STATIC_INLINE void DL_Timer_disableClockFaultDetection(GPTIMER_Regs *gptimer) { gptimer->COMMONREGS.FSCTL &= ~(GPTIMER_FSCTL_FCEN_DISABLE); } /** * @brief Specifies if source clock fault detection is enabled * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @return true if source clock fault detection is enabled * @return false if source clock fault detection is disabled */ __STATIC_INLINE bool DL_Timer_isClockFaultDetectionEnabled( const GPTIMER_Regs *gptimer) { return (GPTIMER_FSCTL_FCEN_ENABLE == (gptimer->COMMONREGS.FSCTL & GPTIMER_FSCTL_FCEN_MASK)); } /** * @brief Configures the fault source and and fault input mode * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] source Selects fault source and and fault input mode. One of * @ref DL_TIMER_FAULT_SOURCE. * */ void DL_Timer_setFaultSourceConfig(GPTIMER_Regs *gptimer, uint32_t source); /** * @brief * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @return The fault source and and fault input mode. One of * @ref DL_TIMER_FAULT_SOURCE. */ uint32_t DL_Timer_getFaultSourceConfig(const GPTIMER_Regs *gptimer); /** * @brief Set Fault Input Filtering Configuration * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] filten Specifies input is filter mode * @ref DL_TIMER_FAULT_FILT * @param[in] cpv Specifies input filter type * @ref DL_TIMER_FAULT_FILTER_CPV * @param[in] fp Specifies sample period for the input filter * @ref DL_TIMER_FAULT_FILTER_FP * */ __STATIC_INLINE void DL_Timer_setFaultInputFilterConfig( GPTIMER_Regs *gptimer, uint32_t filten, uint32_t cpv, uint32_t fp) { gptimer->COUNTERREGS.FIFCTL = (filten | cpv | fp); } /** * @brief Get Fault Input Filtering Configuration * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @return Bitwise OR of @ref DL_TIMER_FAULT_FILT, * @ref DL_TIMER_FAULT_FILTER_CPV and @ref DL_TIMER_FAULT_FILTER_FP * */ __STATIC_INLINE uint32_t DL_Timer_getFaultInputFilterConfig( const GPTIMER_Regs *gptimer) { return (gptimer->COUNTERREGS.FIFCTL); } /** * @brief Configures output behavior upon fault entry and exit * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] faultEntry Specifies the fault entry behavior. * One of @ref DL_TIMER_FAULT_ENTRY_CCP * @param[in] faultExit Specifies the fault exit behavior. * One of @ref DL_TIMER_FAULT_EXIT_CCP * @param[in] ccIndex Index associated to capture compare register * @ref DL_TIMER_CC_INDEX. * */ __STATIC_INLINE void DL_Timer_configFaultOutputAction(GPTIMER_Regs *gptimer, DL_TIMER_FAULT_ENTRY_CCP faultEntry, DL_TIMER_FAULT_EXIT_CCP faultExit, DL_TIMER_CC_INDEX ccIndex) { DL_Common_updateReg(&gptimer->COUNTERREGS.CCACT_01[ccIndex], ((uint32_t) faultEntry | (uint32_t) faultExit), (GPTIMER_CCACT_01_FEXACT_MASK | GPTIMER_CCACT_01_FENACT_MASK)); } /** * @brief Configures timer counter behavior upon fault entry and exit * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] faultEntry Specifies the fault entry behavior. * One of @ref DL_TIMER_FAULT_ENTRY_CTR * @param[in] faultExit Specifies the fault exit behavior. * One of @ref DL_TIMER_FAULT_EXIT_CTR * */ __STATIC_INLINE void DL_Timer_configFaultCounter(GPTIMER_Regs *gptimer, DL_TIMER_FAULT_ENTRY_CTR faultEntry, DL_TIMER_FAULT_EXIT_CTR faultExit) { DL_Common_updateReg(&gptimer->COUNTERREGS.CTRCTL, ((uint32_t) faultEntry | (uint32_t) faultExit), (GPTIMER_CTRCTL_FRB_MASK | GPTIMER_CTRCTL_FB_MASK)); } /** * @brief Enable timer interrupts * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] interruptMask Bit mask of interrupts to enable. Bitwise OR of * @ref DL_TIMER_INTERRUPT. */ __STATIC_INLINE void DL_Timer_enableInterrupt( GPTIMER_Regs *gptimer, uint32_t interruptMask) { gptimer->CPU_INT.IMASK |= interruptMask; } /** * @brief Disable timer interrupts * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] interruptMask Bit mask of interrupts to enable. Bitwise OR of * @ref DL_TIMER_INTERRUPT. */ __STATIC_INLINE void DL_Timer_disableInterrupt( GPTIMER_Regs *gptimer, uint32_t interruptMask) { gptimer->CPU_INT.IMASK &= ~(interruptMask); } /** * @brief Check which timer interrupts are enabled * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] interruptMask Bit mask of interrupts to check. Bitwise OR of * @ref DL_TIMER_INTERRUPT. * * @return Which of the requested timer interrupts are enabled * * @retval Bitwise OR of @ref DL_TIMER_INTERRUPT values */ __STATIC_INLINE uint32_t DL_Timer_getEnabledInterrupts( const GPTIMER_Regs *gptimer, uint32_t interruptMask) { return (gptimer->CPU_INT.IMASK & interruptMask); } /** * @brief Check interrupt flag of enabled timer interrupts * * Checks if any of the timer interrupts that were previously enabled are * pending. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] interruptMask Bit mask of interrupts to check. Bitwise OR of * @ref DL_TIMER_INTERRUPT. * * @return Which of the requested timer interrupts are pending * * @retval Bitwise OR of @ref DL_TIMER_INTERRUPT values * * @sa DL_Timer_enableInterrupt */ __STATIC_INLINE uint32_t DL_Timer_getEnabledInterruptStatus( const GPTIMER_Regs *gptimer, uint32_t interruptMask) { return (gptimer->CPU_INT.MIS & interruptMask); } /** * @brief Check interrupt flag of any timer interrupt * * Checks if any of the timer interrupts are pending. Interrupts do not have to * be previously enabled. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] interruptMask Bit mask of interrupts to check. Bitwise OR of * @ref DL_TIMER_INTERRUPT. * * @return Which of the requested timer interrupts are pending * * @retval Bitwise OR of @ref DL_TIMER_INTERRUPT values */ __STATIC_INLINE uint32_t DL_Timer_getRawInterruptStatus( const GPTIMER_Regs *gptimer, uint32_t interruptMask) { return (gptimer->CPU_INT.RIS & interruptMask); } /** * @brief Get highest priority pending timer interrupt * * Checks if any of the timer interrupts are pending. Interrupts do not have to * be previously enabled. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * * @return The highest priority pending timer interrupt. One of * @ref DL_TIMER_IIDX */ __STATIC_INLINE DL_TIMER_IIDX DL_Timer_getPendingInterrupt( const GPTIMER_Regs *gptimer) { return ((DL_TIMER_IIDX) gptimer->CPU_INT.IIDX); } /** * @brief Clear pending timer interrupts * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] interruptMask Bit mask of interrupts to clear. Bitwise OR of * @ref DL_TIMER_INTERRUPT. */ __STATIC_INLINE void DL_Timer_clearInterruptStatus( GPTIMER_Regs *gptimer, uint32_t interruptMask) { gptimer->CPU_INT.ICLR = interruptMask; } /** * @brief Sets the event publisher channel id * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] index Specifies the register event index to be configured * @param[in] chanID Channel ID number. Valid range 0-15. If ChanID == 0 * publisher is disconnected. */ __STATIC_INLINE void DL_Timer_setPublisherChanID( GPTIMER_Regs *gptimer, DL_TIMER_PUBLISHER_INDEX index, uint8_t chanID) { volatile uint32_t *pReg = &gptimer->FPUB_0; *(pReg + (uint32_t) index) = (chanID & GPTIMER_FPUB_0_CHANID_MAXIMUM); } /** * @brief Gets the event publisher channel id * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] index Specifies the register event index to be configured * * @return Event publisher channel ID * */ __STATIC_INLINE uint8_t DL_Timer_getPublisherChanID( GPTIMER_Regs *gptimer, DL_TIMER_PUBLISHER_INDEX index) { volatile uint32_t *pReg = &gptimer->FPUB_0; return ( (uint8_t)(*(pReg + (uint32_t) index) & GPTIMER_FPUB_0_CHANID_MASK)); } /** * @brief Sets the event subscriber channel id * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] index Specifies the register event index to be configured * @param[in] chanID Channel ID number. Valid range 0-15. If ChanID == 0 * subscriber is disconnected. */ __STATIC_INLINE void DL_Timer_setSubscriberChanID( GPTIMER_Regs *gptimer, DL_TIMER_SUBSCRIBER_INDEX index, uint8_t chanID) { volatile uint32_t *pReg = &gptimer->FSUB_0; *(pReg + (uint32_t) index) = (chanID & GPTIMER_FSUB_0_CHANID_MAXIMUM); } /** * @brief Gets the event subscriber channel id * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] index Specifies the register event index to be configured * * @return Event subscriber channel ID * */ __STATIC_INLINE uint8_t DL_Timer_getSubscriberChanID( GPTIMER_Regs *gptimer, DL_TIMER_SUBSCRIBER_INDEX index) { volatile uint32_t *pReg = &gptimer->FSUB_0; return ( (uint8_t)(*(pReg + (uint32_t) index) & GPTIMER_FSUB_0_CHANID_MASK)); } /** * @brief Enable timer event * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] index Specifies the register event index to be * configured * @param[in] eventMask Bit mask of interrupts to enable. Bitwise OR of * @ref DL_TIMER_EVENT. */ __STATIC_INLINE void DL_Timer_enableEvent( GPTIMER_Regs *gptimer, DL_TIMER_EVENT_ROUTE index, uint32_t eventMask) { volatile uint32_t *pReg = (volatile uint32_t *) &gptimer->GEN_EVENT0.IMASK; *(pReg + (uint32_t) index) |= (eventMask); } /** * @brief Disable timer event * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] index Specifies the register event index to be * configured * @param[in] eventMask Bit mask of interrupts to enable. Bitwise OR of * @ref DL_TIMER_EVENT. */ __STATIC_INLINE void DL_Timer_disableEvent( GPTIMER_Regs *gptimer, DL_TIMER_EVENT_ROUTE index, uint32_t eventMask) { volatile uint32_t *pReg = (volatile uint32_t *) &gptimer->GEN_EVENT0.IMASK; *(pReg + (uint32_t) index) &= ~(eventMask); } /** * @brief Check which timer events are enabled * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] index Specifies the register event index to be * configured * @param[in] eventMask Bit mask of interrupts to check. Bitwise OR of * @ref DL_TIMER_EVENT. * * @return Which of the requested timer interrupts are enabled * * @retval Bitwise OR of @ref DL_TIMER_EVENT values */ __STATIC_INLINE uint32_t DL_Timer_getEnabledEvents( GPTIMER_Regs *gptimer, DL_TIMER_EVENT_ROUTE index, uint32_t eventMask) { volatile uint32_t *pReg = (volatile uint32_t *) &gptimer->GEN_EVENT0.IMASK; return ((*(pReg + (uint32_t) index) & eventMask)); } /** * @brief Check event flag of enabled timer event * * Checks if any of the timer events that were previously enabled are * pending. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] index Specifies the register event index to be * configured * @param[in] eventMask Bit mask of interrupts to check. Bitwise OR of * @ref DL_TIMER_EVENT. * * @return Which of the requested timer interrupts are pending * * @retval Bitwise OR of @ref DL_TIMER_EVENT values * * @sa DL_Timer_enableInterrupt */ __STATIC_INLINE uint32_t DL_Timer_getEnabledEventStatus( const GPTIMER_Regs *gptimer, DL_TIMER_EVENT_ROUTE index, uint32_t eventMask) { const volatile uint32_t *pReg = (const volatile uint32_t *) &gptimer->GEN_EVENT0.MIS; return ((*(pReg + (uint32_t) index) & eventMask)); } /** * @brief Check interrupt flag of any timer event * * Checks if any events are pending. Events do not have to * be previously enabled. * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] index Specifies the register event index to be * configured * @param[in] eventMask Bit mask of interrupts to check. Bitwise OR of * @ref DL_TIMER_EVENT. * * @return Which of the requested timer interrupts are pending * * @retval Bitwise OR of @ref DL_TIMER_EVENT values */ __STATIC_INLINE uint32_t DL_Timer_getRawEventsStatus( const GPTIMER_Regs *gptimer, DL_TIMER_EVENT_ROUTE index, uint32_t eventMask) { const volatile uint32_t *pReg = (const volatile uint32_t *) &gptimer->GEN_EVENT0.RIS; return ((*(pReg + (uint32_t) index) & eventMask)); } /** * @brief Clear pending timer events * * @param[in] gptimer Pointer to the register overlay for the * peripheral * @param[in] index Specifies the register event index to be * configured * @param[in] eventMask Bit mask of interrupts to clear. Bitwise OR of * @ref DL_TIMER_EVENT. */ __STATIC_INLINE void DL_Timer_clearEventsStatus( GPTIMER_Regs *gptimer, DL_TIMER_EVENT_ROUTE index, uint32_t eventMask) { volatile uint32_t *pReg = (volatile uint32_t *) &gptimer->GEN_EVENT0.ICLR; *(pReg + (uint32_t) index) |= (eventMask); } /** * @brief Saves Timer configuration before entering STOP or STANDBY mode. * Timer must be in IDLE state before calling this API. Timer can * be put IDLE state by calling @ref DL_TimerG_stopCounter or * @ref DL_Timer_stopCounter. * * @param[in] gptimer Pointer to the register overlay for the peripheral * * @param[in] ptr Configuration backup setup structure. See * @ref DL_Timer_backupConfig. * * @retval FALSE if a configuration already exists in ptr (will not be * overwritten). TRUE if a configuration was successfully saved * */ bool DL_Timer_saveConfiguration( const GPTIMER_Regs *gptimer, DL_Timer_backupConfig *ptr); /** * @brief Restore Timer configuration after leaving STOP or STANDBY mode. * * @param[in] gptimer Pointer to the register overlay for the peripheral * * @param[in] ptr Configuration backup setup structure. See * @ref DL_Timer_backupConfig. * @param[in] restoreCounter If true timer counter value is also * restored (e.g. resume counts of edge counts). * If false timer counter is not restored. * * @retval FALSE if a configuration does not exist in ptr (will not be * loaded). TRUE if a configuration successfully loaded * */ bool DL_Timer_restoreConfiguration( GPTIMER_Regs *gptimer, DL_Timer_backupConfig *ptr, bool restoreCounter); /** * @brief Configures timer behavior when the core is halted. * * @param[in] gptimer Pointer to the register overlay for the peripheral * * @param[in] haltMode Timer halt behavior. One of @ref DL_TIMER_CORE_HALT. * */ __STATIC_INLINE void DL_Timer_setCoreHaltBehavior( GPTIMER_Regs *gptimer, DL_TIMER_CORE_HALT haltMode) { gptimer->PDBGCTL = ((uint32_t) haltMode & (GPTIMER_PDBGCTL_FREE_MASK | GPTIMER_PDBGCTL_SOFT_MASK)); } /** * @brief Get timer behavior when the core is halted. * * @param[in] gptimer Pointer to the register overlay for the peripheral * * @return Timer bahvior when core is halted. One of * @ref DL_TIMER_CORE_HALT * */ __STATIC_INLINE DL_TIMER_CORE_HALT DL_Timer_getCoreHaltBehavior( const GPTIMER_Regs *gptimer) { uint32_t haltMode = (gptimer->PDBGCTL & (GPTIMER_PDBGCTL_FREE_MASK | GPTIMER_PDBGCTL_SOFT_MASK)); return (DL_TIMER_CORE_HALT)(haltMode); } #ifdef __cplusplus } #endif #endif /* __MSPM0_HAS_TIMER_A__ || __MSPM0_HAS_TIMER_G__ */ #else #warning \ "TI highly recommends accessing timer with dl_timera and dl_timerg only." #endif /* ti_dl_dl_timera__include ti_dl_dl_timerg__include*/ #endif /* ti_dl_dl_timer__include */ /** @}*/