rt-thread-official/bsp/frdm-k64f/device/MK64F12/MK64F12_vref.h

370 lines
13 KiB
C

/*
* Copyright (c) 2014, Freescale Semiconductor, Inc.
* All rights reserved.
*
* THIS SOFTWARE IS PROVIDED BY FREESCALE "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 FREESCALE 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.
*/
/*
* WARNING! DO NOT EDIT THIS FILE DIRECTLY!
*
* This file was generated automatically and any changes may be lost.
*/
#ifndef __HW_VREF_REGISTERS_H__
#define __HW_VREF_REGISTERS_H__
#include "regs.h"
/*
* MK64F12 VREF
*
* Voltage Reference
*
* Registers defined in this header file:
* - HW_VREF_TRM - VREF Trim Register
* - HW_VREF_SC - VREF Status and Control Register
*
* - hw_vref_t - Struct containing all module registers.
*/
//! @name Module base addresses
//@{
#ifndef REGS_VREF_BASE
#define HW_VREF_INSTANCE_COUNT (1U) //!< Number of instances of the VREF module.
#define REGS_VREF_BASE (0x40074000U) //!< Base address for VREF.
#endif
//@}
//-------------------------------------------------------------------------------------------
// HW_VREF_TRM - VREF Trim Register
//-------------------------------------------------------------------------------------------
#ifndef __LANGUAGE_ASM__
/*!
* @brief HW_VREF_TRM - VREF Trim Register (RW)
*
* Reset value: 0x00U
*
* This register contains bits that contain the trim data for the Voltage
* Reference.
*/
typedef union _hw_vref_trm
{
uint8_t U;
struct _hw_vref_trm_bitfields
{
uint8_t TRIM : 6; //!< [5:0] Trim bits
uint8_t CHOPEN : 1; //!< [6] Chop oscillator enable. When set,
//! internal chopping operation is enabled and the internal analog offset will
//! be minimized.
uint8_t RESERVED0 : 1; //!< [7]
} B;
} hw_vref_trm_t;
#endif
/*!
* @name Constants and macros for entire VREF_TRM register
*/
//@{
#define HW_VREF_TRM_ADDR (REGS_VREF_BASE + 0x0U)
#ifndef __LANGUAGE_ASM__
#define HW_VREF_TRM (*(__IO hw_vref_trm_t *) HW_VREF_TRM_ADDR)
#define HW_VREF_TRM_RD() (HW_VREF_TRM.U)
#define HW_VREF_TRM_WR(v) (HW_VREF_TRM.U = (v))
#define HW_VREF_TRM_SET(v) (HW_VREF_TRM_WR(HW_VREF_TRM_RD() | (v)))
#define HW_VREF_TRM_CLR(v) (HW_VREF_TRM_WR(HW_VREF_TRM_RD() & ~(v)))
#define HW_VREF_TRM_TOG(v) (HW_VREF_TRM_WR(HW_VREF_TRM_RD() ^ (v)))
#endif
//@}
/*
* Constants & macros for individual VREF_TRM bitfields
*/
/*!
* @name Register VREF_TRM, field TRIM[5:0] (RW)
*
* These bits change the resulting VREF by approximately +/- 0.5 mV for each
* step. Min = minimum and max = maximum voltage reference output. For minimum and
* maximum voltage reference output values, refer to the Data Sheet for this chip.
*
* Values:
* - 000000 - Min
* - 111111 - Max
*/
//@{
#define BP_VREF_TRM_TRIM (0U) //!< Bit position for VREF_TRM_TRIM.
#define BM_VREF_TRM_TRIM (0x3FU) //!< Bit mask for VREF_TRM_TRIM.
#define BS_VREF_TRM_TRIM (6U) //!< Bit field size in bits for VREF_TRM_TRIM.
#ifndef __LANGUAGE_ASM__
//! @brief Read current value of the VREF_TRM_TRIM field.
#define BR_VREF_TRM_TRIM (HW_VREF_TRM.B.TRIM)
#endif
//! @brief Format value for bitfield VREF_TRM_TRIM.
#define BF_VREF_TRM_TRIM(v) (__REG_VALUE_TYPE((__REG_VALUE_TYPE((v), uint8_t) << BP_VREF_TRM_TRIM), uint8_t) & BM_VREF_TRM_TRIM)
#ifndef __LANGUAGE_ASM__
//! @brief Set the TRIM field to a new value.
#define BW_VREF_TRM_TRIM(v) (HW_VREF_TRM_WR((HW_VREF_TRM_RD() & ~BM_VREF_TRM_TRIM) | BF_VREF_TRM_TRIM(v)))
#endif
//@}
/*!
* @name Register VREF_TRM, field CHOPEN[6] (RW)
*
* This bit is set during factory trimming of the VREF voltage. This bit should
* be written to 1 to achieve the performance stated in the data sheet.
*
* Values:
* - 0 - Chop oscillator is disabled.
* - 1 - Chop oscillator is enabled.
*/
//@{
#define BP_VREF_TRM_CHOPEN (6U) //!< Bit position for VREF_TRM_CHOPEN.
#define BM_VREF_TRM_CHOPEN (0x40U) //!< Bit mask for VREF_TRM_CHOPEN.
#define BS_VREF_TRM_CHOPEN (1U) //!< Bit field size in bits for VREF_TRM_CHOPEN.
#ifndef __LANGUAGE_ASM__
//! @brief Read current value of the VREF_TRM_CHOPEN field.
#define BR_VREF_TRM_CHOPEN (BITBAND_ACCESS8(HW_VREF_TRM_ADDR, BP_VREF_TRM_CHOPEN))
#endif
//! @brief Format value for bitfield VREF_TRM_CHOPEN.
#define BF_VREF_TRM_CHOPEN(v) (__REG_VALUE_TYPE((__REG_VALUE_TYPE((v), uint8_t) << BP_VREF_TRM_CHOPEN), uint8_t) & BM_VREF_TRM_CHOPEN)
#ifndef __LANGUAGE_ASM__
//! @brief Set the CHOPEN field to a new value.
#define BW_VREF_TRM_CHOPEN(v) (BITBAND_ACCESS8(HW_VREF_TRM_ADDR, BP_VREF_TRM_CHOPEN) = (v))
#endif
//@}
//-------------------------------------------------------------------------------------------
// HW_VREF_SC - VREF Status and Control Register
//-------------------------------------------------------------------------------------------
#ifndef __LANGUAGE_ASM__
/*!
* @brief HW_VREF_SC - VREF Status and Control Register (RW)
*
* Reset value: 0x00U
*
* This register contains the control bits used to enable the internal voltage
* reference and to select the buffer mode to be used.
*/
typedef union _hw_vref_sc
{
uint8_t U;
struct _hw_vref_sc_bitfields
{
uint8_t MODE_LV : 2; //!< [1:0] Buffer Mode selection
uint8_t VREFST : 1; //!< [2] Internal Voltage Reference stable
uint8_t RESERVED0 : 2; //!< [4:3]
uint8_t ICOMPEN : 1; //!< [5] Second order curvature compensation
//! enable
uint8_t REGEN : 1; //!< [6] Regulator enable
uint8_t VREFEN : 1; //!< [7] Internal Voltage Reference enable
} B;
} hw_vref_sc_t;
#endif
/*!
* @name Constants and macros for entire VREF_SC register
*/
//@{
#define HW_VREF_SC_ADDR (REGS_VREF_BASE + 0x1U)
#ifndef __LANGUAGE_ASM__
#define HW_VREF_SC (*(__IO hw_vref_sc_t *) HW_VREF_SC_ADDR)
#define HW_VREF_SC_RD() (HW_VREF_SC.U)
#define HW_VREF_SC_WR(v) (HW_VREF_SC.U = (v))
#define HW_VREF_SC_SET(v) (HW_VREF_SC_WR(HW_VREF_SC_RD() | (v)))
#define HW_VREF_SC_CLR(v) (HW_VREF_SC_WR(HW_VREF_SC_RD() & ~(v)))
#define HW_VREF_SC_TOG(v) (HW_VREF_SC_WR(HW_VREF_SC_RD() ^ (v)))
#endif
//@}
/*
* Constants & macros for individual VREF_SC bitfields
*/
/*!
* @name Register VREF_SC, field MODE_LV[1:0] (RW)
*
* These bits select the buffer modes for the Voltage Reference module.
*
* Values:
* - 00 - Bandgap on only, for stabilization and startup
* - 01 - High power buffer mode enabled
* - 10 - Low-power buffer mode enabled
* - 11 - Reserved
*/
//@{
#define BP_VREF_SC_MODE_LV (0U) //!< Bit position for VREF_SC_MODE_LV.
#define BM_VREF_SC_MODE_LV (0x03U) //!< Bit mask for VREF_SC_MODE_LV.
#define BS_VREF_SC_MODE_LV (2U) //!< Bit field size in bits for VREF_SC_MODE_LV.
#ifndef __LANGUAGE_ASM__
//! @brief Read current value of the VREF_SC_MODE_LV field.
#define BR_VREF_SC_MODE_LV (HW_VREF_SC.B.MODE_LV)
#endif
//! @brief Format value for bitfield VREF_SC_MODE_LV.
#define BF_VREF_SC_MODE_LV(v) (__REG_VALUE_TYPE((__REG_VALUE_TYPE((v), uint8_t) << BP_VREF_SC_MODE_LV), uint8_t) & BM_VREF_SC_MODE_LV)
#ifndef __LANGUAGE_ASM__
//! @brief Set the MODE_LV field to a new value.
#define BW_VREF_SC_MODE_LV(v) (HW_VREF_SC_WR((HW_VREF_SC_RD() & ~BM_VREF_SC_MODE_LV) | BF_VREF_SC_MODE_LV(v)))
#endif
//@}
/*!
* @name Register VREF_SC, field VREFST[2] (RO)
*
* This bit indicates that the bandgap reference within the Voltage Reference
* module has completed its startup and stabilization.
*
* Values:
* - 0 - The module is disabled or not stable.
* - 1 - The module is stable.
*/
//@{
#define BP_VREF_SC_VREFST (2U) //!< Bit position for VREF_SC_VREFST.
#define BM_VREF_SC_VREFST (0x04U) //!< Bit mask for VREF_SC_VREFST.
#define BS_VREF_SC_VREFST (1U) //!< Bit field size in bits for VREF_SC_VREFST.
#ifndef __LANGUAGE_ASM__
//! @brief Read current value of the VREF_SC_VREFST field.
#define BR_VREF_SC_VREFST (BITBAND_ACCESS8(HW_VREF_SC_ADDR, BP_VREF_SC_VREFST))
#endif
//@}
/*!
* @name Register VREF_SC, field ICOMPEN[5] (RW)
*
* This bit is set during factory trimming of the VREF voltage. This bit should
* be written to 1 to achieve the performance stated in the data sheet.
*
* Values:
* - 0 - Disabled
* - 1 - Enabled
*/
//@{
#define BP_VREF_SC_ICOMPEN (5U) //!< Bit position for VREF_SC_ICOMPEN.
#define BM_VREF_SC_ICOMPEN (0x20U) //!< Bit mask for VREF_SC_ICOMPEN.
#define BS_VREF_SC_ICOMPEN (1U) //!< Bit field size in bits for VREF_SC_ICOMPEN.
#ifndef __LANGUAGE_ASM__
//! @brief Read current value of the VREF_SC_ICOMPEN field.
#define BR_VREF_SC_ICOMPEN (BITBAND_ACCESS8(HW_VREF_SC_ADDR, BP_VREF_SC_ICOMPEN))
#endif
//! @brief Format value for bitfield VREF_SC_ICOMPEN.
#define BF_VREF_SC_ICOMPEN(v) (__REG_VALUE_TYPE((__REG_VALUE_TYPE((v), uint8_t) << BP_VREF_SC_ICOMPEN), uint8_t) & BM_VREF_SC_ICOMPEN)
#ifndef __LANGUAGE_ASM__
//! @brief Set the ICOMPEN field to a new value.
#define BW_VREF_SC_ICOMPEN(v) (BITBAND_ACCESS8(HW_VREF_SC_ADDR, BP_VREF_SC_ICOMPEN) = (v))
#endif
//@}
/*!
* @name Register VREF_SC, field REGEN[6] (RW)
*
* This bit is used to enable the internal 1.75 V regulator to produce a
* constant internal voltage supply in order to reduce the sensitivity to external
* supply noise and variation. If it is desired to keep the regulator enabled in very
* low power modes, refer to the Chip Configuration details for a description on
* how this can be achieved. This bit is set during factory trimming of the VREF
* voltage. This bit should be written to 1 to achieve the performance stated in
* the data sheet.
*
* Values:
* - 0 - Internal 1.75 V regulator is disabled.
* - 1 - Internal 1.75 V regulator is enabled.
*/
//@{
#define BP_VREF_SC_REGEN (6U) //!< Bit position for VREF_SC_REGEN.
#define BM_VREF_SC_REGEN (0x40U) //!< Bit mask for VREF_SC_REGEN.
#define BS_VREF_SC_REGEN (1U) //!< Bit field size in bits for VREF_SC_REGEN.
#ifndef __LANGUAGE_ASM__
//! @brief Read current value of the VREF_SC_REGEN field.
#define BR_VREF_SC_REGEN (BITBAND_ACCESS8(HW_VREF_SC_ADDR, BP_VREF_SC_REGEN))
#endif
//! @brief Format value for bitfield VREF_SC_REGEN.
#define BF_VREF_SC_REGEN(v) (__REG_VALUE_TYPE((__REG_VALUE_TYPE((v), uint8_t) << BP_VREF_SC_REGEN), uint8_t) & BM_VREF_SC_REGEN)
#ifndef __LANGUAGE_ASM__
//! @brief Set the REGEN field to a new value.
#define BW_VREF_SC_REGEN(v) (BITBAND_ACCESS8(HW_VREF_SC_ADDR, BP_VREF_SC_REGEN) = (v))
#endif
//@}
/*!
* @name Register VREF_SC, field VREFEN[7] (RW)
*
* This bit is used to enable the bandgap reference within the Voltage Reference
* module. After the VREF is enabled, turning off the clock to the VREF module
* via the corresponding clock gate register will not disable the VREF. VREF must
* be disabled via this VREFEN bit.
*
* Values:
* - 0 - The module is disabled.
* - 1 - The module is enabled.
*/
//@{
#define BP_VREF_SC_VREFEN (7U) //!< Bit position for VREF_SC_VREFEN.
#define BM_VREF_SC_VREFEN (0x80U) //!< Bit mask for VREF_SC_VREFEN.
#define BS_VREF_SC_VREFEN (1U) //!< Bit field size in bits for VREF_SC_VREFEN.
#ifndef __LANGUAGE_ASM__
//! @brief Read current value of the VREF_SC_VREFEN field.
#define BR_VREF_SC_VREFEN (BITBAND_ACCESS8(HW_VREF_SC_ADDR, BP_VREF_SC_VREFEN))
#endif
//! @brief Format value for bitfield VREF_SC_VREFEN.
#define BF_VREF_SC_VREFEN(v) (__REG_VALUE_TYPE((__REG_VALUE_TYPE((v), uint8_t) << BP_VREF_SC_VREFEN), uint8_t) & BM_VREF_SC_VREFEN)
#ifndef __LANGUAGE_ASM__
//! @brief Set the VREFEN field to a new value.
#define BW_VREF_SC_VREFEN(v) (BITBAND_ACCESS8(HW_VREF_SC_ADDR, BP_VREF_SC_VREFEN) = (v))
#endif
//@}
//-------------------------------------------------------------------------------------------
// hw_vref_t - module struct
//-------------------------------------------------------------------------------------------
/*!
* @brief All VREF module registers.
*/
#ifndef __LANGUAGE_ASM__
#pragma pack(1)
typedef struct _hw_vref
{
__IO hw_vref_trm_t TRM; //!< [0x0] VREF Trim Register
__IO hw_vref_sc_t SC; //!< [0x1] VREF Status and Control Register
} hw_vref_t;
#pragma pack()
//! @brief Macro to access all VREF registers.
//! @return Reference (not a pointer) to the registers struct. To get a pointer to the struct,
//! use the '&' operator, like <code>&HW_VREF</code>.
#define HW_VREF (*(hw_vref_t *) REGS_VREF_BASE)
#endif
#endif // __HW_VREF_REGISTERS_H__
// v22/130726/0.9
// EOF