summaryrefslogtreecommitdiff
path: root/drivers/include/fsl_tsi_v2.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/include/fsl_tsi_v2.h')
-rw-r--r--drivers/include/fsl_tsi_v2.h777
1 files changed, 777 insertions, 0 deletions
diff --git a/drivers/include/fsl_tsi_v2.h b/drivers/include/fsl_tsi_v2.h
new file mode 100644
index 0000000..a173626
--- /dev/null
+++ b/drivers/include/fsl_tsi_v2.h
@@ -0,0 +1,777 @@
+/*
+ * Copyright (c) 2015, Freescale Semiconductor, Inc.
+ * Copyright 2016-2017 NXP
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * o Redistributions of source code must retain the above copyright notice, this list
+ * of conditions and the following disclaimer.
+ *
+ * o 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.
+ *
+ * o Neither the name of the copyright holder 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 HOLDER 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.
+ */
+#ifndef _FSL_TSI_V2_H_
+#define _FSL_TSI_V2_H_
+
+#include "fsl_common.h"
+
+/*!
+ * @addtogroup tsi_v2_driver
+ * @{
+ */
+
+
+/*******************************************************************************
+ * Definitions
+ ******************************************************************************/
+
+/*! @name Driver version */
+/*@{*/
+/*! @brief TSI driver version */
+#define FSL_TSI_DRIVER_VERSION (MAKE_VERSION(2, 1, 2))
+/*@}*/
+
+/*! @brief TSI status flags macro collection */
+#define ALL_FLAGS_MASK (TSI_GENCS_EOSF_MASK |\
+ TSI_GENCS_OUTRGF_MASK |\
+ TSI_GENCS_EXTERF_MASK |\
+ TSI_GENCS_OVRF_MASK)
+
+
+/*!
+ * @brief TSI number of scan intervals for each electrode.
+ *
+ * These constants define the TSI number of consecutive scans in a TSI instance for each electrode.
+ */
+typedef enum _tsi_n_consecutive_scans
+{
+ kTSI_ConsecutiveScansNumber_1time = 0U, /*!< Once per electrode */
+ kTSI_ConsecutiveScansNumber_2time = 1U, /*!< Twice per electrode */
+ kTSI_ConsecutiveScansNumber_3time = 2U, /*!< 3 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_4time = 3U, /*!< 4 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_5time = 4U, /*!< 5 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_6time = 5U, /*!< 6 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_7time = 6U, /*!< 7 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_8time = 7U, /*!< 8 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_9time = 8U, /*!< 9 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_10time = 9U, /*!< 10 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_11time = 10U, /*!< 11 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_12time = 11U, /*!< 12 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_13time = 12U, /*!< 13 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_14time = 13U, /*!< 14 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_15time = 14U, /*!< 15 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_16time = 15U, /*!< 16 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_17time = 16U, /*!< 17 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_18time = 17U, /*!< 18 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_19time = 18U, /*!< 19 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_20time = 19U, /*!< 20 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_21time = 20U, /*!< 21 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_22time = 21U, /*!< 22 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_23time = 22U, /*!< 23 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_24time = 23U, /*!< 24 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_25time = 24U, /*!< 25 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_26time = 25U, /*!< 26 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_27time = 26U, /*!< 27 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_28time = 27U, /*!< 28 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_29time = 28U, /*!< 29 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_30time = 29U, /*!< 30 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_31time = 30U, /*!< 31 times consecutive scan */
+ kTSI_ConsecutiveScansNumber_32time = 31U /*!< 32 times consecutive scan */
+} tsi_n_consecutive_scans_t;
+
+/*!
+ * @brief TSI electrode oscillator prescaler.
+ *
+ * These constants define the TSI electrode oscillator prescaler in a TSI instance.
+ */
+typedef enum _tsi_electrode_osc_prescaler
+{
+ kTSI_ElecOscPrescaler_1div = 0U, /*!< Electrode oscillator frequency divided by 1 */
+ kTSI_ElecOscPrescaler_2div = 1U, /*!< Electrode oscillator frequency divided by 2 */
+ kTSI_ElecOscPrescaler_4div = 2U, /*!< Electrode oscillator frequency divided by 4 */
+ kTSI_ElecOscPrescaler_8div = 3U, /*!< Electrode oscillator frequency divided by 8 */
+ kTSI_ElecOscPrescaler_16div = 4U, /*!< Electrode oscillator frequency divided by 16 */
+ kTSI_ElecOscPrescaler_32div = 5U, /*!< Electrode oscillator frequency divided by 32 */
+ kTSI_ElecOscPrescaler_64div = 6U, /*!< Electrode oscillator frequency divided by 64 */
+ kTSI_ElecOscPrescaler_128div = 7U /*!< Electrode oscillator frequency divided by 128 */
+} tsi_electrode_osc_prescaler_t;
+
+/*!
+ * @brief TSI low power mode clock source.
+ */
+typedef enum _tsi_low_power_clock_source
+{
+ kTSI_LowPowerClockSource_LPOCLK = 0U, /*!< LPOCLK is selected */
+ kTSI_LowPowerClockSource_VLPOSCCLK = 1U /*!< VLPOSCCLK is selected */
+} tsi_low_power_clock_source_t;
+
+/*!
+ * @brief TSI low power scan intervals.
+ *
+ * These constants define the TSI low power scan intervals in a TSI instance.
+ */
+typedef enum _tsi_low_power_scan_interval
+{
+ kTSI_LowPowerInterval_1ms = 0U, /*!< 1 ms scan interval */
+ kTSI_LowPowerInterval_5ms = 1U, /*!< 5 ms scan interval */
+ kTSI_LowPowerInterval_10ms = 2U, /*!< 10 ms scan interval */
+ kTSI_LowPowerInterval_15ms = 3U, /*!< 15 ms scan interval */
+ kTSI_LowPowerInterval_20ms = 4U, /*!< 20 ms scan interval */
+ kTSI_LowPowerInterval_30ms = 5U, /*!< 30 ms scan interval */
+ kTSI_LowPowerInterval_40ms = 6U, /*!< 40 ms scan interval */
+ kTSI_LowPowerInterval_50ms = 7U, /*!< 50 ms scan interval */
+ kTSI_LowPowerInterval_75ms = 8U, /*!< 75 ms scan interval */
+ kTSI_LowPowerInterval_100ms = 9U, /*!< 100 ms scan interval */
+ kTSI_LowPowerInterval_125ms = 10U, /*!< 125 ms scan interval */
+ kTSI_LowPowerInterval_150ms = 11U, /*!< 150 ms scan interval */
+ kTSI_LowPowerInterval_200ms = 12U, /*!< 200 ms scan interval */
+ kTSI_LowPowerInterval_300ms = 13U, /*!< 300 ms scan interval */
+ kTSI_LowPowerInterval_400ms = 14U, /*!< 400 ms scan interval */
+ kTSI_LowPowerInterval_500ms = 15U /*!< 500 ms scan interval */
+} tsi_low_power_scan_interval_t;
+
+/*!
+ * @brief TSI Reference oscillator charge current select.
+ *
+ * These constants define the TSI Reference oscillator charge current select in a TSI instance.
+ */
+typedef enum _tsi_reference_osc_charge_current
+{
+ kTSI_RefOscChargeCurrent_2uA = 0U, /*!< Reference oscillator charge current is 2 µA */
+ kTSI_RefOscChargeCurrent_4uA = 1U, /*!< Reference oscillator charge current is 4 µA */
+ kTSI_RefOscChargeCurrent_6uA = 2U, /*!< Reference oscillator charge current is 6 µA */
+ kTSI_RefOscChargeCurrent_8uA = 3U, /*!< Reference oscillator charge current is 8 µA */
+ kTSI_RefOscChargeCurrent_10uA = 4U, /*!< Reference oscillator charge current is 10 µA */
+ kTSI_RefOscChargeCurrent_12uA = 5U, /*!< Reference oscillator charge current is 12 µA */
+ kTSI_RefOscChargeCurrent_14uA = 6U, /*!< Reference oscillator charge current is 14 µA */
+ kTSI_RefOscChargeCurrent_16uA = 7U, /*!< Reference oscillator charge current is 16 µA */
+ kTSI_RefOscChargeCurrent_18uA = 8U, /*!< Reference oscillator charge current is 18 µA */
+ kTSI_RefOscChargeCurrent_20uA = 9U, /*!< Reference oscillator charge current is 20 µA */
+ kTSI_RefOscChargeCurrent_22uA = 10U, /*!< Reference oscillator charge current is 22 µA */
+ kTSI_RefOscChargeCurrent_24uA = 11U, /*!< Reference oscillator charge current is 24 µA */
+ kTSI_RefOscChargeCurrent_26uA = 12U, /*!< Reference oscillator charge current is 26 µA */
+ kTSI_RefOscChargeCurrent_28uA = 13U, /*!< Reference oscillator charge current is 28 µA */
+ kTSI_RefOscChargeCurrent_30uA = 14U, /*!< Reference oscillator charge current is 30 µA */
+ kTSI_RefOscChargeCurrent_32uA = 15U /*!< Reference oscillator charge current is 32 µA */
+} tsi_reference_osc_charge_current_t;
+
+/*!
+ * @brief TSI External oscillator charge current select.
+ *
+ * These constants define the TSI External oscillator charge current select in a TSI instance.
+ */
+typedef enum _tsi_external_osc_charge_current
+{
+ kTSI_ExtOscChargeCurrent_2uA = 0U, /*!< External oscillator charge current is 2 µA */
+ kTSI_ExtOscChargeCurrent_4uA = 1U, /*!< External oscillator charge current is 4 µA */
+ kTSI_ExtOscChargeCurrent_6uA = 2U, /*!< External oscillator charge current is 6 µA */
+ kTSI_ExtOscChargeCurrent_8uA = 3U, /*!< External oscillator charge current is 8 µA */
+ kTSI_ExtOscChargeCurrent_10uA = 4U, /*!< External oscillator charge current is 10 µA */
+ kTSI_ExtOscChargeCurrent_12uA = 5U, /*!< External oscillator charge current is 12 µA */
+ kTSI_ExtOscChargeCurrent_14uA = 6U, /*!< External oscillator charge current is 14 µA */
+ kTSI_ExtOscChargeCurrent_16uA = 7U, /*!< External oscillator charge current is 16 µA */
+ kTSI_ExtOscChargeCurrent_18uA = 8U, /*!< External oscillator charge current is 18 µA */
+ kTSI_ExtOscChargeCurrent_20uA = 9U, /*!< External oscillator charge current is 20 µA */
+ kTSI_ExtOscChargeCurrent_22uA = 10U, /*!< External oscillator charge current is 22 µA */
+ kTSI_ExtOscChargeCurrent_24uA = 11U, /*!< External oscillator charge current is 24 µA */
+ kTSI_ExtOscChargeCurrent_26uA = 12U, /*!< External oscillator charge current is 26 µA */
+ kTSI_ExtOscChargeCurrent_28uA = 13U, /*!< External oscillator charge current is 28 µA */
+ kTSI_ExtOscChargeCurrent_30uA = 14U, /*!< External oscillator charge current is 30 µA */
+ kTSI_ExtOscChargeCurrent_32uA = 15U /*!< External oscillator charge current is 32 µA */
+} tsi_external_osc_charge_current_t;
+
+/*!
+ * @brief TSI Active mode clock source.
+ *
+ * These constants define the active mode clock source in a TSI instance.
+ */
+typedef enum _tsi_active_mode_clock_source
+{
+ kTSI_ActiveClkSource_LPOSCCLK = 0U, /*!< Active mode clock source is set to LPOOSC Clock */
+ kTSI_ActiveClkSource_MCGIRCLK = 1U, /*!< Active mode clock source is set to MCG Internal reference clock */
+ kTSI_ActiveClkSource_OSCERCLK = 2U /*!< Active mode clock source is set to System oscillator output */
+} tsi_active_mode_clock_source_t;
+
+/*!
+ * @brief TSI active mode prescaler.
+ *
+ * These constants define the TSI active mode prescaler in a TSI instance.
+ */
+typedef enum _tsi_active_mode_prescaler
+{
+ kTSI_ActiveModePrescaler_1div = 0U, /*!< Input clock source divided by 1 */
+ kTSI_ActiveModePrescaler_2div = 1U, /*!< Input clock source divided by 2 */
+ kTSI_ActiveModePrescaler_4div = 2U, /*!< Input clock source divided by 4 */
+ kTSI_ActiveModePrescaler_8div = 3U, /*!< Input clock source divided by 8 */
+ kTSI_ActiveModePrescaler_16div = 4U, /*!< Input clock source divided by 16 */
+ kTSI_ActiveModePrescaler_32div = 5U, /*!< Input clock source divided by 32 */
+ kTSI_ActiveModePrescaler_64div = 6U, /*!< Input clock source divided by 64 */
+ kTSI_ActiveModePrescaler_128div = 7U /*!< Input clock source divided by 128 */
+} tsi_active_mode_prescaler_t;
+
+/*! @brief TSI status flags. */
+typedef enum _tsi_status_flags
+{
+ kTSI_EndOfScanFlag = TSI_GENCS_EOSF_MASK, /*!< End-Of-Scan flag */
+ kTSI_OutOfRangeFlag = TSI_GENCS_OUTRGF_MASK, /*!< Out-Of-Range flag */
+ kTSI_ExternalElectrodeErrorFlag = TSI_GENCS_EXTERF_MASK, /*!< External electrode error flag */
+ kTSI_OverrunErrorFlag = TSI_GENCS_OVRF_MASK /*!< Overrun error flag */
+} tsi_status_flags_t;
+
+/*! @brief TSI feature interrupt source.*/
+typedef enum _tsi_interrupt_enable
+{
+ kTSI_GlobalInterruptEnable = 1U, /*!< TSI module global interrupt */
+ kTSI_OutOfRangeInterruptEnable = 2U, /*!< Out-Of-Range interrupt */
+ kTSI_EndOfScanInterruptEnable = 4U, /*!< End-Of-Scan interrupt */
+ kTSI_ErrorInterrruptEnable = 8U /*!< Error interrupt */
+} tsi_interrupt_enable_t;
+
+/*! @brief TSI calibration data storage. */
+typedef struct _tsi_calibration_data
+{
+ uint16_t calibratedData[FSL_FEATURE_TSI_CHANNEL_COUNT]; /*!< TSI calibration data storage buffer */
+} tsi_calibration_data_t;
+
+/*!
+ * @brief TSI configuration structure.
+ *
+ * This structure contains the settings for the most common TSI configurations including
+ * the TSI module charge currents, number of scans, thresholds, and so on.
+ */
+typedef struct _tsi_config
+{
+ uint16_t thresh; /*!< High threshold. */
+ uint16_t thresl; /*!< Low threshold. */
+ tsi_low_power_clock_source_t lpclks; /*!< Low power clock. */
+ tsi_low_power_scan_interval_t lpscnitv; /*!< Low power scan interval. */
+ tsi_active_mode_clock_source_t amclks; /*!< Active mode clock source. */
+ tsi_active_mode_prescaler_t ampsc; /*!< Active mode prescaler. */
+ tsi_electrode_osc_prescaler_t ps; /*!< Electrode Oscillator Prescaler */
+ tsi_external_osc_charge_current_t extchrg; /*!< External Oscillator charge current */
+ tsi_reference_osc_charge_current_t refchrg; /*!< Reference Oscillator charge current */
+ tsi_n_consecutive_scans_t nscn; /*!< Number of scans. */
+} tsi_config_t;
+
+/*******************************************************************************
+ * API
+ ******************************************************************************/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*!
+ * @brief Initializes hardware.
+ *
+ * @details Initializes the peripheral to the targeted state specified by the parameter configuration,
+ * such as initialize and set prescalers, number of scans, clocks, delta voltage
+ * capacitance trimmer, reference, and electrode charge current and threshold.
+ *
+ * @param base TSI peripheral base address.
+ * @param config Pointer to the TSI peripheral configuration structure.
+ * @return none
+ */
+void TSI_Init(TSI_Type *base, const tsi_config_t *config);
+
+/*!
+ * @brief De-initializes hardware.
+ *
+ * @details De-initializes the peripheral to default state.
+ *
+ * @param base TSI peripheral base address.
+ * @return none
+ */
+void TSI_Deinit(TSI_Type *base);
+
+/*!
+ * @brief Gets TSI normal mode user configuration structure.
+ * This interface sets the userConfig structure to a default value. The configuration structure only
+ * includes the settings for the whole TSI.
+ * The user configure is set to these values:
+ * @code
+ userConfig.lpclks = kTSI_LowPowerClockSource_LPOCLK;
+ userConfig.lpscnitv = kTSI_LowPowerInterval_100ms;
+ userConfig.amclks = kTSI_ActiveClkSource_LPOSCCLK;
+ userConfig.ampsc = kTSI_ActiveModePrescaler_8div;
+ userConfig.ps = kTSI_ElecOscPrescaler_2div;
+ userConfig.extchrg = kTSI_ExtOscChargeCurrent_10uA;
+ userConfig.refchrg = kTSI_RefOscChargeCurrent_10uA;
+ userConfig.nscn = kTSI_ConsecutiveScansNumber_8time;
+ userConfig.thresh = 0U;
+ userConfig.thresl = 0U;
+ @endcode
+ *
+ * @param userConfig Pointer to the TSI user configuration structure.
+ */
+void TSI_GetNormalModeDefaultConfig(tsi_config_t *userConfig);
+
+/*!
+ * @brief Gets the TSI low power mode default user configuration structure.
+ * This interface sets userConfig structure to a default value. The configuration structure only
+ * includes the settings for the whole TSI.
+ * The user configure is set to these values:
+ * @code
+ userConfig.lpclks = kTSI_LowPowerClockSource_LPOCLK;
+ userConfig.lpscnitv = kTSI_LowPowerInterval_100ms;
+ userConfig.amclks = kTSI_ActiveClkSource_LPOSCCLK;
+ userConfig.ampsc = kTSI_ActiveModePrescaler_64div;
+ userConfig.ps = kTSI_ElecOscPrescaler_1div;
+ userConfig.extchrg = kTSI_ExtOscChargeCurrent_2uA;
+ userConfig.refchrg = kTSI_RefOscChargeCurrent_32uA;
+ userConfig.nscn = kTSI_ConsecutiveScansNumber_26time;
+ userConfig.thresh = 15000U;
+ userConfig.thresl = 1000U;
+ @endcode
+ *
+ * @param userConfig Pointer to the TSI user configuration structure.
+ */
+void TSI_GetLowPowerModeDefaultConfig(tsi_config_t *userConfig);
+
+/*!
+ * @brief Hardware calibration.
+ *
+ * @details Calibrates the peripheral to fetch the initial counter value of the enabled electrodes.
+ * This API is mostly used at the initial application setup. Call this function after the \ref TSI_Init API
+ * and use the calibrated counter values to set up applications
+ * (such as to determine under which counter value a touch event occurs).
+ *
+ * @note This API is called in normal power modes.
+ * @note For K60 series, the calibrated baseline counter value CANNOT be used in low power modes. To obtain
+ * the calibrated counter values in low power modes, see K60 Mask Set Errata for Mask 5N22D.
+ * @param base TSI peripheral base address.
+ * @param calBuff Data buffer that store the calibrated counter value.
+ * @return none
+ *
+ */
+void TSI_Calibrate(TSI_Type *base, tsi_calibration_data_t *calBuff);
+
+/*!
+ * @brief Enables the TSI interrupt requests.
+ * @param base TSI peripheral base address.
+ * @param mask interrupt source
+ * The parameter can be a combination of the following source if defined:
+ * @arg kTSI_GlobalInterruptEnable
+ * @arg kTSI_EndOfScanInterruptEnable
+ * @arg kTSI_OutOfRangeInterruptEnable
+ * @arg kTSI_ErrorInterrruptEnable
+ */
+void TSI_EnableInterrupts(TSI_Type *base, uint32_t mask);
+
+/*!
+ * @brief Disables the TSI interrupt requests.
+ * @param base TSI peripheral base address.
+ * @param mask interrupt source
+ * The parameter can be a combination of the following source if defined:
+ * @arg kTSI_GlobalInterruptEnable
+ * @arg kTSI_EndOfScanInterruptEnable
+ * @arg kTSI_OutOfRangeInterruptEnable
+ * @arg kTSI_ErrorInterrruptEnable
+ */
+void TSI_DisableInterrupts(TSI_Type *base, uint32_t mask);
+
+/*!
+* @brief Gets the interrupt flags.
+* This function get TSI interrupt flags.
+*
+* @param base TSI peripheral base address.
+* @return The mask of these status flag bits.
+*/
+static inline uint32_t TSI_GetStatusFlags(TSI_Type *base)
+{
+ return (base->GENCS &
+ (kTSI_EndOfScanFlag | kTSI_OutOfRangeFlag | kTSI_ExternalElectrodeErrorFlag | kTSI_OverrunErrorFlag));
+}
+
+/*!
+ * @brief Clears the interrupt flags.
+ *
+ * This function clears the TSI interrupt flags.
+ * @note The automatically cleared flags can't be cleared by this function.
+ *
+ * @param base TSI peripheral base address.
+ * @param mask the status flags to clear.
+ */
+void TSI_ClearStatusFlags(TSI_Type *base, uint32_t mask);
+
+/*!
+* @brief Gets the TSI scan trigger mode.
+*
+* @param base TSI peripheral base address.
+* @return Scan trigger mode.
+*/
+static inline uint32_t TSI_GetScanTriggerMode(TSI_Type *base)
+{
+ return (base->GENCS & TSI_GENCS_STM_MASK);
+}
+
+/*!
+* @brief Gets the scan in progress flag.
+*
+* @param base TSI peripheral base address.
+* @return True - if scan is in progress.
+* False - if scan is not in progress.
+*/
+static inline bool TSI_IsScanInProgress(TSI_Type *base)
+{
+ return (base->GENCS & TSI_GENCS_SCNIP_MASK);
+}
+
+/*!
+* @brief Sets the electrode oscillator prescaler.
+*
+* @param base TSI peripheral base address.
+* @param prescaler Prescaler value.
+* @return none.
+*/
+static inline void TSI_SetElectrodeOSCPrescaler(TSI_Type *base, tsi_electrode_osc_prescaler_t prescaler)
+{
+ base->GENCS = (base->GENCS & ~(TSI_GENCS_PS_MASK | ALL_FLAGS_MASK)) | (TSI_GENCS_PS(prescaler));
+}
+
+/*!
+* @brief Sets the number of scans (NSCN).
+*
+* @param base TSI peripheral base address.
+* @param number Number of scans.
+* @return none.
+*/
+static inline void TSI_SetNumberOfScans(TSI_Type *base, tsi_n_consecutive_scans_t number)
+{
+ base->GENCS = (base->GENCS & ~(TSI_GENCS_NSCN_MASK | ALL_FLAGS_MASK)) | (TSI_GENCS_NSCN(number));
+}
+
+/*!
+* @brief Enables/disables the TSI module.
+*
+* @param base TSI peripheral base address.
+* @param enable Choose whether to enable TSI module.
+* - true Enable module;
+* - false Disable module;
+* @return none.
+*/
+static inline void TSI_EnableModule(TSI_Type *base, bool enable)
+{
+ if (enable)
+ {
+ base->GENCS = (base->GENCS & ~ALL_FLAGS_MASK) | TSI_GENCS_TSIEN_MASK; /* Enable module */
+ }
+ else
+ {
+ base->GENCS = (base->GENCS & ~ALL_FLAGS_MASK) & (~TSI_GENCS_TSIEN_MASK); /* Disable module */
+ }
+}
+
+/*!
+* @brief Enables/disables the TSI module in low power stop mode.
+*
+* @param base TSI peripheral base address.
+* @param enable Choose whether to enable TSI module in low power modes.
+* - true Enable module in low power modes;
+* - false Disable module in low power modes;
+* @return none.
+*/
+static inline void TSI_EnableLowPower(TSI_Type *base, bool enable)
+{
+ if (enable)
+ {
+ base->GENCS = (base->GENCS & ~ALL_FLAGS_MASK) | TSI_GENCS_STPE_MASK; /* Enable module in low power stop mode */
+ }
+ else
+ {
+ base->GENCS = (base->GENCS & ~ALL_FLAGS_MASK) & (~TSI_GENCS_STPE_MASK); /* Disable module in low power stop mode */
+ }
+}
+
+/*!
+* @brief Enables/disables the periodical (hardware) trigger scan.
+*
+* @param base TSI peripheral base address.
+* @param enable Choose whether to enable periodical trigger scan.
+* - true Enable periodical trigger scan;
+* - false Enable software trigger scan;
+* @return none.
+*/
+static inline void TSI_EnablePeriodicalScan(TSI_Type *base, bool enable)
+{
+ if (enable)
+ {
+ base->GENCS = (base->GENCS & ~ALL_FLAGS_MASK) | TSI_GENCS_STM_MASK; /* Enable period trigger scan */
+ }
+ else
+ {
+ base->GENCS = (base->GENCS & ~ALL_FLAGS_MASK) & (~TSI_GENCS_STM_MASK); /* Enable software trigger scan */
+ }
+}
+
+/*!
+* @brief Starts a measurement (trigger a new measurement).
+*
+* @param base TSI peripheral base address.
+* @return none.
+*/
+static inline void TSI_StartSoftwareTrigger(TSI_Type *base)
+{
+ base->GENCS = (base->GENCS & ~ALL_FLAGS_MASK) | TSI_GENCS_SWTS_MASK;
+}
+
+/*!
+* @brief Sets a low power scan interval.
+*
+* @param base TSI peripheral base address.
+* @param interval Interval for low power scan.
+* @return none.
+*/
+static inline void TSI_SetLowPowerScanInterval(TSI_Type *base, tsi_low_power_scan_interval_t interval)
+{
+ base->GENCS = (base->GENCS & ~(TSI_GENCS_LPSCNITV_MASK | ALL_FLAGS_MASK)) | (TSI_GENCS_LPSCNITV(interval));
+}
+
+/*!
+* @brief Sets a low power clock.
+*
+* @param base TSI peripheral base address.
+* @param clock Low power clock selection.
+*/
+static inline void TSI_SetLowPowerClock(TSI_Type *base, uint32_t clock)
+{
+ base->GENCS = (base->GENCS & ~(TSI_GENCS_LPCLKS_MASK | ALL_FLAGS_MASK)) | (TSI_GENCS_LPCLKS(clock));
+}
+
+/*!
+* @brief Sets the reference oscillator charge current.
+*
+* @param base TSI peripheral base address.
+* @param current The reference oscillator charge current.
+* @return none.
+*/
+static inline void TSI_SetReferenceChargeCurrent(TSI_Type *base, tsi_reference_osc_charge_current_t current)
+{
+ base->SCANC = ((base->SCANC) & ~TSI_SCANC_REFCHRG_MASK) | (TSI_SCANC_REFCHRG(current));
+}
+
+/*!
+* @brief Sets the electrode charge current.
+*
+* @param base TSI peripheral base address.
+* @param current The external electrode charge current.
+* @return none.
+*/
+static inline void TSI_SetElectrodeChargeCurrent(TSI_Type *base, tsi_external_osc_charge_current_t current)
+{
+ base->SCANC = ((base->SCANC) & ~TSI_SCANC_EXTCHRG_MASK) | (TSI_SCANC_EXTCHRG(current));
+}
+
+/*!
+* @brief Sets the scan modulo value.
+*
+* @param base TSI peripheral base address.
+* @param modulo Scan modulo value.
+* @return none.
+*/
+static inline void TSI_SetScanModulo(TSI_Type *base, uint32_t modulo)
+{
+ base->SCANC = ((base->SCANC) & ~TSI_SCANC_SMOD_MASK) | (TSI_SCANC_SMOD(modulo));
+}
+
+/*!
+* @brief Sets the active mode source.
+*
+* @param base TSI peripheral base address.
+* @param source Active mode clock source (LPOSCCLK, MCGIRCLK, OSCERCLK).
+* @return none.
+*/
+static inline void TSI_SetActiveModeSource(TSI_Type *base, uint32_t source)
+{
+ base->SCANC = ((base->SCANC) & ~TSI_SCANC_AMCLKS_MASK) | (TSI_SCANC_AMCLKS(source));
+}
+
+/*!
+* @brief Sets the active mode prescaler.
+*
+* @param base TSI peripheral base address.
+* @param prescaler Prescaler value.
+* @return none.
+*/
+static inline void TSI_SetActiveModePrescaler(TSI_Type *base, tsi_active_mode_prescaler_t prescaler)
+{
+ base->SCANC = ((base->SCANC) & ~TSI_SCANC_AMPSC_MASK) | (TSI_SCANC_AMPSC(prescaler));
+}
+
+/*!
+* @brief Sets the low power channel.
+* Only one channel can be enabled in low power mode.
+*
+* @param base TSI peripheral base address.
+* @param channel Channel number.
+* @return none.
+*/
+static inline void TSI_SetLowPowerChannel(TSI_Type *base, uint16_t channel)
+{
+ assert(channel < FSL_FEATURE_TSI_CHANNEL_COUNT);
+
+ base->PEN = ((base->PEN) & ~TSI_PEN_LPSP_MASK) | (TSI_PEN_LPSP(channel));
+}
+
+/*!
+ * @brief Gets the enabled channel in low power modes.
+ * @note Only one channel can be enabled in low power mode.
+ *
+ * @param base TSI peripheral base address.
+ * @return Channel number.
+ */
+static inline uint32_t TSI_GetLowPowerChannel(TSI_Type *base)
+{
+ return ((base->PEN & TSI_PEN_LPSP_MASK) >> TSI_PEN_LPSP_SHIFT);
+}
+
+/*!
+* @brief Enables/disables a channel.
+*
+* @param base TSI peripheral base address.
+* @param channel Channel to be enabled.
+* @param enable Choose whether to enable specific channel.
+* - true Enable the specific channel;
+* - false Disable the specific channel;
+* @return none.
+*/
+static inline void TSI_EnableChannel(TSI_Type *base, uint16_t channel, bool enable)
+{
+ assert(channel < FSL_FEATURE_TSI_CHANNEL_COUNT);
+
+ if (enable)
+ {
+ base->PEN |= (1U << channel); /* Enable this specific channel */
+ }
+ else
+ {
+ base->PEN &= ~(1U << channel); /* Disable this specific channel */
+ }
+}
+
+/*!
+* @brief Enables/disables channels.
+* The function enables or disables channels by mask. It can enable/disable all channels at once.
+*
+* @param base TSI peripheral base address.
+* @param channelsMask Channels mask that indicate channels that are to be enabled/disabled.
+* @param enable Choose to enable or disable the specified channels.
+* - true Enable the specified channels;
+* - false Disable the specified channels;
+* @return none.
+*/
+static inline void TSI_EnableChannels(TSI_Type *base, uint16_t channelsMask, bool enable)
+{
+ if (enable)
+ {
+ base->PEN |= channelsMask; /* Enable these specified channels */
+ }
+ else
+ {
+ base->PEN &= ~(0x0000FFFFU & (uint32_t)channelsMask); /* Disable these specified channels */
+ }
+}
+
+/*!
+ * @brief Returns if a channel is enabled.
+ *
+ * @param base TSI peripheral base address.
+ * @param channel Channel to be checked.
+ *
+ * @return true - if the channel is enabled;
+ * false - if the channel is disabled;
+ */
+static inline bool TSI_IsChannelEnabled(TSI_Type *base, uint16_t channel)
+{
+ assert(channel < FSL_FEATURE_TSI_CHANNEL_COUNT);
+
+ return ((base->PEN) & (1U << channel));
+}
+
+/*!
+* @brief Returns the mask of enabled channels.
+*
+* @param base TSI peripheral base address.
+* @return Channels mask that indicates currently enabled channels.
+*/
+static inline uint16_t TSI_GetEnabledChannels(TSI_Type *base)
+{
+ return (uint16_t)(base->PEN & 0x0000FFFFU);
+}
+
+/*!
+* @brief Gets the wake up channel counter for low-power mode usage.
+*
+* @param base TSI peripheral base address.
+* @return Wake up counter value.
+*/
+static inline uint16_t TSI_GetWakeUpChannelCounter(TSI_Type *base)
+{
+ return (uint16_t)base->WUCNTR;
+}
+
+/*!
+* @brief Gets the TSI conversion counter of a specific channel in normal mode.
+* @note This API can only be used in normal active modes.
+*
+* @param base TSI peripheral base address.
+* @param channel Index of the specific TSI channel.
+*
+* @return The counter value of the specific channel.
+*/
+static inline uint16_t TSI_GetNormalModeCounter(TSI_Type *base, uint16_t channel)
+{
+ assert(channel < FSL_FEATURE_TSI_CHANNEL_COUNT);
+
+ uint16_t *counter = (uint16_t *)((uint32_t)(&(((base)->CNTR1))) + (channel * 2U));
+ return (uint16_t)(*counter);
+}
+
+/*!
+* @brief Sets a low threshold.
+*
+* @param base TSI peripheral base address.
+* @param low_threshold Low counter threshold.
+* @return none.
+*/
+static inline void TSI_SetLowThreshold(TSI_Type *base, uint16_t low_threshold)
+{
+ base->THRESHOLD = ((base->THRESHOLD) & ~TSI_THRESHOLD_LTHH_MASK) | (TSI_THRESHOLD_LTHH(low_threshold));
+}
+
+/*!
+* @brief Sets a high threshold.
+*
+* @param base TSI peripheral base address.
+* @param high_threshold High counter threshold.
+* @return none.
+*/
+static inline void TSI_SetHighThreshold(TSI_Type *base, uint16_t high_threshold)
+{
+ base->THRESHOLD = ((base->THRESHOLD) & ~TSI_THRESHOLD_HTHH_MASK) | (TSI_THRESHOLD_HTHH(high_threshold));
+}
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+/*! @}*/
+
+#endif /* _FSL_TSI_V2_H_*/