//电量检测
static adc_Cfg_t adc_cfg =
{
.channel = ADC_BIT(ADC_CH2N_P24),
.is_continue_mode = FALSE,
.is_differential_mode = 0x00,
.is_high_resolution = 0x00,
};
//电池检测回调函数
void adc_evt(adc_Evt_t* pev)
{
// LOG("adc_evt\n");
if((pev->type != HAL_ADC_EVT_DATA) || (pev->ch < 2))
return;
uint16_t value =1000* hal_adc_value_cal(ADC_CH2N_P24,pev->data, pev->size, FALSE,FALSE);
LOG("P24 %d mv \n",value);
if(adc_cfg.is_continue_mode == FALSE)
{
osal_start_timerEx(key_TaskID, KEY_DEMO_BATTERY_WHILE,2000);
}
}
//电池 ADC初始化
void Battery_ADC_Init()
{
int ret = hal_adc_config_channel(adc_cfg, adc_evt);
if(ret)
{
LOG("Battery_ADC_Init ret = %d\n",ret);
return;
}
hal_adc_start(INTERRUPT_MODE);
}
在任务表里添加任务。
uint16 Key_ProcessEvent( uint8 task_id, uint16 events )
{
if(task_id != key_TaskID)
{
return 0;
}
//。。。。。
//电池电量检测任务
if( events & KEY_DEMO_BATTERY_WHILE)
{
Battery_ADC_Init();
return (events ^ KEY_DEMO_BATTERY_WHILE);
}
return 0;
}
在初始化函数中调用这个任务
void Key_Demo_Init(uint8 task_id)
{
key_TaskID = task_id;
//......
//电池电量检测任务
osal_start_timerEx( key_TaskID, KEY_DEMO_BATTERY_WHILE, 100);
}
还有一个最重要的地方,在main.c中添加hal_adc_init();函数,
static void hal_init(void)
{
hal_low_power_io_init();
clk_init(g_system_clk); //system init
hal_rtc_clock_config((CLK32K_e)g_clk32K_config);
hal_pwrmgr_init();
xflash_Ctx_t cfg =
{
.rd_instr = XFRD_FCMD_READ_DUAL
};
hal_spif_cache_init(cfg);
LOG_INIT();
hal_gpio_init();
hal_adc_init();
}
不让会报ret =18的错。 PPlus_ERR_NOT_REGISTED
#define PPlus_ERR_NOT_REGISTED (18) /*not registed*/