current_v/Drivers/FM33LG0xx_FL_Driver/Src/fm33lg0xx_fl_svd.c

192 lines
7.4 KiB
C
Raw Permalink Normal View History

2025-12-31 08:21:43 +08:00
/**
****************************************************************************************************
* @file fm33lg0xx_fl_svd.c
* @author FMSH Application Team
* @brief Src file of SVD 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.
*
****************************************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "fm33lg0xx_fl.h"
/** @addtogroup FM33LG0XX_FL_Driver
* @{
*/
/** @addtogroup SVD
* @{
*/
#ifdef FL_SVD_DRIVER_ENABLED
/* Private macros ------------------------------------------------------------*/
/** @addtogroup SVD_FL_Private_Macros
* @{
*/
#define IS_SVD_INSTANCE(INSTANCE) (((INSTANCE) == SVD))
#define IS_FL_SVD_REFERENCE_VOLTAGE(__VALUE__) (((__VALUE__) == FL_SVD_REFERENCE_1P0V)||\
((__VALUE__) == FL_SVD_REFERENCE_0P95V)||\
((__VALUE__) == FL_SVD_REFERENCE_0P9V))
#define IS_FL_SVD_WARNING_THRESHOLD_LEVEL(__VALUE__) (((__VALUE__) == FL_SVD_WARNING_THRESHOLD_GROUP0)||\
((__VALUE__) == FL_SVD_WARNING_THRESHOLD_GROUP1)||\
((__VALUE__) == FL_SVD_WARNING_THRESHOLD_GROUP2)||\
((__VALUE__) == FL_SVD_WARNING_THRESHOLD_GROUP3)||\
((__VALUE__) == FL_SVD_WARNING_THRESHOLD_GROUP4)||\
((__VALUE__) == FL_SVD_WARNING_THRESHOLD_GROUP5)||\
((__VALUE__) == FL_SVD_WARNING_THRESHOLD_GROUP6)||\
((__VALUE__) == FL_SVD_WARNING_THRESHOLD_GROUP7)||\
((__VALUE__) == FL_SVD_WARNING_THRESHOLD_GROUP8)||\
((__VALUE__) == FL_SVD_WARNING_THRESHOLD_GROUP9)||\
((__VALUE__) == FL_SVD_WARNING_THRESHOLD_GROUP10)||\
((__VALUE__) == FL_SVD_WARNING_THRESHOLD_GROUP11)||\
((__VALUE__) == FL_SVD_WARNING_THRESHOLD_GROUP12)||\
((__VALUE__) == FL_SVD_WARNING_THRESHOLD_GROUP13)||\
((__VALUE__) == FL_SVD_WARNING_THRESHOLD_GROUP14)||\
((__VALUE__) == FL_SVD_WARNING_THRESHOLD_GROUP15))
#define IS_FL_SVD_WORK_MODE(__VALUE__) (((__VALUE__) == FL_SVD_WORK_MODE_CONTINUOUS)||\
((__VALUE__) == FL_SVD_WORK_MODE_PERIODIC))
#define IS_FL_SVD_ENABLE_PERIOD(__VALUE__) (((__VALUE__) == FL_SVD_ENABLE_PERIOD_62P5MS)||\
((__VALUE__) == FL_SVD_ENABLE_PERIOD_256MS)||\
((__VALUE__) == FL_SVD_ENABLE_PERIOD_1000MS)||\
((__VALUE__) == FL_SVD_ENABLE_PERIOD_4000MS))
/**
* @}
*/
/* Exported functions --------------------------------------------------------*/
/** @addtogroup SVD_FL_EF_Init
* @{
*/
/**
* @brief SVD外设
* @param
* @retval
* -FL_PASS
* -FL_FAIL
*/
FL_ErrorStatus FL_SVD_DeInit(SVD_Type *SVDx)
{
/* 参数检查 */
assert_param(IS_SVD_INSTANCE(SVDx));
/* 使能复位 */
FL_RMU_EnablePeripheralReset(RMU);
/* 复位外设寄存器 */
FL_RMU_EnableResetAPBPeripheral(RMU, FL_RMU_RSTAPB_SVD);
FL_RMU_DisableResetAPBPeripheral(RMU, FL_RMU_RSTAPB_SVD);
/* 关闭外设总线时钟 */
FL_CMU_DisableGroup1BusClock(FL_CMU_GROUP1_BUSCLK_SVD);
/* 关闭复位 */
FL_RMU_DisablePeripheralReset(RMU);
return FL_PASS;
}
/**
* @brief SVD寄存器
*
* @param SVDx
* @param init @ref FL_SVD_InitTypeDef类型的结构体
*
* @retval ErrorStatus枚举值
* -FL_FAIL
* -FL_PASS SVD配置成功
*/
FL_ErrorStatus FL_SVD_Init(SVD_Type *SVDx, FL_SVD_InitTypeDef *init)
{
/* 参数检查 */
assert_param(IS_SVD_INSTANCE(SVDx));
assert_param(IS_FL_SVD_REFERENCE_VOLTAGE(init->referenceVoltage));
assert_param(IS_FL_SVD_WARNING_THRESHOLD_LEVEL(init->warningThreshold));
assert_param(IS_FL_SVD_WORK_MODE(init->workMode));
assert_param(IS_FL_SVD_ENABLE_PERIOD(init->enablePeriod));
/* 开启SVD时钟 */
if(SVDx == SVD)
{
FL_CMU_EnableGroup1BusClock(FL_CMU_GROUP1_BUSCLK_SVD);
}
else
{
return FL_FAIL;
}
/* 设置参考基准 */
FL_SVD_EnableReference(SVDx, init->referenceVoltage);
/* 设置报警阈值 */
FL_SVD_SetWarningThreshold(SVDx, init->warningThreshold);
/* 数字滤波 */
if(init->digitalFilter == FL_ENABLE)
{
FL_SVD_EnableDigitalFilter(SVDx);
}
else
{
FL_SVD_DisableDigitalFilter(SVDx);
}
/* 工作模式 */
FL_SVD_SetWorkMode(SVDx, init->workMode);
if(init->workMode == FL_SVD_WORK_MODE_PERIODIC)
{
/* 间歇使能间隔 */
FL_SVD_SetEnablePeriod(SVDx, init->enablePeriod);
}
/* SVS通道 */
if(init->SVSChannel == FL_ENABLE)
{
FL_SVD_EnableSVSChannel(SVDx);
}
else
{
FL_SVD_DisableSVSChannel(SVDx);
}
return FL_PASS;
}
/**
* @brief SVD_InitStruct
* @param init @ref FL_SVD_InitTypeDef类型的结构体
*
* @retval None
*/
void FL_SVD_StructInit(FL_SVD_InitTypeDef *init)
{
init->referenceVoltage = FL_SVD_REFERENCE_1P0V;
init->SVSChannel = FL_DISABLE;
init->digitalFilter = FL_DISABLE;
init->workMode = FL_SVD_WORK_MODE_CONTINUOUS;
init->enablePeriod = FL_SVD_ENABLE_PERIOD_62P5MS;
init->warningThreshold = FL_SVD_WARNING_THRESHOLD_GROUP0;
}
/**
* @}
*/
#endif /* FL_SVD_DRIVER_ENABLED */
/**
* @}
*/
/**
* @}
*/
/********************** (C) COPYRIGHT Fudan Microelectronics **** END OF FILE ***********************/