Files
AC707N/SDK/interface/driver/cpu/periph/gpadc.h
T
2025-12-03 11:12:34 +08:00

148 lines
4.2 KiB
C

#ifndef __GPADC_H__
#define __GPADC_H__
#include "asm/gpadc_hw.h"
enum AD_MODE {
AD_MODE_DEFAULT, //普通模式,存储在队列中为原始值
AD_MODE_VOLTAGE, //电压模式,存储在队列中为电压值
};
enum BATTERY_MODE {
MEAN_FILTERING_MODE = 0, //均值滤波
WEIGHTING_MODE = 1, //加权求值
};
//以下为用户常用api
/**@brief 获取指定通道原始值,从队列中获取
* @param[in] ch 指定通道
* @return value 原始值,范围根据采样精度变化
*/
u32 adc_get_value(enum AD_CH ch);
/**@brief 获取指定通道电压值,从队列中获取
* @param[in] ch 指定通道
* @return voltage 电压值, 单位:mv
*/
u32 adc_get_voltage(enum AD_CH ch);
/**@brief 将原始值换算为电压值
* @param[in] adc_vbg VBG原始值
* @param[in] adc_value 需要换算的原始值
* @return voltage 换算得到的电压值, 单位:mv
*/
u32 adc_value_to_voltage(u32 adc_vbg, u32 adc_value);
/**@brief 阻塞式采集指定通道原始值,采集一次
* @param[in] ch 指定通道
* @return value 原始值,范围根据采样精度变化
*/
u32 adc_get_value_blocking(enum AD_CH ch);
/**@brief 阻塞式采集指定通道原始值,采集 sample_times次, 求平均值
* @param[in] ch 指定通道
* @param[in] sample_times 采样次数
* @return value 原始值,范围根据采样精度变化
*/
u32 adc_get_value_blocking_filter(enum AD_CH ch, u32 sample_times);
/**@brief 阻塞式采集指定通道电压值,采集一次
* @param[in] ch 指定通道
* @return voltage 电压值, 单位:mv
*/
u32 adc_get_voltage_blocking(enum AD_CH ch);
/**@brief 阻塞式采集指定通道电压值,采集 sample_times次, 求平均值
* @param[in] ch 指定通道
* @param[in] sample_times 采样次数
* @return voltage 电压值, 单位:mv
*/
u32 adc_get_voltage_blocking_filter(enum AD_CH ch, u32 sample_times);
/**@brief 将IO通道转换为合法的AD通道 如:传入IO_PORTA_00, 返回AD_CH_IO_PA0
* @param[in] gpio IO通道
* @return ch 合法的AD通道
*/
u32 adc_io2ch(int gpio);
/**@brief 添加指定通道到队采样队列中
* @param[in] ch 指定通道
* @return num 通道在队列中的编号
*/
u32 adc_add_sample_ch(enum AD_CH ch);
/**@brief 从队采样队列中删除指定通道
* @param[in] ch 指定通道
* @return num 通道在队列中的编号
*/
u32 adc_delete_ch(enum AD_CH ch);
/**@brief 设置指定通道的采样周期
* @param[in] ch 指定通道
* @param[in] ms 采样周期,单位:ms
* @return num 通道在队列中的编号
*/
u32 adc_set_sample_period(enum AD_CH ch, u32 ms);
/**@brief 设置指定通道的采样模式,初始化时设置,采样中设置需调用adc_reset刷新队列数据
* @param[in] ch 指定通道
* @param[in] mode 采样模式, 1:电压模式,队列中存储为电压值,单位:mv; 0:普通模式,队列中存储为原始值
* @return num 通道在队列中的编号
*/
u32 adc_set_voltage_mode(enum AD_CH ch, enum AD_MODE mode);
//以上为用户常用api
/**@brief ADC模块初始化
* @param[in] 无
* @return 无
*/
void adc_init(void);
/**@brief 触发一次adc队列采集,定时调用
* @param[in] 无
* @return 无
*/
void adc_scan(void *priv);
/**@brief ADC模块复位,将已注册的通道全部刷新一次
* @param[in] 无
* @return 无
*/
void adc_refresh(void);
/**@brief 打印ADC相关所有信息
* @param[in] 无
* @return 无
*/
void adc_dump(void);
/**@brief 获取电池电压
* @param[in] 无
* @return 电池电压值,单位:mv 注意:底层已做换算,不需要乘以倍数
*/
u32 gpadc_battery_get_voltage();
/**@brief 电池电压fifo 刷新
* @param[in] 无
* @return 无
*/
void gpadc_battery_refresh();
/**@brief 电池电压采集初始化
* @param[in] 无
* @return 0
*/
int gpadc_battery_init();
/**@brief 电池电压原始数据采集补偿
* @param[in] offset 补偿值
* @return 0
*/
void gpadc_battery_set_offset(int offset);
//兼容老版本芯片
u32 adc_check_vbat_lowpower();
#endif