171 lines
4.2 KiB
C
171 lines
4.2 KiB
C
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @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 */
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|
|||
|
|