Boen_Shi 8be2866433 feat(base): 初始化 MSPM0 开发环境
- 添加头文件和配置文件支持
- 更新.gitignore忽略编译和IDE相关文件
- 添加基础的bsp代码
2026-07-16 14:45:26 +08:00

4443 lines
151 KiB
C

/*
* 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.
* <hr>
* @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 <ti/driverlib/dl_timerg.h>
* @endcode
*
* To access TimerA functionality:
* @code
* // Import TIMA definitions
* #include <ti/driverlib/dl_timera.h>
* @endcode
*
* <hr>
******************************************************************************
*/
/** @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 <stdbool.h>
#include <stdint.h>
#include <ti/devices/msp/msp.h>
#include <ti/driverlib/dl_common.h>
#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 <b> This is a Timer A specific interrupt. </b>
*/
DL_TIMER_IIDX_REPEAT_COUNT = GPTIMER_CPU_INT_IIDX_STAT_REPC,
/*! Timer interrupt index for direction change interrupt
* @note <b> Please refer the Timer TRM to determine TIMG instances which
* support this feature. </b> */
DL_TIMER_IIDX_DIR_CHANGE = GPTIMER_CPU_INT_IIDX_STAT_DC,
/*! Timer interrupt index for QEI incorrect state transition
* @note <b> Please refer the Timer TRM to determine TIMG instances which
* support this feature. </b> */
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 <b>Warning</b> 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 <b>This feature is not supported by all TimerA instances.</b>
* 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 <b>This feature is not supported by all TimerA instances.</b>
* 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 */
/** @}*/