current_v/Drivers/FM33LG0xx_FL_Driver/Inc/fm33lg0xx_fl_pmu.h
2025-12-31 08:21:43 +08:00

1018 lines
37 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
*******************************************************************************************************
* @file fm33lg0xx_fl_pmu.h
* @author FMSH Application Team
* @brief Head file of PMU FL Module
*******************************************************************************************************
* @attention
*
* Copyright (c) [2021] [Fudan Microelectronics]
* THIS SOFTWARE is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*
*******************************************************************************************************
*/
/* Define to prevent recursive inclusion---------------------------------------------------------------*/
#ifndef __FM33LG0XX_FL_PMU_H
#define __FM33LG0XX_FL_PMU_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes -------------------------------------------------------------------------------------------*/
#include "fm33lg0xx_fl_def.h"
/** @addtogroup FM33LG0XX_FL_Driver
* @{
*/
/** @defgroup PMU PMU
* @brief PMU FL driver
* @{
*/
/* Exported types -------------------------------------------------------------------------------------*/
/** @defgroup PMU_FL_ES_INIT PMU Exported Init structures
* @{
*/
/**
* @brief FL PMU Init Sturcture definition
*/
typedef struct
{
/*! 低功耗模式配置 */
uint32_t powerMode;
/*! 低功耗模式下内核电压降低与否 */
FL_FunState coreVoltageScaling;
/*! 睡眠模式配置 */
uint32_t deepSleep;
/*! 唤醒后的系统频率仅对RCHF */
uint32_t wakeupFrequency;
/*! 芯片LDO是否进入低功耗 */
uint32_t LDOLowPowerMode;
/*! 额外唤醒延迟 */
uint32_t wakeupDelay;
} FL_PMU_SleepInitTypeDef;
/**
* @}
*/
/* Exported constants ---------------------------------------------------------------------------------*/
/** @defgroup PMU_FL_Exported_Constants PMU Exported Constants
* @{
*/
#define PMU_CR_LDO_LPM_Pos (18U)
#define PMU_CR_LDO_LPM_Msk (0x3U << PMU_CR_LDO_LPM_Pos)
#define PMU_CR_LDO_LPM PMU_CR_LDO_LPM_Msk
#define PMU_CR_LDO15EN_Pos (17U)
#define PMU_CR_LDO15EN_Msk (0x1U << PMU_CR_LDO15EN_Pos)
#define PMU_CR_LDO15EN PMU_CR_LDO15EN_Msk
#define PMU_CR_LDO15EN_B_Pos (16U)
#define PMU_CR_LDO15EN_B_Msk (0x1U << PMU_CR_LDO15EN_B_Pos)
#define PMU_CR_LDO15EN_B PMU_CR_LDO15EN_B_Msk
#define PMU_CR_WKFSEL_Pos (10U)
#define PMU_CR_WKFSEL_Msk (0x3U << PMU_CR_WKFSEL_Pos)
#define PMU_CR_WKFSEL PMU_CR_WKFSEL_Msk
#define PMU_CR_SLPDP_Pos (9U)
#define PMU_CR_SLPDP_Msk (0x1U << PMU_CR_SLPDP_Pos)
#define PMU_CR_SLPDP PMU_CR_SLPDP_Msk
#define PMU_CR_CVS_Pos (8U)
#define PMU_CR_CVS_Msk (0x1U << PMU_CR_CVS_Pos)
#define PMU_CR_CVS PMU_CR_CVS_Msk
#define PMU_CR_PMOD_Pos (0U)
#define PMU_CR_PMOD_Msk (0x3U << PMU_CR_PMOD_Pos)
#define PMU_CR_PMOD PMU_CR_PMOD_Msk
#define PMU_WKTR_VREFDLY_Pos (3U)
#define PMU_WKTR_VREFDLY_Msk (0x1U << PMU_WKTR_VREFDLY_Pos)
#define PMU_WKTR_VREFDLY PMU_WKTR_VREFDLY_Msk
#define PMU_WKTR_STPCLR_Pos (2U)
#define PMU_WKTR_STPCLR_Msk (0x1U << PMU_WKTR_STPCLR_Pos)
#define PMU_WKTR_STPCLR PMU_WKTR_STPCLR_Msk
#define PMU_WKTR_T1A_Pos (0U)
#define PMU_WKTR_T1A_Msk (0x3U << PMU_WKTR_T1A_Pos)
#define PMU_WKTR_T1A PMU_WKTR_T1A_Msk
#define PMU_WKFR_ADCWKF_Pos (31U)
#define PMU_WKFR_ADCWKF_Msk (0x1U << PMU_WKFR_ADCWKF_Pos)
#define PMU_WKFR_ADCWKF PMU_WKFR_ADCWKF_Msk
#define PMU_WKFR_UART1WKF_Pos (30U)
#define PMU_WKFR_UART1WKF_Msk (0x1U << PMU_WKFR_UART1WKF_Pos)
#define PMU_WKFR_UART1WKF PMU_WKFR_UART1WKF_Msk
#define PMU_WKFR_UART0WKF_Pos (29U)
#define PMU_WKFR_UART0WKF_Msk (0x1U << PMU_WKFR_UART0WKF_Pos)
#define PMU_WKFR_UART0WKF PMU_WKFR_UART0WKF_Msk
#define PMU_WKFR_RTCWKF_Pos (28U)
#define PMU_WKFR_RTCWKF_Msk (0x1U << PMU_WKFR_RTCWKF_Pos)
#define PMU_WKFR_RTCWKF PMU_WKFR_RTCWKF_Msk
#define PMU_WKFR_SVDWKF_Pos (27U)
#define PMU_WKFR_SVDWKF_Msk (0x1U << PMU_WKFR_SVDWKF_Pos)
#define PMU_WKFR_SVDWKF PMU_WKFR_SVDWKF_Msk
#define PMU_WKFR_LFDETWKF_Pos (26U)
#define PMU_WKFR_LFDETWKF_Msk (0x1U << PMU_WKFR_LFDETWKF_Pos)
#define PMU_WKFR_LFDETWKF PMU_WKFR_LFDETWKF_Msk
#define PMU_WKFR_VREFWKF_Pos (25U)
#define PMU_WKFR_VREFWKF_Msk (0x1U << PMU_WKFR_VREFWKF_Pos)
#define PMU_WKFR_VREFWKF PMU_WKFR_VREFWKF_Msk
#define PMU_WKFR_IOWKF_Pos (24U)
#define PMU_WKFR_IOWKF_Msk (0x1U << PMU_WKFR_IOWKF_Pos)
#define PMU_WKFR_IOWKF PMU_WKFR_IOWKF_Msk
#define PMU_WKFR_IICWKF_Pos (23U)
#define PMU_WKFR_IICWKF_Msk (0x1U << PMU_WKFR_IICWKF_Pos)
#define PMU_WKFR_IICWKF PMU_WKFR_IICWKF_Msk
#define PMU_WKFR_LPU2WKF_Pos (22U)
#define PMU_WKFR_LPU2WKF_Msk (0x1U << PMU_WKFR_LPU2WKF_Pos)
#define PMU_WKFR_LPU2WKF PMU_WKFR_LPU2WKF_Msk
#define PMU_WKFR_LPU1WKF_Pos (21U)
#define PMU_WKFR_LPU1WKF_Msk (0x1U << PMU_WKFR_LPU1WKF_Pos)
#define PMU_WKFR_LPU1WKF PMU_WKFR_LPU1WKF_Msk
#define PMU_WKFR_LPU0WKF_Pos (20U)
#define PMU_WKFR_LPU0WKF_Msk (0x1U << PMU_WKFR_LPU0WKF_Pos)
#define PMU_WKFR_LPU0WKF PMU_WKFR_LPU0WKF_Msk
#define PMU_WKFR_COMP3WKF_Pos (18U)
#define PMU_WKFR_COMP3WKF_Msk (0x1U << PMU_WKFR_COMP3WKF_Pos)
#define PMU_WKFR_COMP3WKF PMU_WKFR_COMP3WKF_Msk
#define PMU_WKFR_COMP2WKF_Pos (17U)
#define PMU_WKFR_COMP2WKF_Msk (0x1U << PMU_WKFR_COMP2WKF_Pos)
#define PMU_WKFR_COMP2WKF PMU_WKFR_COMP2WKF_Msk
#define PMU_WKFR_COMP1WKF_Pos (16U)
#define PMU_WKFR_COMP1WKF_Msk (0x1U << PMU_WKFR_COMP1WKF_Pos)
#define PMU_WKFR_COMP1WKF PMU_WKFR_COMP1WKF_Msk
#define PMU_WKFR_LPT32WKF_Pos (14U)
#define PMU_WKFR_LPT32WKF_Msk (0x1U << PMU_WKFR_LPT32WKF_Pos)
#define PMU_WKFR_LPT32WKF PMU_WKFR_LPT32WKF_Msk
#define PMU_WKFR_LPT16WKF_Pos (13U)
#define PMU_WKFR_LPT16WKF_Msk (0x1U << PMU_WKFR_LPT16WKF_Pos)
#define PMU_WKFR_LPT16WKF PMU_WKFR_LPT16WKF_Msk
#define PMU_WKFR_BST32WKF_Pos (12U)
#define PMU_WKFR_BST32WKF_Msk (0x1U << PMU_WKFR_BST32WKF_Pos)
#define PMU_WKFR_BST32WKF PMU_WKFR_BST32WKF_Msk
#define PMU_WKFR_BST16WKF_Pos (11U)
#define PMU_WKFR_BST16WKF_Msk (0x1U << PMU_WKFR_BST16WKF_Pos)
#define PMU_WKFR_BST16WKF PMU_WKFR_BST16WKF_Msk
#define PMU_WKFR_DBGWKF_Pos (10U)
#define PMU_WKFR_DBGWKF_Msk (0x1U << PMU_WKFR_DBGWKF_Pos)
#define PMU_WKFR_DBGWKF PMU_WKFR_DBGWKF_Msk
#define PMU_WKFR_WKPXF_Pos (0U)
#define PMU_WKFR_WKPXF_Msk (0x3ffU << PMU_WKFR_WKPXF_Pos)
#define PMU_WKFR_WKPXF PMU_WKFR_WKPXF_Msk
#define PMU_IER_LPACTIE_Pos (2U)
#define PMU_IER_LPACTIE_Msk (0x1U << PMU_IER_LPACTIE_Pos)
#define PMU_IER_LPACTIE PMU_IER_LPACTIE_Msk
#define PMU_IER_SLPEIE_Pos (1U)
#define PMU_IER_SLPEIE_Msk (0x1U << PMU_IER_SLPEIE_Pos)
#define PMU_IER_SLPEIE PMU_IER_SLPEIE_Msk
#define PMU_IER_LPREIE_Pos (0U)
#define PMU_IER_LPREIE_Msk (0x1U << PMU_IER_LPREIE_Pos)
#define PMU_IER_LPREIE PMU_IER_LPREIE_Msk
#define PMU_ISR_LPACTIF_Pos (2U)
#define PMU_ISR_LPACTIF_Msk (0x1U << PMU_ISR_LPACTIF_Pos)
#define PMU_ISR_LPACTIF PMU_ISR_LPACTIF_Msk
#define PMU_ISR_SLPEIF_Pos (1U)
#define PMU_ISR_SLPEIF_Msk (0x1U << PMU_ISR_SLPEIF_Pos)
#define PMU_ISR_SLPEIF PMU_ISR_SLPEIF_Msk
#define PMU_ISR_LPREIF_Pos (0U)
#define PMU_ISR_LPREIF_Msk (0x1U << PMU_ISR_LPREIF_Pos)
#define PMU_ISR_LPREIF PMU_ISR_LPREIF_Msk
#define FL_PMU_WAKEUP0_PIN (0x1U << 0U)
#define FL_PMU_WAKEUP1_PIN (0x1U << 1U)
#define FL_PMU_WAKEUP2_PIN (0x1U << 2U)
#define FL_PMU_WAKEUP3_PIN (0x1U << 3U)
#define FL_PMU_WAKEUP4_PIN (0x1U << 4U)
#define FL_PMU_WAKEUP5_PIN (0x1U << 5U)
#define FL_PMU_WAKEUP6_PIN (0x1U << 6U)
#define FL_PMU_WAKEUP7_PIN (0x1U << 7U)
#define FL_PMU_WAKEUP8_PIN (0x1U << 8U)
#define FL_PMU_WAKEUP9_PIN (0x1U << 9U)
#define FL_PMU_LDO_LPM_DISABLE (0x0U << PMU_CR_LDO_LPM_Pos)
#define FL_PMU_LDO_LPM_ENABLE (0x2U << PMU_CR_LDO_LPM_Pos)
#define FL_PMU_RCHF_WAKEUP_FREQ_8MHZ (0x0U << PMU_CR_WKFSEL_Pos)
#define FL_PMU_RCHF_WAKEUP_FREQ_16MHZ (0x1U << PMU_CR_WKFSEL_Pos)
#define FL_PMU_RCHF_WAKEUP_FREQ_24MHZ (0x2U << PMU_CR_WKFSEL_Pos)
#define FL_PMU_SLEEP_MODE_DEEP (0x1U << PMU_CR_SLPDP_Pos)
#define FL_PMU_SLEEP_MODE_NORMAL (0x0U << PMU_CR_SLPDP_Pos)
#define FL_PMU_POWER_MODE_ACTIVE_OR_LPACTIVE (0x0U << PMU_CR_PMOD_Pos)
#define FL_PMU_POWER_MODE_LPRUN_ONLY (0x1U << PMU_CR_PMOD_Pos)
#define FL_PMU_POWER_MODE_SLEEP_OR_DEEPSLEEP (0x2U << PMU_CR_PMOD_Pos)
#define FL_PMU_WAKEUP_DELAY_MODE_IMMEDIATE (0x0U << PMU_WKTR_VREFDLY_Pos)
#define FL_PMU_WAKEUP_DELAY_MODE_WAIT_VREF1P2 (0x1U << PMU_WKTR_VREFDLY_Pos)
#define FL_PMU_FLASH_STOP_CLEAR_MODE_SYNCHRONOUS (0x0U << PMU_WKTR_STPCLR_Pos)
#define FL_PMU_FLASH_STOP_CLEAR_MODE_ASYNCHRONOUS (0x1U << PMU_WKTR_STPCLR_Pos)
#define FL_PMU_WAKEUP_DELAY_0US (0x0U << PMU_WKTR_T1A_Pos)
#define FL_PMU_WAKEUP_DELAY_2US (0x1U << PMU_WKTR_T1A_Pos)
#define FL_PMU_WAKEUP_DELAY_4US (0x2U << PMU_WKTR_T1A_Pos)
#define FL_PMU_WAKEUP_DELAY_8US (0x3U << PMU_WKTR_T1A_Pos)
/**
* @}
*/
/* Exported functions ---------------------------------------------------------------------------------*/
/** @defgroup PMU_FL_Exported_Functions PMU Exported Functions
* @{
*/
/**
* @brief Set LDO Low Power Mode
* @rmtoll CR LDO_LPM FL_PMU_SetLDOLowPowerMode
* @param PMUx PMU instance
* @param mode This parameter can be one of the following values:
* @arg @ref FL_PMU_LDO_LPM_DISABLE
* @arg @ref FL_PMU_LDO_LPM_ENABLE
* @retval None
*/
__STATIC_INLINE void FL_PMU_SetLDOLowPowerMode(PMU_Type *PMUx, uint32_t mode)
{
MODIFY_REG(PMUx->CR, PMU_CR_LDO_LPM_Msk, mode);
}
/**
* @brief Get LDO Low Power Mode Setting
* @rmtoll CR LDO_LPM FL_PMU_GetLDOLowPowerMode
* @param PMUx PMU instance
* @retval Returned value can be one of the following values:
* @arg @ref FL_PMU_LDO_LPM_DISABLE
* @arg @ref FL_PMU_LDO_LPM_ENABLE
*/
__STATIC_INLINE uint32_t FL_PMU_GetLDOLowPowerMode(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->CR, PMU_CR_LDO_LPM_Msk));
}
/**
* @brief Get LDO15 Enable Status
* @rmtoll CR LDO15EN FL_PMU_GetLDO15Status
* @param PMUx PMU instance
* @retval Returned value can be one of the following values:
*/
__STATIC_INLINE uint32_t FL_PMU_GetLDO15Status(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->CR, PMU_CR_LDO15EN_Msk));
}
/**
* @brief Get LDO15 Inverse check bit
* @rmtoll CR LDO15EN_B FL_PMU_GetLDO15StatusInvert
* @param PMUx PMU instance
* @retval Returned value can be one of the following values:
*/
__STATIC_INLINE uint32_t FL_PMU_GetLDO15StatusInvert(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->CR, PMU_CR_LDO15EN_B_Msk));
}
/**
* @brief Set RCHF Frequency After Wakeup
* @rmtoll CR WKFSEL FL_PMU_SetRCHFWakeupFrequency
* @param PMUx PMU instance
* @param Freq This parameter can be one of the following values:
* @arg @ref FL_PMU_RCHF_WAKEUP_FREQ_8MHZ
* @arg @ref FL_PMU_RCHF_WAKEUP_FREQ_16MHZ
* @arg @ref FL_PMU_RCHF_WAKEUP_FREQ_24MHZ
* @retval None
*/
__STATIC_INLINE void FL_PMU_SetRCHFWakeupFrequency(PMU_Type *PMUx, uint32_t Freq)
{
MODIFY_REG(PMUx->CR, PMU_CR_WKFSEL_Msk, Freq);
}
/**
* @brief Get RCHF Frequency After Wakeup Setting
* @rmtoll CR WKFSEL FL_PMU_GetRCHFWakeupFrequency
* @param PMUx PMU instance
* @retval Returned value can be one of the following values:
* @arg @ref FL_PMU_RCHF_WAKEUP_FREQ_8MHZ
* @arg @ref FL_PMU_RCHF_WAKEUP_FREQ_16MHZ
* @arg @ref FL_PMU_RCHF_WAKEUP_FREQ_24MHZ
*/
__STATIC_INLINE uint32_t FL_PMU_GetRCHFWakeupFrequency(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->CR, PMU_CR_WKFSEL_Msk));
}
/**
* @brief Set Sleep Mode
* @rmtoll CR SLPDP FL_PMU_SetSleepMode
* @param PMUx PMU instance
* @param mode This parameter can be one of the following values:
* @arg @ref FL_PMU_SLEEP_MODE_DEEP
* @arg @ref FL_PMU_SLEEP_MODE_NORMAL
* @retval None
*/
__STATIC_INLINE void FL_PMU_SetSleepMode(PMU_Type *PMUx, uint32_t mode)
{
MODIFY_REG(PMUx->CR, PMU_CR_SLPDP_Msk, mode);
}
/**
* @brief Get Sleep Mode Setting
* @rmtoll CR SLPDP FL_PMU_GetSleepMode
* @param PMUx PMU instance
* @retval Returned value can be one of the following values:
* @arg @ref FL_PMU_SLEEP_MODE_DEEP
* @arg @ref FL_PMU_SLEEP_MODE_NORMAL
*/
__STATIC_INLINE uint32_t FL_PMU_GetSleepMode(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->CR, PMU_CR_SLPDP_Msk));
}
/**
* @brief Enable Core Voltage Scaling Under Low Power Mode
* @rmtoll CR CVS FL_PMU_EnableCoreVoltageScaling
* @param PMUx PMU instance
* @retval None
*/
__STATIC_INLINE void FL_PMU_EnableCoreVoltageScaling(PMU_Type *PMUx)
{
SET_BIT(PMUx->CR, PMU_CR_CVS_Msk);
}
/**
* @brief Get Core Voltage Scaling Under Low Power Mode Enable Status
* @rmtoll CR CVS FL_PMU_IsEnabledCoreVoltageScaling
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsEnabledCoreVoltageScaling(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->CR, PMU_CR_CVS_Msk) == PMU_CR_CVS_Msk);
}
/**
* @brief Disable Core Voltage Scaling Under Low Power Mode
* @rmtoll CR CVS FL_PMU_DisableCoreVoltageScaling
* @param PMUx PMU instance
* @retval None
*/
__STATIC_INLINE void FL_PMU_DisableCoreVoltageScaling(PMU_Type *PMUx)
{
CLEAR_BIT(PMUx->CR, PMU_CR_CVS_Msk);
}
/**
* @brief Set Low Power Mode
* @rmtoll CR PMOD FL_PMU_SetLowPowerMode
* @param PMUx PMU instance
* @param mode This parameter can be one of the following values:
* @arg @ref FL_PMU_POWER_MODE_ACTIVE_OR_LPACTIVE
* @arg @ref FL_PMU_POWER_MODE_LPRUN_ONLY
* @arg @ref FL_PMU_POWER_MODE_SLEEP_OR_DEEPSLEEP
* @retval None
*/
__STATIC_INLINE void FL_PMU_SetLowPowerMode(PMU_Type *PMUx, uint32_t mode)
{
MODIFY_REG(PMUx->CR, PMU_CR_PMOD_Msk, mode);
}
/**
* @brief Get Low Power Mode Setting
* @rmtoll CR PMOD FL_PMU_GetLowPowerMode
* @param PMUx PMU instance
* @retval Returned value can be one of the following values:
*/
__STATIC_INLINE uint32_t FL_PMU_GetLowPowerMode(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->CR, PMU_CR_PMOD_Msk));
}
/**
* @brief Set VREF delay wakeup mode
* @rmtoll WKTR VREFDLY FL_PMU_SetVREFWakeupDelayMode
* @param PMUx PMU instance
* @param VREFDelay This parameter can be one of the following values:
* @arg @ref FL_PMU_WAKEUP_DELAY_MODE_IMMEDIATE
* @arg @ref FL_PMU_WAKEUP_DELAY_MODE_WAIT_VREF1P2
* @retval None
*/
__STATIC_INLINE void FL_PMU_SetVREFWakeupDelayMode(PMU_Type *PMUx, uint32_t VREFDelay)
{
MODIFY_REG(PMUx->WKTR, PMU_WKTR_VREFDLY_Msk, VREFDelay);
}
/**
* @brief Get VREF delay wakeup status
* @rmtoll WKTR VREFDLY FL_PMU_GetVREFWakeupDelayMode
* @param PMUx PMU instance
* @retval Returned value can be one of the following values:
* @arg @ref FL_PMU_WAKEUP_DELAY_MODE_IMMEDIATE
* @arg @ref FL_PMU_WAKEUP_DELAY_MODE_WAIT_VREF1P2
*/
__STATIC_INLINE uint32_t FL_PMU_GetVREFWakeupDelayMode(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKTR, PMU_WKTR_VREFDLY_Msk));
}
/**
* @brief Set Flash Stop Signal Clear Way
* @rmtoll WKTR STPCLR FL_PMU_SetFlashStopSignalClearMode
* @param PMUx PMU instance
* @param config This parameter can be one of the following values:
* @arg @ref FL_PMU_FLASH_STOP_CLEAR_MODE_ASYNCHRONOUS
* @arg @ref FL_PMU_FLASH_STOP_CLEAR_MODE_SYNCHRONOUS
* @retval None
*/
__STATIC_INLINE void FL_PMU_SetFlashStopSignalClearMode(PMU_Type *PMUx, uint32_t config)
{
MODIFY_REG(PMUx->WKTR, PMU_WKTR_STPCLR_Msk, config);
}
/**
* @brief Get Flash Stop Signal Clear Way Setting
* @rmtoll WKTR STPCLR FL_PMU_GetFlashStopSignalClearMode
* @param PMUx PMU instance
* @retval Returned value can be one of the following values:
* @arg @ref FL_PMU_FLASH_STOP_CLEAR_MODE_ASYNCHRONOUS
* @arg @ref FL_PMU_FLASH_STOP_CLEAR_MODE_SYNCHRONOUS
*/
__STATIC_INLINE uint32_t FL_PMU_GetFlashStopSignalClearMode(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKTR, PMU_WKTR_STPCLR_Msk));
}
/**
* @brief Set Extra Wakeup Delay Under Sleep/DeepSleep Mode
* @rmtoll WKTR T1A FL_PMU_SetWakeupDelay
* @param PMUx PMU instance
* @param time This parameter can be one of the following values:
* @arg @ref FL_PMU_WAKEUP_DELAY_0US
* @arg @ref FL_PMU_WAKEUP_DELAY_2US
* @arg @ref FL_PMU_WAKEUP_DELAY_4US
* @arg @ref FL_PMU_WAKEUP_DELAY_8US
* @retval None
*/
__STATIC_INLINE void FL_PMU_SetWakeupDelay(PMU_Type *PMUx, uint32_t time)
{
MODIFY_REG(PMUx->WKTR, PMU_WKTR_T1A_Msk, time);
}
/**
* @brief Get Extra Wakeup Delay Under Sleep/DeepSleep Mode Setting
* @rmtoll WKTR T1A FL_PMU_GetWakeupDelay
* @param PMUx PMU instance
* @retval Returned value can be one of the following values:
* @arg @ref FL_PMU_WAKEUP_DELAY_0US
* @arg @ref FL_PMU_WAKEUP_DELAY_2US
* @arg @ref FL_PMU_WAKEUP_DELAY_4US
* @arg @ref FL_PMU_WAKEUP_DELAY_8US
*/
__STATIC_INLINE uint32_t FL_PMU_GetWakeupDelay(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKTR, PMU_WKTR_T1A_Msk));
}
/**
* @brief Get ADC interrupt wakeup flag
* @rmtoll WKFR ADCWKF FL_PMU_IsActiveFlag_WakeupADC
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupADC(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_ADCWKF_Msk) == (PMU_WKFR_ADCWKF_Msk));
}
/**
* @brief Get UART1 interrupt wakeup flag
* @rmtoll WKFR UART1WKF FL_PMU_IsActiveFlag_WakeupUART1
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupUART1(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_UART1WKF_Msk) == (PMU_WKFR_UART1WKF_Msk));
}
/**
* @brief Get UART0 interrupt wakeup flag
* @rmtoll WKFR UART0WKF FL_PMU_IsActiveFlag_WakeupUART0
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupUART0(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_UART0WKF_Msk) == (PMU_WKFR_UART0WKF_Msk));
}
/**
* @brief Get RTC interrupt wakeup flag
* @rmtoll WKFR RTCWKF FL_PMU_IsActiveFlag_WakeupRTC
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupRTC(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_RTCWKF_Msk) == (PMU_WKFR_RTCWKF_Msk));
}
/**
* @brief Get SVD interrupt wakeup flag
* @rmtoll WKFR SVDWKF FL_PMU_IsActiveFlag_WakeupSVD
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupSVD(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_SVDWKF_Msk) == (PMU_WKFR_SVDWKF_Msk));
}
/**
* @brief Get LFDET interrupt wakeup flag
* @rmtoll WKFR LFDETWKF FL_PMU_IsActiveFlag_WakeupLFDET
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupLFDET(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_LFDETWKF_Msk) == (PMU_WKFR_LFDETWKF_Msk));
}
/**
* @brief Get VREF interrupt wakeup flag
* @rmtoll WKFR VREFWKF FL_PMU_IsActiveFlag_WakeupVREF
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupVREF(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_VREFWKF_Msk) == (PMU_WKFR_VREFWKF_Msk));
}
/**
* @brief Get IO interrupt wakeup flag
* @rmtoll WKFR IOWKF FL_PMU_IsActiveFlag_WakeupEXTI
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupEXTI(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_IOWKF_Msk) == (PMU_WKFR_IOWKF_Msk));
}
/**
* @brief Get I2C interrupt wakeup flag
* @rmtoll WKFR IICWKF FL_PMU_IsActiveFlag_WakeupI2C
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupI2C(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_IICWKF_Msk) == (PMU_WKFR_IICWKF_Msk));
}
/**
* @brief Get LPUART2 interrupt wakeup flag
* @rmtoll WKFR LPU2WKF FL_PMU_IsActiveFlag_WakeupLPUART2
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupLPUART2(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_LPU2WKF_Msk) == (PMU_WKFR_LPU2WKF_Msk));
}
/**
* @brief Get LPUART1 interrupt wakeup flag
* @rmtoll WKFR LPU1WKF FL_PMU_IsActiveFlag_WakeupLPUART1
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupLPUART1(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_LPU1WKF_Msk) == (PMU_WKFR_LPU1WKF_Msk));
}
/**
* @brief Get LPUART0 interrupt wakeup flag
* @rmtoll WKFR LPU0WKF FL_PMU_IsActiveFlag_WakeupLPUART0
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupLPUART0(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_LPU0WKF_Msk) == (PMU_WKFR_LPU0WKF_Msk));
}
/**
* @brief Get COMP3 interrrupt wakeup flag
* @rmtoll WKFR COMP3WKF FL_PMU_IsActiveFlag_WakeupCOMP3
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupCOMP3(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_COMP3WKF_Msk) == (PMU_WKFR_COMP3WKF_Msk));
}
/**
* @brief Get COMP2 interrrupt wakeup flag
* @rmtoll WKFR COMP2WKF FL_PMU_IsActiveFlag_WakeupCOMP2
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupCOMP2(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_COMP2WKF_Msk) == (PMU_WKFR_COMP2WKF_Msk));
}
/**
* @brief Get COMP1 interrrupt wakeup flag
* @rmtoll WKFR COMP1WKF FL_PMU_IsActiveFlag_WakeupCOMP1
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupCOMP1(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_COMP1WKF_Msk) == (PMU_WKFR_COMP1WKF_Msk));
}
/**
* @brief Get LPTIM32 interrupt wakeup flag
* @rmtoll WKFR LPT32WKF FL_PMU_IsActiveFlag_WakeupLPTIM32
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupLPTIM32(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_LPT32WKF_Msk) == (PMU_WKFR_LPT32WKF_Msk));
}
/**
* @brief Get LPTIM16 interrupt wakeup flag
* @rmtoll WKFR LPT16WKF FL_PMU_IsActiveFlag_WakeupLPTIM16
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupLPTIM16(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_LPT16WKF_Msk) == (PMU_WKFR_LPT16WKF_Msk));
}
/**
* @brief Get BSTIM32 interrupt wakeup flag
* @rmtoll WKFR BST32WKF FL_PMU_IsActiveFlag_WakeupBSTIM32
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupBSTIM32(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_BST32WKF_Msk) == (PMU_WKFR_BST32WKF_Msk));
}
/**
* @brief Get BSTIM16 interrupt wakeup flag
* @rmtoll WKFR BST16WKF FL_PMU_IsActiveFlag_WakeupBSTIM16
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupBSTIM16(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_BST16WKF_Msk) == (PMU_WKFR_BST16WKF_Msk));
}
/**
* @brief Get CPU Debugger wakeup flag
* @rmtoll WKFR DBGWKF FL_PMU_IsActiveFlag_WakeupDBG
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupDBG(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, PMU_WKFR_DBGWKF_Msk) == (PMU_WKFR_DBGWKF_Msk));
}
/**
* @brief Clear CPU Debugger wakeup flag
* @rmtoll WKFR DBGWKF FL_PMU_ClearFlag_WakeupDBG
* @param PMUx PMU instance
* @retval None
*/
__STATIC_INLINE void FL_PMU_ClearFlag_WakeupDBG(PMU_Type *PMUx)
{
WRITE_REG(PMUx->WKFR, PMU_WKFR_DBGWKF_Msk);
}
/**
* @brief Get pinx wakeup flag
* @rmtoll WKFR WKPXF FL_PMU_IsActiveFlag_WakeupPIN
* @param PMUx PMU instance
* @param Pin This parameter can be one of the following values:
* @arg @ref FL_PMU_WAKEUP0_PIN
* @arg @ref FL_PMU_WAKEUP1_PIN
* @arg @ref FL_PMU_WAKEUP2_PIN
* @arg @ref FL_PMU_WAKEUP3_PIN
* @arg @ref FL_PMU_WAKEUP4_PIN
* @arg @ref FL_PMU_WAKEUP5_PIN
* @arg @ref FL_PMU_WAKEUP6_PIN
* @arg @ref FL_PMU_WAKEUP7_PIN
* @arg @ref FL_PMU_WAKEUP8_PIN
* @arg @ref FL_PMU_WAKEUP9_PIN
* @retval Returned value can be one of the following values:
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_WakeupPIN(PMU_Type *PMUx, uint32_t Pin)
{
return (uint32_t)(READ_BIT(PMUx->WKFR, ((Pin & 0x3ff) << 0x0U)) == ((Pin & 0x3ff) << 0x0U));
}
/**
* @brief Clear pinx wakeup flag
* @rmtoll WKFR WKPXF FL_PMU_ClearFlag_WakeupPIN
* @param PMUx PMU instance
* @param Pin This parameter can be one of the following values:
* @arg @ref FL_PMU_WAKEUP0_PIN
* @arg @ref FL_PMU_WAKEUP1_PIN
* @arg @ref FL_PMU_WAKEUP2_PIN
* @arg @ref FL_PMU_WAKEUP3_PIN
* @arg @ref FL_PMU_WAKEUP4_PIN
* @arg @ref FL_PMU_WAKEUP5_PIN
* @arg @ref FL_PMU_WAKEUP6_PIN
* @arg @ref FL_PMU_WAKEUP7_PIN
* @arg @ref FL_PMU_WAKEUP8_PIN
* @arg @ref FL_PMU_WAKEUP9_PIN
* @retval None
*/
__STATIC_INLINE void FL_PMU_ClearFlag_WakeupPIN(PMU_Type *PMUx, uint32_t Pin)
{
WRITE_REG(PMUx->WKFR, ((Pin & 0x3ff) << 0x0U));
}
/**
* @brief LPActive error interrupt enable
* @rmtoll IER LPACTIE FL_PMU_EnableIT_LPActiveError
* @param PMUx PMU instance
* @retval None
*/
__STATIC_INLINE void FL_PMU_EnableIT_LPActiveError(PMU_Type *PMUx)
{
SET_BIT(PMUx->IER, PMU_IER_LPACTIE_Msk);
}
/**
* @brief Get LPActive error interrupt enable status
* @rmtoll IER LPACTIE FL_PMU_IsEnabledIT_LPActiveError
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsEnabledIT_LPActiveError(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->IER, PMU_IER_LPACTIE_Msk) == PMU_IER_LPACTIE_Msk);
}
/**
* @brief LPActive error interrupt disable
* @rmtoll IER LPACTIE FL_PMU_DisableIT_LPActiveError
* @param PMUx PMU instance
* @retval None
*/
__STATIC_INLINE void FL_PMU_DisableIT_LPActiveError(PMU_Type *PMUx)
{
CLEAR_BIT(PMUx->IER, PMU_IER_LPACTIE_Msk);
}
/**
* @brief Sleep error interrupt enable
* @rmtoll IER SLPEIE FL_PMU_EnableIT_SleepError
* @param PMUx PMU instance
* @retval None
*/
__STATIC_INLINE void FL_PMU_EnableIT_SleepError(PMU_Type *PMUx)
{
SET_BIT(PMUx->IER, PMU_IER_SLPEIE_Msk);
}
/**
* @brief Get sleep error interrupt enable status
* @rmtoll IER SLPEIE FL_PMU_IsEnabledIT_SleepError
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsEnabledIT_SleepError(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->IER, PMU_IER_SLPEIE_Msk) == PMU_IER_SLPEIE_Msk);
}
/**
* @brief Sleep error interrupt disable
* @rmtoll IER SLPEIE FL_PMU_DisableIT_SleepError
* @param PMUx PMU instance
* @retval None
*/
__STATIC_INLINE void FL_PMU_DisableIT_SleepError(PMU_Type *PMUx)
{
CLEAR_BIT(PMUx->IER, PMU_IER_SLPEIE_Msk);
}
/**
* @brief LPREIE error interrupt enable
* @rmtoll IER LPREIE FL_PMU_EnableIT_LPRunError
* @param PMUx PMU instance
* @retval None
*/
__STATIC_INLINE void FL_PMU_EnableIT_LPRunError(PMU_Type *PMUx)
{
SET_BIT(PMUx->IER, PMU_IER_LPREIE_Msk);
}
/**
* @brief Get LPREIE error interrupt enable status
* @rmtoll IER LPREIE FL_PMU_IsEnabledIT_LPRunError
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsEnabledIT_LPRunError(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->IER, PMU_IER_LPREIE_Msk) == PMU_IER_LPREIE_Msk);
}
/**
* @brief LPREIE error interrupt disable
* @rmtoll IER LPREIE FL_PMU_DisableIT_LPRunError
* @param PMUx PMU instance
* @retval None
*/
__STATIC_INLINE void FL_PMU_DisableIT_LPRunError(PMU_Type *PMUx)
{
CLEAR_BIT(PMUx->IER, PMU_IER_LPREIE_Msk);
}
/**
* @brief Get LPACTIF error interrupt flag
* @rmtoll ISR LPACTIF FL_PMU_IsActiveFlag_LPActiveError
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_LPActiveError(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->ISR, PMU_ISR_LPACTIF_Msk) == (PMU_ISR_LPACTIF_Msk));
}
/**
* @brief Clear LPACTIF error interrupt flag
* @rmtoll ISR LPACTIF FL_PMU_ClearFlag_LPActiveError
* @param PMUx PMU instance
* @retval None
*/
__STATIC_INLINE void FL_PMU_ClearFlag_LPActiveError(PMU_Type *PMUx)
{
WRITE_REG(PMUx->ISR, PMU_ISR_LPACTIF_Msk);
}
/**
* @brief Get SLEEP error interrupt flag
* @rmtoll ISR SLPEIF FL_PMU_IsActiveFlag_SleepError
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_SleepError(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->ISR, PMU_ISR_SLPEIF_Msk) == (PMU_ISR_SLPEIF_Msk));
}
/**
* @brief Clear SLEEP error interrupt flag
* @rmtoll ISR SLPEIF FL_PMU_ClearFlag_SleepError
* @param PMUx PMU instance
* @retval None
*/
__STATIC_INLINE void FL_PMU_ClearFlag_SleepError(PMU_Type *PMUx)
{
WRITE_REG(PMUx->ISR, PMU_ISR_SLPEIF_Msk);
}
/**
* @brief Get LPRUN error interrupt flag
* @rmtoll ISR LPREIF FL_PMU_IsActiveFlag_LPRunError
* @param PMUx PMU instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_PMU_IsActiveFlag_LPRunError(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->ISR, PMU_ISR_LPREIF_Msk) == (PMU_ISR_LPREIF_Msk));
}
/**
* @brief Clear LPRUN error interrupt flag
* @rmtoll ISR LPREIF FL_PMU_ClearFlag_LPRunError
* @param PMUx PMU instance
* @retval None
*/
__STATIC_INLINE void FL_PMU_ClearFlag_LPRunError(PMU_Type *PMUx)
{
WRITE_REG(PMUx->ISR, PMU_ISR_LPREIF_Msk);
}
/**
* @brief Set ULPBG output VREF
* @rmtoll ULPB_TR FL_PMU_WriteULPBGOutputTrim
* @param PMUx PMU instance
* @param trim
* @retval None
*/
__STATIC_INLINE void FL_PMU_WriteULPBGOutputTrim(PMU_Type *PMUx, uint32_t trim)
{
MODIFY_REG(PMUx->ULPB_TR, (0x1fU << 0U), (trim << 0U));
}
/**
* @brief Get ULPBG output VREF
* @rmtoll ULPB_TR FL_PMU_ReadULPBGOutputTrim
* @param PMUx PMU instance
* @retval
*/
__STATIC_INLINE uint32_t FL_PMU_ReadULPBGOutputTrim(PMU_Type *PMUx)
{
return (uint32_t)(READ_BIT(PMUx->ULPB_TR, (0x1fU << 0U)) >> 0U);
}
/**
* @}
*/
/** @defgroup PMU_FL_EF_Init Initialization and de-initialization functions
* @{
*/
FL_ErrorStatus FL_PMU_Sleep_DeInit(PMU_Type *PMUx);
FL_ErrorStatus FL_PMU_Sleep_Init(PMU_Type *PMUx, FL_PMU_SleepInitTypeDef *LPM_InitStruct);
void FL_PMU_StructInit(FL_PMU_SleepInitTypeDef *LPM_InitStruct);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __FM33LG0XX_FL_PMU_H*/
/*************************Py_Code_Generator Version: 0.1-0.14-0.1 @ 2020-10-20*************************/
/*************************(C) COPYRIGHT Fudan Microelectronics **** END OF FILE*************************/