#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