这里主要是分析一下充电插拔的处理,以及电池电量的监测的逻辑
初始化流程
/* 初始化流程 */
app_init
app_battery_open
/* 创建电池电量检测定时器 */
osTimerCreate (osTimer(APP_BATTERY), ...)
/* 创建插拨防抖的定时器 */
osTimerCreate (osTimer(APP_BATTERY_PLUGINOUT_DEBOUNCE), ...);
/*注册app线程中APP_MODUAL_BATTERY模块的消息处理函数*/
app_set_threadhandle(APP_MODUAL_BATTERY, app_battery_handle_process);
/* 注册中断处理函数 */
app_battery_charger_indication_open
pmu_charger_set_irq_handler(app_battery_charger_handler);
/* 初始化io口 */
hal_iomux_init(&app_battery_ext_charger_detecter_cfg,...
hal_iomux_init(&app_battery_ext_charger_enable_cfg,...
/* 启动电池电量管理的定时器 */
app_battery_start
当有插拔事件时
/* 当usb有插拔时触发中断 */
app_battery_charger_handler
/*发APP_BATTERY_STATUS_PLUGINOUT状态给到app线程,最终由 app_battery_handle_process 回调函数处理*/
app_battery_event_process
/*app线程中APP_MODUAL_BATTERY模块消息回调函数*/
app_battery_handle_process
APP_BATTERY_GET_STATUS(msg_body->message_id, status);
/* 上面触发的插拔中断发送的消息,在这里处理 */
if(status == APP_BATTERY_STATUS_PLUGINOUT)
/* 启动防抖定时器 */
app_battery_pluginout_debounce_start
/* 定时器的回调函数 */
app_battery_pluginout_debounce_handler
/* 启动3(次)*50ms之后,发消息将插入状态给到线程处理*/
/* 最终处理结果为app_battery_measure.status设置为APP_BATTERY_STATUS_CHARGING */
app_battery_event_process(APP_BATTERY_STATUS_CHARGING, status_charger);
else/* 正常使用和充电状态的其他消息*/
switch (app_battery_measure.status)
case APP_BATTERY_STATUS_NORMAL
/* 电池正常使用时的处理函数 */
app_battery_handle_process_normal
case APP_BATTERY_STATUS_CHARGING
/* 电池充电状态下的处理函数*/
app_battery_handle_process_charging
电池电量监测
/* 电池电量管理定时器回调函数,开机之后就会启动 */
app_battery_timer_handler
/* 启动adc检测,并设置adc中断处理函数 */
hal_gpadc_open(..., app_battery_irqhandler);
/* adc检测中断函数,*/
app_battery_irqhandler
/* 更新电池电量,通过app_battery_measure.cb实际指向app_battery_event_process*/
/* 将电量信息发给app_battery_handle_process处理,处理完之后会重新启动该定时器*/
app_battery_measure.cb->app_battery_event_process
相关资料请到<bes2300开发调试笔记>文章底部的网盘链接中下载!