current_v/Drivers/FM33LG0xx_FL_Driver/Src/fm33lg0xx_fl_dac.c

200 lines
6.7 KiB
C
Raw Permalink Normal View History

2025-12-31 08:21:43 +08:00
/**
****************************************************************************************************
* @file fm33lg0xx_fl_dac.c
* @author FMSH Application Team
* @brief Src file of DAC 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 DAC
* @{
*/
#ifdef FL_DAC_DRIVER_ENABLED
/* Private macros ------------------------------------------------------------*/
/** @addtogroup DAC_FL_Private_Macros
* @{
*/
#define IS_FL_DAC_INSTANCE(INSTANCE) ((INSTANCE) == DAC)
#define IS_FL_DAC_TRIGGERMODE(__VALUE__) (((__VALUE__) == FL_DISABLE)||\
((__VALUE__) == FL_ENABLE))
#define IS_FL_DAC_TRIGGE_SOURCE(__VALUE__) (((__VALUE__) == FL_DAC_TRGI_SOFTWARE)||\
((__VALUE__) == FL_DAC_TRGI_ATIM)||\
((__VALUE__) == FL_DAC_TRGI_GPTIM1)||\
((__VALUE__) == FL_DAC_TRGI_GPTIM2)||\
((__VALUE__) == FL_DAC_TRGI_BSTIM16)||\
((__VALUE__) == FL_DAC_TRGI_LPTIM16)||\
((__VALUE__) == FL_DAC_TRGI_EXTI0)||\
((__VALUE__) == FL_DAC_TRGI_EXTI4)||\
((__VALUE__) == FL_DAC_TRGI_EXTI8)||\
((__VALUE__) == FL_DAC_TRGI_EXTI12))
#define IS_FL_DAC_SAMPLEHOLDMODE(__VALUE__) (((__VALUE__) == FL_DISABLE)||\
((__VALUE__) == FL_ENABLE))
#define IS_FL_DAC_HOLD_TIME(__VALUE__) (((__VALUE__) <= 0XFFFF))
#define IS_FL_DAC_SAMPLE_TIME(__VALUE__) (((__VALUE__) <= 0XFF))
#define IS_FL_DAC_BUFFERMODE(__VALUE__) (((__VALUE__) == FL_DISABLE)||\
((__VALUE__) == FL_ENABLE))
#define IS_FL_DAC_SWITCHMODE(__VALUE__) (((__VALUE__) == FL_DISABLE)||\
((__VALUE__) == FL_ENABLE))
#define IS_FL_DAC_DMAMODE(__VALUE__) (((__VALUE__) == FL_DISABLE)||\
((__VALUE__) == FL_ENABLE))
/**
* @}
*/
/* Exported functions --------------------------------------------------------*/
/** @addtogroup CRC_FL_EF_Init
* @{
*/
/**
* @brief DAC入口地址寄存器为默认值
*
* @param DACx
*
* @retval ErrorStatus枚举值
* -FL_FAIL
* -FL_PASS DAC配置成功
*/
FL_ErrorStatus FL_DAC_DeInit(DAC_Type *DACx)
{
FL_ErrorStatus status = FL_PASS;
/* 入口合法性检查 */
assert_param(IS_FL_DAC_INSTANCE(DACx));
/* 外设复位使能 */
FL_RMU_EnablePeripheralReset(RMU);
FL_RMU_EnableResetAPBPeripheral(RMU, FL_RMU_RSTAPB_DAC);
FL_RMU_DisableResetAPBPeripheral(RMU, FL_RMU_RSTAPB_DAC);
FL_RMU_DisablePeripheralReset(RMU);
return status;
}
/**
* @brief DACx指定的入口地址的外设寄存器
* @param DACx
* @param DAC_InitStruct FL_DAC_InitTypeDef结构体DAC外设的配置信息
*
* @retval ErrorStatus枚举值
* -FL_FAIL
* -FL_PASS DAC配置成功
*/
FL_ErrorStatus FL_DAC_Init(DAC_Type *DACx, FL_DAC_InitTypeDef *DAC_InitStruct)
{
FL_ErrorStatus status = FL_PASS;
/* 入口合法性检查 */
assert_param(IS_FL_DAC_INSTANCE(DACx));
assert_param(IS_FL_DAC_TRIGGERMODE(DAC_InitStruct->triggerMode));
assert_param(IS_FL_DAC_TRIGGE_SOURCE(DAC_InitStruct->triggerSource));
assert_param(IS_FL_DAC_SAMPLEHOLDMODE(DAC_InitStruct->sampleHoldMode));
assert_param(IS_FL_DAC_HOLD_TIME(DAC_InitStruct->holdTime));
assert_param(IS_FL_DAC_SAMPLE_TIME(DAC_InitStruct->sampleTime));
assert_param(IS_FL_DAC_BUFFERMODE(DAC_InitStruct->bufferMode));
assert_param(IS_FL_DAC_SWITCHMODE(DAC_InitStruct->switchMode));
FL_RMU_EnablePeripheralReset(RMU);
FL_RMU_EnableResetAPBPeripheral(RMU, FL_RMU_RSTAPB_DAC);
FL_RMU_DisableResetAPBPeripheral(RMU, FL_RMU_RSTAPB_DAC);
FL_RMU_DisablePeripheralReset(RMU);
FL_CMU_EnableGroup2BusClock(FL_CMU_GROUP2_BUSCLK_DAC);
FL_DAC_Disable(DACx);
if(FL_DAC_IsEnabled(DACx) == 0U)
{
/* 采样保持使能配置 */
if(DAC_InitStruct->sampleHoldMode)
{
FL_DAC_WriteSamplingTime(DACx, DAC_InitStruct->sampleTime);
FL_DAC_WriteHoldingTime(DACx, DAC_InitStruct->holdTime);
FL_DAC_EnableSampleHoldMode(DACx);
}
else
{ FL_DAC_DisableSampleHoldMode(DACx); }
/* 触发模式使能配置 */
if(DAC_InitStruct->triggerMode)
{
FL_DAC_SetTriggerSource(DACx, DAC_InitStruct->triggerSource);
FL_DAC_EnableTriggerMode(DACx);
}
else
{ FL_DAC_DisableTriggerMode(DACx); }
/* buffer使能配置 */
if(DAC_InitStruct->bufferMode)
{ FL_DAC_EnableOutputBuffer(DACx); }
else
{ FL_DAC_DisableOutputBuffer(DACx); }
/* SWITCH使能配置 */
if(DAC_InitStruct->switchMode)
{ FL_DAC_EnableFeedbackSwitch(DACx); }
else
{ FL_DAC_DisableFeedbackSwitch(DACx); }
}
else
{
status = FL_FAIL;
}
return status;
}
/**
* @brief DAC_InitStruct
* @param DAC_InitStruct @ref FL_DAC_InitTypeDef
*
* @retval None
*/
void FL_DAC_StructInit(FL_DAC_InitTypeDef *DAC_InitStruct)
{
DAC_InitStruct->bufferMode = FL_ENABLE;
DAC_InitStruct->switchMode = FL_ENABLE;
DAC_InitStruct->triggerMode = FL_DISABLE;
DAC_InitStruct->triggerSource = FL_DAC_TRGI_SOFTWARE;
DAC_InitStruct->sampleHoldMode = FL_DISABLE;
DAC_InitStruct->sampleTime = 0xFF;
DAC_InitStruct->holdTime = 0X0;
}
/**
* @}
*/
#endif /* FL_DAC_DRIVER_ENABLED */
/**
* @}
*/
/**
* @}
*/
/********************** (C) COPYRIGHT Fudan Microelectronics **** END OF FILE ***********************/