200 lines
6.7 KiB
C
200 lines
6.7 KiB
C
/**
|
||
****************************************************************************************************
|
||
* @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 ***********************/
|
||
|
||
|