136 lines
3.6 KiB
C
136 lines
3.6 KiB
C
/************************************************************************************************/
|
||
/**
|
||
* @file ciu32l051_std_adc.c
|
||
* @author MCU Ecosystem Development Team
|
||
* @brief ADC STD库驱动。
|
||
* 实现ADC初始化配置等功能API。
|
||
*
|
||
*
|
||
**************************************************************************************************
|
||
* @attention
|
||
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
|
||
*
|
||
**************************************************************************************************
|
||
*/
|
||
|
||
/************************************************************************************************/
|
||
/**
|
||
* @addtogroup CIU32L051_STD_Driver
|
||
* @{
|
||
*/
|
||
|
||
/**
|
||
* @addtogroup ADC
|
||
* @{
|
||
*
|
||
*/
|
||
/************************************************************************************************/
|
||
|
||
|
||
/*-------------------------------------------includes-------------------------------------------*/
|
||
#include "ciu32l051_std.h"
|
||
|
||
#ifdef STD_ADC_PERIPHERAL_USED
|
||
|
||
/*-------------------------------------------functions------------------------------------------*/
|
||
|
||
/************************************************************************************************/
|
||
/**
|
||
* @addtogroup ADC_External_Functions
|
||
* @{
|
||
*
|
||
*/
|
||
/************************************************************************************************/
|
||
|
||
|
||
/**
|
||
* @brief ADC初始化
|
||
* @param adc_init_param ADC初始化结构体
|
||
* @note 若ADC时钟源配置为异步时钟,则需要在std_adc_init外部配置ADC异步时钟源
|
||
* @retval 无
|
||
*/
|
||
void std_adc_init(std_adc_init_t *adc_init_param)
|
||
{
|
||
/* 时钟源配置 */
|
||
std_adc_clock_source_config(adc_init_param->clock_src);
|
||
/* 异步时钟分频配置 */
|
||
if(adc_init_param->clock_src == ADC_ASYNC_CLK_KCLK)
|
||
{
|
||
std_adc_asynchronous_clock_config(adc_init_param->clock_presc);
|
||
}
|
||
|
||
if(adc_init_param->trigger_edge != ADC_TRIG_SW)
|
||
{
|
||
/* 配置外部触发源 */
|
||
std_adc_external_trig_source_config(adc_init_param->trigger_source);
|
||
/* 触发方式和极性配置 */
|
||
std_adc_trig_edge_config(adc_init_param->trigger_edge);
|
||
}
|
||
else
|
||
{
|
||
/* 配置软件触发方式 */
|
||
std_adc_trig_edge_config(adc_init_param->trigger_edge);
|
||
}
|
||
/* 转换模式配置 */
|
||
std_adc_conversion_mode_config(adc_init_param->conver_mode);
|
||
/* 采样时间参数1配置 */
|
||
std_adc_sampt1_time_config(adc_init_param->sampt1);
|
||
/* 采样时间参数2配置 */
|
||
std_adc_sampt2_time_config(adc_init_param->sampt2);
|
||
/* 数据溢出管理 */
|
||
std_adc_ovrn_mode_config(adc_init_param->overrun_mode);
|
||
/* 扫描方向配置 */
|
||
std_adc_scan_direction_config(adc_init_param->scan_dir);
|
||
}
|
||
|
||
|
||
/**
|
||
* @brief ADC结构体初始化
|
||
* @param adc_init_struct ADC初始化结构体
|
||
* @retval 无
|
||
*/
|
||
void std_adc_struct_init(std_adc_init_t *adc_init_struct)
|
||
{
|
||
adc_init_struct->clock_src = ADC_SYNC_CLK_PCLK_DIV1;
|
||
adc_init_struct->clock_presc = ADC_ASYNC_CLK_DIV1;
|
||
adc_init_struct->conver_mode = ADC_SINGLE_CONVER_MODE;
|
||
adc_init_struct->overrun_mode = ADC_OVRN_MODE_OVERWRITTEN;
|
||
adc_init_struct->sampt1 = ADC_SAMPTIME_3CYCLES;
|
||
adc_init_struct->sampt2 = ADC_SAMPTIME_3CYCLES;
|
||
adc_init_struct->scan_dir = ADC_SCAN_DIR_FORWARD;
|
||
adc_init_struct->trigger_edge = ADC_TRIG_SW;
|
||
adc_init_struct->trigger_source = ADC_EXTRIG_EXTI11;
|
||
}
|
||
|
||
|
||
/**
|
||
* @brief ADC去初始化
|
||
* @note 执行去初始化前应停止转换
|
||
* @retval 无
|
||
*/
|
||
void std_adc_deinit(void)
|
||
{
|
||
/* 禁止ADC */
|
||
std_adc_disable();
|
||
/* 复位ADC外设 */
|
||
std_rcc_apb2_reset(RCC_PERIPH_RESET_ADC);
|
||
|
||
/* 禁止ADC外设时钟 */
|
||
std_rcc_apb2_clk_disable(RCC_PERIPH_CLK_ADC);
|
||
}
|
||
|
||
|
||
/**
|
||
* @}
|
||
*/
|
||
|
||
#endif /* STD_ADC_PERIPHERAL_USED */
|
||
|
||
/**
|
||
* @}
|
||
*/
|
||
|
||
/**
|
||
* @}
|
||
*/
|