W801_SDK_dev_env/demo/wm_adc_demo.c
2023-03-08 08:23:45 +01:00

172 lines
2.9 KiB
C

/*****************************************************************************
*
* File Name : wm_adc_demo.c
*
* Description: adc demo function
*
* Copyright (c) 2014 Winner Micro Electronic Design Co., Ltd.
* All rights reserved.
*
* Author : dave
*
* Date : 2014-8-18
*****************************************************************************/
#include "wm_include.h"
#include "wm_adc.h"
#include "wm_gpio_afsel.h"
#if DEMO_ADC
#define TMAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
#define TMACSTR "%02x:%02x:%02x:%02x:%02x:%02x"
int adc_input_voltage_cal_demo(u8 chan, signed short refvoltage)
{
int ret =0;
u8 mac[6];
tls_get_mac_addr(mac);
printf("Mac["TMACSTR"],Cch[%d], Refvol[%d] ", TMAC2STR(mac), chan, refvoltage);
ret = adc_offset_calibration(chan, refvoltage);
if (ret == 0)
{
printf("Calok ");
}
else
{
printf("Calerr \r\n");
return 0;
}
int voltage =0;
int i =0 ;
for (i = 0; i < 4; i++)
{
if (i != chan)
{
wm_adc_config(i);
voltage = adc_get_inputVolt(i);
printf("Mch[%d]-%d(mV) ", i, voltage);
}
}
printf("\r\n");
return 0;
}
int adc_input_voltage_multipoint_cal_demo(int chanused,int chan0ref, int chan1ref, int chan2ref, int chan3ref)
{
int ret =0;
u8 mac[6];
int refvol[4] = {chan0ref, chan1ref, chan2ref, chan3ref};
tls_get_mac_addr(mac);
printf("Mac["TMACSTR"],", TMAC2STR(mac));
for (int i = 0; i < 4; i++)
{
if (chanused&(1<<i))
{
printf("ch[%d], refvol[%d] ", i, refvol[i]);
}
}
ret = adc_multipoint_calibration(chanused, refvol);
if (ret == 0)
{
printf("Calok \r\n");
}
else
{
printf("Calerr \r\n");
return 0;
}
int voltage =0;
int i =0 ;
for (i = 0; i < 2; i++)
{
wm_adc_config(i);
voltage = adc_get_inputVolt(i);
printf("Mch[%d]-%d(mV) \r\n", i, voltage);
}
return 0;
}
int adc_input_voltage_demo(u8 chan)
{
int voltage =0;
if (chan < 4)
{
wm_adc_config(chan);
}
else if (chan == 8 )
{
wm_adc_config(0);
wm_adc_config(1);
}
else if (chan == 9)
{
wm_adc_config(2);
wm_adc_config(3);
}
else
{
return -1;
}
voltage = adc_get_inputVolt(chan);
if (voltage < 0)
{
voltage = 0 - voltage;
printf("chan:%d, -%d(mV) or -%d.%03d(V)\r\n", chan, voltage, voltage/1000, voltage%1000);
}
else
{
printf("chan:%d, %d(mV) or %d.%03d(V)\r\n", chan, voltage, voltage/1000, voltage%1000);
}
return 0;
}
int adc_chip_temperature_demo(void)
{
char temperature[8] = {0};
int temp;
temp = adc_temp();
if (temp < 0)
{
temp = 0 - temp;
sprintf(temperature, "-%d.%03d", temp/1000, temp%1000);
}
else
{
sprintf(temperature, "%d.%03d", temp/1000, temp%1000);
}
printf("tem: %s\r\n", temperature);
return 0;
}
int adc_power_voltage_demo(void)
{
int voltage =0;
voltage = adc_get_interVolt();
printf("Power voltage:%d(mV) or %d.%03d(V)\r\n",voltage, voltage/1000, voltage%1000);
return 0;
}
#endif