CIU32_L051_M307R/Peripheral/CIU32L051_Lib/Source/ciu32l051_std_pmu.c

171 lines
4.2 KiB
C
Raw Normal View History

/************************************************************************************************/
/**
* @file ciu32l051_std_pmu.c
* @author MCU Ecosystem Development Team
* @brief PMU STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ʵ<EFBFBD><EFBFBD>PVD<EFBFBD><EFBFBD><EFBFBD>á<EFBFBD><EFBFBD>͹<EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȹ<EFBFBD><EFBFBD><EFBFBD>API<EFBFBD><EFBFBD>
*
*
**************************************************************************************************
* @attention
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
*
**************************************************************************************************
*/
/************************************************************************************************/
/**
* @addtogroup CIU32L051_STD_Driver
* @{
*/
/**
* @addtogroup PMU
* @{
*
*/
/************************************************************************************************/
/*------------------------------------------includes--------------------------------------------*/
#include "ciu32l051_std.h"
#ifdef STD_PMU_PERIPHERAL_USED
/*-------------------------------------------functions------------------------------------------*/
/************************************************************************************************/
/**
* @addtogroup PMU_External_Functions
* @{
*
*/
/************************************************************************************************/
/**
* @brief PMUȥ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ΪĬ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>
* VCORE_AON<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD>
* <EFBFBD>͹<EFBFBD><EFBFBD><EFBFBD>ģʽѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* PVD<EFBFBD>жϱ<EFBFBD>־<EFBFBD><EFBFBD>
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>
* BGRʹ<EFBFBD>ܿ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
* PVD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
void std_pmu_reg_reset(void)
{
PMU->CR1 &= (~PMU_CR1_VAON_WEN_MASK);
PMU->CR3 = PMU_CR3_DEFAULT_VALUE;
PMU->CLR = PMU_CLR_FLAG_VALUE;
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>PVD<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>
* @param pvd_init_param PVD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @note <EFBFBD><EFBFBD>SYSCFG_SECCR<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PVD_LOCK<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>PVDʹ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PVD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰӦ<EFBFBD><EFBFBD>֤PVD_LOCKδ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>PVD<EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD>ֹ״̬
* @retval std_status_t <EFBFBD><EFBFBD><EFBFBD><EFBFBD>APIִ<EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
*/
void std_pmu_pvd_init(std_pvd_init_t *pvd_init_param)
{
/* <20><><EFBFBD><EFBFBD>PVD<56><44><EFBFBD><EFBFBD> */
PMU->CR2 = 0U;
/* <20><><EFBFBD><EFBFBD>PVD<56><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ */
std_pmu_pvd_level_config(pvd_init_param->level);
if (PVD_FILTER_TIME_ENABLE == pvd_init_param->filter_enable)
{
/* <20><><EFBFBD><EFBFBD>PVD<56><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD>ʱ<EFBFBD><CAB1> */
std_pmu_pvd_filter_config(pvd_init_param->filter_time);
/* ʹ<><CAB9>PVD<56>˲<EFBFBD> */
std_pmu_pvd_filter_enable();
}
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>źű<C5BA><C5B1><EFBFBD> */
std_pmu_pvd_alarm_enable(pvd_init_param->alarm_type);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>PVD<EFBFBD><EFBFBD><EFBFBD>ΪĬ<EFBFBD><EFBFBD>ֵ
* @param pvd_init_struct PVD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @retval <EFBFBD><EFBFBD>
*/
void std_pmu_struct_init(std_pvd_init_t *pvd_init_struct)
{
pvd_init_struct->level = PMU_PVD_LEVEL_7;
pvd_init_struct->alarm_type = PMU_PVD_RISING;
pvd_init_struct->filter_enable = PVD_FILTER_TIME_DISABLE;
pvd_init_struct->filter_time = PVD_FILTER_TIME_2PCLK;
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>sleepģʽ
* @param mode_entry <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD>ķ<EFBFBD>ʽ
* @arg PMU_ENTRY_LOWPOWER_MODE_WFE
* @arg PMU_ENTRY_LOWPOWER_MODE_WFI
* @retval <EFBFBD><EFBFBD>
*/
void std_pmu_enter_sleep(uint32_t mode_entry)
{
/* <20><><EFBFBD><EFBFBD> SLEEPDEEP <20><>־ */
SCB->SCR &= (~SCB_SCR_SLEEPDEEP_Msk);
/* <20><><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><CDB9><EFBFBD>ģʽ<C4A3>Ľ<EFBFBD><C4BD>ʽ*/
if(PMU_ENTRY_LOWPOWER_MODE_WFI == mode_entry)
{
__WFI();
}
else
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ͨ<EFBFBD><CDA8>WFE<46><45><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>WFE<46><45><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><CDB9><EFBFBD>ģʽ*/
__SEV();
__WFE();
__WFE();
}
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>stopģʽ
* @param mode_entry <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD>ķ<EFBFBD>ʽ
* @arg PMU_ENTRY_LOWPOWER_MODE_WFE
* @arg PMU_ENTRY_LOWPOWER_MODE_WFI
* @retval <EFBFBD><EFBFBD>
*/
void std_pmu_enter_stop(uint32_t mode_entry)
{
/* <20><>λSLEEPDEEP<45><50>־ */
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
/* <20><><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><CDB9><EFBFBD>ģʽ<C4A3>Ľ<EFBFBD><C4BD>ʽ*/
if(PMU_ENTRY_LOWPOWER_MODE_WFI == mode_entry)
{
__WFI();
}
else
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ͨ<EFBFBD><CDA8>WFE<46><45><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>WFE<46><45><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><CDB9><EFBFBD>ģʽ*/
__SEV();
__WFE();
__WFE();
}
/* <20><>ԭSLEEPDEEP<45><50>־ */
SCB->SCR &= (~SCB_SCR_SLEEPDEEP_Msk);
}
/**
* @}
*/
#endif /* STD_PMU_PERIPHERAL_USED */
/**
* @}
*/
/**
* @}
*/