rt-thread/bsp/nv32f100x/lib/inc/pmc.h

374 lines
11 KiB
C

/******************************************************************************
*
* @brief header file for PMC.
*
*******************************************************************************
*
* provide APIs for accessing PMC
******************************************************************************/
#ifndef PMC_H_
#define PMC_H_
#ifdef __cplusplus
extern "C" {
#endif
/******************************************************************************
* Includes
******************************************************************************/
/******************************************************************************
* Macros
******************************************************************************/
/******************************************************************************
* PMC system mode definition
*
*//*! @addtogroup pmc_sysmode
* @{
*******************************************************************************/
#define PmcModeRun 0 /*!< run mode */
#define PmcModeWait 1 /*!< wait mode */
#define PmcModeStop4 2 /*!< stop4 mode */
#define PmcModeStop3 3 /*!< stop3 mode */
/*! @} End of pmc_sysmode */
/******************************************************************************
* PMC LVD and LVW voltage definition
*
*//*! @addtogroup pmc_voltageselect
* @{
*******************************************************************************/
#define PmcLVDTrip_Low 0 /*!< LVD low trip point */
#define PmcLVDTrip_High 1 /*!< LVD high trip point */
#define PmcLVWTrip_Low 0 /*!< LVW low trip point */
#define PmcLVWTrip_Mid1 1 /*!< LVW mid1 trip point */
#define PmcLVWTrip_Mid2 2 /*!< LVW mid2 trip point */
#define PmcLVWTrip_High 3 /*!< LVW high trip point */
/*! @} End of pmc_voltageselect */
/******************************************************************************
* Types
******************************************************************************/
/******************************************************************************
* PMC control struct
*
*//*! @addtogroup pmc_ctrlstruct
* @{
*******************************************************************************/
/*!
* @brief PMC Control Structure Type.
*
*/
typedef union
{
uint8_t byte; /*!< byte field of union type */
struct
{
uint8_t bBandgapEn :1; /*!< bandgap enable */
uint8_t bBandgapDrv :1; /*!< bandgap drive select */
uint8_t bLvdEn :1; /*!< LVD enable */
uint8_t bLvdStopEn :1; /*!< LVD enable in stop mode */
uint8_t bLvdRstEn :1; /*!< reset enable when VLD evvent */
uint8_t bLvwIrqEn :1; /*!< LVW int enable */
uint8_t bLvwAck :1; /*!< LVW acknowledge */
uint8_t bLvwFlag :1; /*!< LVW flag */
}bits; /*!< bitfield of union type */
}PMC_Ctrl1Type, *PMC_Ctrl1Ptr; /*!< PMC control1 reg structure */
/*! @} End of pmc_ctrlstruct */
/******************************************************************************
* PMC control-- voltage select type.
*
*//*! @addtogroup pmc_voltselectstruct
* @{
*******************************************************************************/
/*!
* @brief PMC control-- voltage select type.
*
*/
typedef union
{
uint8_t byte; /*!< byte field of union type */
struct
{
uint8_t :4; /*!< none */
uint8_t bLVWV :2; /*!< LVW voltage select */
uint8_t bLVDV :1; /*!< LVD voltage select */
uint8_t :1; /*!< none */
}bits; /*!< bitfield of union type */
}PMC_Ctrl2Type, *PMC_Ctrl2Ptr; /*!< PMC control2 reg structure */
/*! @} End of pmc_voltselectstruct */
/******************************************************************************
* PMC configrue type.
*
*//*! @addtogroup pmc_configstruct
* @{
*******************************************************************************/
/*!
* @brief PMC configrue type.
*
*/
typedef struct
{
PMC_Ctrl1Type sCtrlstatus; /*!< PMC control and status */
PMC_Ctrl2Type sDetectVoltSelect; /*!< LVW and LVW voltage select */
}PMC_ConfigType, *PMC_ConfigPtr; /*!< PMC configuration structure */
/*! @} End of pmc_configstruct */
/******************************************************************************
* Global variables
******************************************************************************/
/*!
* inline functions
*/
/******************************************************************************
* PMC api list.
*
*//*! @addtogroup pmc_api_list
* @{
*******************************************************************************/
/*****************************************************************************//*!
*
* @brief enable LVD events during stop mode.
*
* @param[in] pPMC pointer to the PMC module.
*
* @return none.
*
* @ Pass/ Fail criteria: none.
*
* @see PMC_DisableLVDInStopMode.
*
*****************************************************************************/
__STATIC_INLINE void PMC_EnableLVDInStopMode(PMC_Type *pPMC)
{
pPMC->SPMSC1 |= PMC_SPMSC1_LVDSE_MASK;
}
/*****************************************************************************//*!
*
* @brief disable LVD events during stop mode.
*
* @param[in] pPMC pointer to the PMC module.
*
* @return none.
*
* @ Pass/ Fail criteria: none.
*
* @see PMC_EnableLVDInStopMode.
*
*****************************************************************************/
__STATIC_INLINE void PMC_DisableLVDInStopMode(PMC_Type *pPMC)
{
pPMC->SPMSC1 &= ~PMC_SPMSC1_LVDSE_MASK;
}
/*****************************************************************************//*!
*
* @brief enable LVD events to generate a hardware reset, note: write once.
*
* @param[in] pPMC pointer to the PMC module.
*
* @return none.
*
* @ Pass/ Fail criteria: none.
*
* @see PMC_DisableLVDRst.
*
*****************************************************************************/
__STATIC_INLINE void PMC_EnableLVDRst(PMC_Type *pPMC)
{
pPMC->SPMSC1 |= PMC_SPMSC1_LVDRE_MASK;
}
/*****************************************************************************//*!
*
* @brief disable LVD events to generate a hardware reset, note: write once.
*
* @param[in] pPMC pointer to the PMC module.
*
* @return none.
*
* @ Pass/ Fail criteria: none.
*
* @see PMC_EnableLVDRst.
*
*****************************************************************************/
__STATIC_INLINE void PMC_DisableLVDRst(PMC_Type *pPMC)
{
pPMC->SPMSC1 &= ~PMC_SPMSC1_LVDRE_MASK;
}
/*****************************************************************************//*!
*
* @brief enable low-voltage detect logic, note: write once.
*
* @param[in] pPMC pointer to the PMC module.
*
* @return none.
*
* @ Pass/ Fail criteria: none.
*
* @see PMC_DisableLVD.
*
*****************************************************************************/
__STATIC_INLINE void PMC_EnableLVD(PMC_Type *pPMC)
{
pPMC->SPMSC1 |= PMC_SPMSC1_LVDE_MASK;
}
/*****************************************************************************//*!
*
* @brief disable low-voltage detect logic, note: write once
*
* @param[in] pPMC pointer to the PMC module.
*
* @return none.
*
* @ Pass/ Fail criteria: none
*
* @see PMC_EnableLVD.
*
*****************************************************************************/
__STATIC_INLINE void PMC_DisableLVD(PMC_Type *pPMC)
{
pPMC->SPMSC1 &= ~PMC_SPMSC1_LVDE_MASK;
}
/*****************************************************************************//*!
*
* @brief set the low-voltage detect trip point voltage, note: write once.
*
* @param[in] pPMC pointer to the PMC module.
* @param[in] Trippoint LVD trip point voltage,0~1.
*
* @return none.
*
* @ Pass/ Fail criteria: none.
*
* @see PMC_SetLVWTripVolt.
*
*****************************************************************************/
__STATIC_INLINE void PMC_SetLVDTripVolt(PMC_Type *pPMC, uint8_t Trippoint)
{
if(Trippoint)
pPMC->SPMSC2 |= PMC_SPMSC2_LVDV_MASK;
else
pPMC->SPMSC2 &= ~PMC_SPMSC2_LVDV_MASK;
}
/*****************************************************************************//*!
*
* @brief set the low-voltage warning (LVW) trip point voltage.
*
* @param[in] pPMC pointer to the PMC module.
* @param[in] Trippoint LVW trip point voltage,0~3.
*
* @return none.
*
* @ Pass/ Fail criteria: none.
*
* @see PMC_SetLVDTripVolt.
*
*****************************************************************************/
__STATIC_INLINE void PMC_SetLVWTripVolt(PMC_Type *pPMC, uint8_t Trippoint)
{
pPMC->SPMSC2 &= ~PMC_SPMSC2_LVWV_MASK;
pPMC->SPMSC2 |= PMC_SPMSC2_LVWV(Trippoint);
}
/*****************************************************************************//*!
*
* @brief Enable hardware interrupt requests for LVWF.
*
* @param[in] pPMC pointer to the PMC module.
*
* @return none.
*
* @ Pass/ Fail criteria: none.
*
* @see PMC_DisableLVWInterrupt.
*
*****************************************************************************/
__STATIC_INLINE void PMC_EnableLVWInterrupt(PMC_Type *pPMC)
{
pPMC->SPMSC1 |= PMC_SPMSC1_LVWIE_MASK;
}
/*****************************************************************************//*!
*
* @brief Disable hardware interrupt requests for LVWF.
*
* @param[in] pPMC pointer to the PMC module.
*
* @return none.
*
* @ Pass/ Fail criteria: none.
*
* @see PMC_EnableLVWInterrupt.
*
*****************************************************************************/
__STATIC_INLINE void PMC_DisableLVWInterrupt(PMC_Type *pPMC)
{
pPMC->SPMSC1 &= ~PMC_SPMSC1_LVWIE_MASK;
}
/*****************************************************************************//*!
*
* @brief get the lvw warning flag.
*
* @param[in] pPMC pointer to the PMC module.
*
* @return uint8_t lvw warning flag.
*
* @ Pass/ Fail criteria: none.
*
* @see PMC_ClrLVWFlag.
*
*****************************************************************************/
__STATIC_INLINE uint8_t PMC_GetLVWFlag(PMC_Type *pPMC)
{
return (pPMC->SPMSC1 & PMC_SPMSC1_LVWF_MASK);
}
/*****************************************************************************//*!
*
* @brief clear the lvw warning flag.
*
* @param[in] pPMC pointer to the PMC module.
*
* @return none.
*
* @ Pass/ Fail criteria: none.
*
* @see PMC_GetLVWFlag.
*
*****************************************************************************/
__STATIC_INLINE void PMC_ClrLVWFlag(PMC_Type *pPMC)
{
pPMC->SPMSC1 |= PMC_SPMSC1_LVWACK_MASK;
}
/*! @} End of pmc_api_list */
/******************************************************************************
* Global functions
******************************************************************************/
void PMC_Init(PMC_Type *pPMC, PMC_ConfigType *pPMC_Config);
void PMC_DeInit(PMC_Type *pPMC);
void PMC_SetMode(PMC_Type *pPMC,uint8_t u8PmcMode);
#ifdef __cplusplus
}
#endif
#endif /* PMC_H_ */