55 lines
1.5 KiB
C
55 lines
1.5 KiB
C
/*
|
||
* bsp_adc.c
|
||
*
|
||
* Created on: 2024年11月29日
|
||
* Author: 123
|
||
*/
|
||
#include "bsp_adc.h"
|
||
#include "CONFIG.h"
|
||
|
||
signed short RoughCalib_Value = 0; // ADC粗调偏差值
|
||
static tmosTaskID vbat_task_id = INVALID_TASK_ID;
|
||
void VBAT_ADC_Init(void)
|
||
{
|
||
//ADC_CTRL
|
||
GPIOA_SetBits(GPIO_Pin_0);
|
||
GPIOA_ModeCfg(GPIO_Pin_0, GPIO_ModeOut_PP_5mA);
|
||
|
||
//ADC初始化
|
||
/* 单通道采样:选择adc通道8做采样,对应 PA1引脚, 带数据校准功能 */
|
||
GPIOA_ModeCfg(GPIO_Pin_1, GPIO_ModeIN_Floating);
|
||
// 采样率最高8M
|
||
ADC_ExtSingleChSampInit(SampleFreq_8_or_4, ADC_PGA_1_2);
|
||
|
||
RoughCalib_Value = ADC_DataCalib_Rough(); // 用于计算ADC内部偏差,记录到全局变量 RoughCalib_Value中
|
||
PRINT("RoughCalib_Value =%d \n", RoughCalib_Value);
|
||
|
||
ADC_ChannelCfg(8);
|
||
ADC_ExcutSingleConver();//时间足够时建议再次转换并丢弃首次ADC数据
|
||
DelayMs(10);
|
||
}
|
||
|
||
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_ChannelCfg(8);
|
||
adc_vbat = ADC_ExcutSingleConver() + RoughCalib_Value;
|
||
PRINT("adc_vbat =%d \n", adc_vbat);
|
||
vbat = (adc_vbat/1024.0-1)*1.05;
|
||
PRINT("vbat =%f \n", vbat);
|
||
tmos_start_task(vbat_task_id, VBAT_EVT_START, MS1_TO_SYSTEM_TIME(1000));
|
||
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);
|
||
}
|