current_v/Drivers/FM33LG0xx_FL_Driver/Src/fm33lg0xx_fl_dac.c
2025-12-31 08:21:43 +08:00

200 lines
6.7 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_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 ***********************/