PHY6252 ADC应用

//电量检测
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*/

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值