IoT_SCV_CH584M/bsp/src/bsp_adc.c

58 lines
1.5 KiB
C
Raw Normal View History

2024-12-11 16:21:57 +08:00
/*
* bsp_adc.c
*
* Created on: 2024<EFBFBD><EFBFBD>11<EFBFBD><EFBFBD>29<EFBFBD><EFBFBD>
* Author: 123
*/
#include "bsp_adc.h"
#include "CONFIG.h"
#include "log.h"
signed short RoughCalib_Value = 0; // ADC<44>ֵ<EFBFBD>ƫ<EFBFBD><C6AB>ֵ
static tmosTaskID vbat_task_id = INVALID_TASK_ID;
void VBAT_ADC_Init(void)
{
//ADC<44><43>ʼ<EFBFBD><CABC>
/* <20><>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>adcͨ<63><CDA8>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ PA4<41><34><EFBFBD>ţ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У׼<D0A3><D7BC><EFBFBD><EFBFBD> */
GPIOA_ModeCfg(GPIO_Pin_4, GPIO_ModeIN_Floating);
2024-12-11 16:21:57 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8M
ADC_ExtSingleChSampInit(SampleFreq_8_or_4, ADC_PGA_1_2);
RoughCalib_Value = ADC_DataCalib_Rough(); // <20><><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD>ADC<44>ڲ<EFBFBD>ƫ<EFBFBD><EFBFBD><EEA3AC>¼<EFBFBD><C2BC>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD> RoughCalib_Value<75><65>
logDebug("RoughCalib_Value =%d \n", RoughCalib_Value);
ADC_ChannelCfg(0);
2024-12-11 16:21:57 +08:00
ADC_ExcutSingleConver();//ʱ<><CAB1><EFBFBD>㹻ʱ<E3B9BB><CAB1><EFBFBD><EFBFBD><EFBFBD>ٴ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״<EFBFBD>ADC<44><43><EFBFBD><EFBFBD>
DelayMs(10);
}
void ADC_GPIO_Init(void)
{
GPIOA_ModeCfg(GPIO_Pin_4, GPIO_ModeIN_Floating);
}
2024-12-11 16:21:57 +08:00
uint16_t VBAT_ProcessEvent(uint8_t task_id, uint16_t events)
{
if (events & VBAT_EVT_START)
{
uint16_t adc_vbat = 0;
float vbat = 0;
ADC_GPIO_Init();
2024-12-11 16:21:57 +08:00
ADC_ChannelCfg(0);
2024-12-11 16:21:57 +08:00
adc_vbat = ADC_ExcutSingleConver() + RoughCalib_Value;
logDebug("adc_vbat =%d \n", adc_vbat);
vbat = (adc_vbat/1024.0-1)*1.05;
logDebug("vbat =%f \n", vbat);
tmos_start_task(vbat_task_id, VBAT_EVT_START, MS1_TO_SYSTEM_TIME(1000*60));
2024-12-11 16:21:57 +08:00
return (events ^ VBAT_EVT_START);
}
return 0;
}
void BSP_VBAT_Init(void)
{
VBAT_ADC_Init();
vbat_task_id = TMOS_ProcessEventRegister(VBAT_ProcessEvent);
tmos_set_event(vbat_task_id, VBAT_EVT_START);
}