2025-04-08 18:46:12 +08:00

84 lines
1.7 KiB
C

#include "error.h"
#include "include.h"
#include <rthw.h>
#include <rtthread.h>
#include <rtdevice.h>
#include <stdint.h>
#include <stdlib.h>
#include <finsh.h>
#include <rtdef.h>
//#define SARADC_VBAT_DETECT 1
#if ((SARADC_VBAT_DETECT == 1) && (CFG_SARADC_INTFACE == 1))
#include "saradc_intf.h"
#include "sys_ctrl_pub.h"
#define ADC_CHANNEL0_VBAT 0
#define ADC_CHANNEL1_P4 1
#define ADC_CHANNEL2_P5 2
#define ADC_CHANNEL3_P23 3
#define ADC_CHANNEL4_P2 4
#define ADC_CHANNEL5_P3 5
#define ADC_CHANNEL6_P12 6
#define ADC_CHANNEL7_P13 7
#define VBAT_COUNT_NUMBER (500)
typedef struct _vbat_detect_ {
int tmp_vol;
int mean_vol;
int detect_cnt;
} VBAT_DETECT_ST;
static ADC_OBJ vbat;
static VBAT_DETECT_ST vbat_det_st;
extern int Step_Flag;
extern int Adctest_Flag ;
//channe vbat
static void vbat_adc_detect_callback(int new_mv, void *user_data)
{
VBAT_DETECT_ST *vbat = (VBAT_DETECT_ST *)user_data;
static int cnt = 0;
if(vbat_det_st.detect_cnt++ <= VBAT_COUNT_NUMBER)
{
return ;
}
new_mv = new_mv << 1;//for vbat channel,need to *2
vbat_det_st.tmp_vol += new_mv;
if(cnt ++ >=100)
{
vbat->mean_vol = vbat_det_st.tmp_vol/cnt;
cnt = 0;
vbat_det_st.detect_cnt = 0;
rt_kprintf("---vbat voltage:%d---\r\n",vbat->mean_vol);
vbat_det_st.tmp_vol = 0;
}
}
static void vbat_detect_config(void)
{
vbat_det_st.tmp_vol = 0;
vbat_det_st.mean_vol = 0;
vbat_det_st.detect_cnt = 0;
adc_obj_init(&vbat, vbat_adc_detect_callback,ADC_CHANNEL0_VBAT, &vbat_det_st);
adc_obj_start(&vbat);
}
int vbat_detect_test(void)
{
Step_Flag = 1;
Adctest_Flag = 1;
saradc_work_create();
vbat_detect_config();
return 0;
}
//INIT_APP_EXPORT(vbat_detect_test);
MSH_CMD_EXPORT(vbat_detect_test,vbat_detect_test);
#endif