| /* |
| * 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_VREF_H_ |
| #define _FSL_VREF_H_ |
| |
| #include "fsl_common.h" |
| |
| /*! |
| * @addtogroup vref |
| * @{ |
| */ |
| |
| |
| /****************************************************************************** |
| * Definitions |
| ******************************************************************************/ |
| |
| /*! @name Driver version */ |
| /*@{*/ |
| #define FSL_VREF_DRIVER_VERSION (MAKE_VERSION(2, 1, 0)) /*!< Version 2.1.0. */ |
| /*@}*/ |
| |
| /* Those macros below defined to support SoC family which have VREFL (0.4V) reference */ |
| #if defined(FSL_FEATURE_VREF_HAS_LOW_REFERENCE) && FSL_FEATURE_VREF_HAS_LOW_REFERENCE |
| #define VREF_SC_MODE_LV VREF_VREFH_SC_MODE_LV |
| #define VREF_SC_REGEN VREF_VREFH_SC_REGEN |
| #define VREF_SC_VREFEN VREF_VREFH_SC_VREFEN |
| #define VREF_SC_ICOMPEN VREF_VREFH_SC_ICOMPEN |
| #define VREF_SC_REGEN_MASK VREF_VREFH_SC_REGEN_MASK |
| #define VREF_SC_VREFST_MASK VREF_VREFH_SC_VREFST_MASK |
| #define VREF_SC_VREFEN_MASK VREF_VREFH_SC_VREFEN_MASK |
| #define VREF_SC_MODE_LV_MASK VREF_VREFH_SC_MODE_LV_MASK |
| #define VREF_SC_ICOMPEN_MASK VREF_VREFH_SC_ICOMPEN_MASK |
| #define TRM VREFH_TRM |
| #define VREF_TRM_TRIM VREF_VREFH_TRM_TRIM |
| #define VREF_TRM_CHOPEN_MASK VREF_VREFH_TRM_CHOPEN_MASK |
| #define VREF_TRM_TRIM_MASK VREF_VREFH_TRM_TRIM_MASK |
| #define VREF_TRM_CHOPEN_SHIFT VREF_VREFH_TRM_CHOPEN_SHIFT |
| #define VREF_TRM_TRIM_SHIFT VREF_VREFH_TRM_TRIM_SHIFT |
| #define VREF_SC_MODE_LV_SHIFT VREF_VREFH_SC_MODE_LV_SHIFT |
| #define VREF_SC_REGEN_SHIFT VREF_VREFH_SC_REGEN_SHIFT |
| #define VREF_SC_VREFST_SHIFT VREF_VREFH_SC_VREFST_SHIFT |
| #define VREF_SC_ICOMPEN_SHIFT VREF_VREFH_SC_ICOMPEN_SHIFT |
| #endif /* FSL_FEATURE_VREF_HAS_LOW_REFERENCE */ |
| |
| /*! |
| * @brief VREF modes. |
| */ |
| typedef enum _vref_buffer_mode |
| { |
| kVREF_ModeBandgapOnly = 0U, /*!< Bandgap on only, for stabilization and startup */ |
| #if defined(FSL_FEATURE_VREF_MODE_LV_TYPE) && FSL_FEATURE_VREF_MODE_LV_TYPE |
| kVREF_ModeHighPowerBuffer = 1U, /*!< High-power buffer mode enabled */ |
| kVREF_ModeLowPowerBuffer = 2U /*!< Low-power buffer mode enabled */ |
| #else |
| kVREF_ModeTightRegulationBuffer = 2U /*!< Tight regulation buffer enabled */ |
| #endif /* FSL_FEATURE_VREF_MODE_LV_TYPE */ |
| } vref_buffer_mode_t; |
| |
| /*! |
| * @brief The description structure for the VREF module. |
| */ |
| typedef struct _vref_config |
| { |
| vref_buffer_mode_t bufferMode; /*!< Buffer mode selection */ |
| #if defined(FSL_FEATURE_VREF_HAS_LOW_REFERENCE) && FSL_FEATURE_VREF_HAS_LOW_REFERENCE |
| bool enableLowRef; /*!< Set VREFL (0.4 V) reference buffer enable or disable */ |
| bool enableExternalVoltRef; /*!< Select external voltage reference or not (internal) */ |
| #endif /* FSL_FEATURE_VREF_HAS_LOW_REFERENCE */ |
| #if defined(FSL_FEATURE_VREF_HAS_TRM4) && FSL_FEATURE_VREF_HAS_TRM4 |
| bool enable2V1VoltRef; /*!< Enable Internal Voltage Reference (2.1V) */ |
| #endif /* FSL_FEATURE_VREF_HAS_TRM4 */ |
| } vref_config_t; |
| |
| /****************************************************************************** |
| * API |
| ******************************************************************************/ |
| |
| #if defined(__cplusplus) |
| extern "C" { |
| #endif /* __cplusplus */ |
| |
| /*! |
| * @name VREF functional operation |
| * @{ |
| */ |
| |
| /*! |
| * @brief Enables the clock gate and configures the VREF module according to the configuration structure. |
| * |
| * This function must be called before calling all other VREF driver functions, |
| * read/write registers, and configurations with user-defined settings. |
| * The example below shows how to set up vref_config_t parameters and |
| * how to call the VREF_Init function by passing in these parameters. |
| * This is an example. |
| * @code |
| * vref_config_t vrefConfig; |
| * vrefConfig.bufferMode = kVREF_ModeHighPowerBuffer; |
| * vrefConfig.enableExternalVoltRef = false; |
| * vrefConfig.enableLowRef = false; |
| * VREF_Init(VREF, &vrefConfig); |
| * @endcode |
| * |
| * @param base VREF peripheral address. |
| * @param config Pointer to the configuration structure. |
| */ |
| void VREF_Init(VREF_Type *base, const vref_config_t *config); |
| |
| /*! |
| * @brief Stops and disables the clock for the VREF module. |
| * |
| * This function should be called to shut down the module. |
| * This is an example. |
| * @code |
| * vref_config_t vrefUserConfig; |
| * VREF_Init(VREF); |
| * VREF_GetDefaultConfig(&vrefUserConfig); |
| * ... |
| * VREF_Deinit(VREF); |
| * @endcode |
| * |
| * @param base VREF peripheral address. |
| */ |
| void VREF_Deinit(VREF_Type *base); |
| |
| /*! |
| * @brief Initializes the VREF configuration structure. |
| * |
| * This function initializes the VREF configuration structure to default values. |
| * This is an example. |
| * @code |
| * vrefConfig->bufferMode = kVREF_ModeHighPowerBuffer; |
| * vrefConfig->enableExternalVoltRef = false; |
| * vrefConfig->enableLowRef = false; |
| * @endcode |
| * |
| * @param config Pointer to the initialization structure. |
| */ |
| void VREF_GetDefaultConfig(vref_config_t *config); |
| |
| /*! |
| * @brief Sets a TRIM value for the reference voltage. |
| * |
| * This function sets a TRIM value for the reference voltage. |
| * Note that the TRIM value maximum is 0x3F. |
| * |
| * @param base VREF peripheral address. |
| * @param trimValue Value of the trim register to set the output reference voltage (maximum 0x3F (6-bit)). |
| */ |
| void VREF_SetTrimVal(VREF_Type *base, uint8_t trimValue); |
| |
| /*! |
| * @brief Reads the value of the TRIM meaning output voltage. |
| * |
| * This function gets the TRIM value from the TRM register. |
| * |
| * @param base VREF peripheral address. |
| * @return Six-bit value of trim setting. |
| */ |
| static inline uint8_t VREF_GetTrimVal(VREF_Type *base) |
| { |
| return (base->TRM & VREF_TRM_TRIM_MASK); |
| } |
| |
| #if defined(FSL_FEATURE_VREF_HAS_TRM4) && FSL_FEATURE_VREF_HAS_TRM4 |
| /*! |
| * @brief Sets a TRIM value for the reference voltage (2V1). |
| * |
| * This function sets a TRIM value for the reference voltage (2V1). |
| * Note that the TRIM value maximum is 0x3F. |
| * |
| * @param base VREF peripheral address. |
| * @param trimValue Value of the trim register to set the output reference voltage (maximum 0x3F (6-bit)). |
| */ |
| void VREF_SetTrim2V1Val(VREF_Type *base, uint8_t trimValue); |
| |
| /*! |
| * @brief Reads the value of the TRIM meaning output voltage (2V1). |
| * |
| * This function gets the TRIM value from the VREF_TRM4 register. |
| * |
| * @param base VREF peripheral address. |
| * @return Six-bit value of trim setting. |
| */ |
| static inline uint8_t VREF_GetTrim2V1Val(VREF_Type *base) |
| { |
| return (base->TRM4 & VREF_TRM4_TRIM2V1_MASK); |
| } |
| #endif /* FSL_FEATURE_VREF_HAS_TRM4 */ |
| |
| #if defined(FSL_FEATURE_VREF_HAS_LOW_REFERENCE) && FSL_FEATURE_VREF_HAS_LOW_REFERENCE |
| |
| /*! |
| * @brief Sets the TRIM value for the low voltage reference. |
| * |
| * This function sets the TRIM value for low reference voltage. |
| * Note the following. |
| * - The TRIM value maximum is 0x05U |
| * - The values 111b and 110b are not valid/allowed. |
| * |
| * @param base VREF peripheral address. |
| * @param trimValue Value of the trim register to set output low reference voltage (maximum 0x05U (3-bit)). |
| */ |
| void VREF_SetLowReferenceTrimVal(VREF_Type *base, uint8_t trimValue); |
| |
| /*! |
| * @brief Reads the value of the TRIM meaning output voltage. |
| * |
| * This function gets the TRIM value from the VREFL_TRM register. |
| * |
| * @param base VREF peripheral address. |
| * @return Three-bit value of the trim setting. |
| */ |
| static inline uint8_t VREF_GetLowReferenceTrimVal(VREF_Type *base) |
| { |
| return (base->VREFL_TRM & VREF_VREFL_TRM_VREFL_TRIM_MASK); |
| } |
| #endif /* FSL_FEATURE_VREF_HAS_LOW_REFERENCE */ |
| |
| /*@}*/ |
| |
| #if defined(__cplusplus) |
| } |
| #endif /* __cplusplus */ |
| |
| /*! @}*/ |
| |
| #endif /* _FSL_VREF_H_ */ |