微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > 在BMT.C中模拟一个充电器的插入时,发一个BMT_sendMes2UEM(BMT_USB_CHARGER_IN),...

在BMT.C中模拟一个充电器的插入时,发一个BMT_sendMes2UEM(BMT_USB_CHARGER_IN),...

时间:10-02 整理:3721RD 点击:
回复超越无限 18:12:23

ROMan">

光辉,请问一下,在BMT.C中模拟一个充电器的插入时,发一个BMT_sendMes2UEM(BMT_USB_CHARGER_IN),为什么UEM层不接受此消息?  

回复光辉岁月—驱动 18:12:46

做双电池?  

回复超越无限 18:12:52

呵呵,是的  

超越无限 18:14:09

现在碰到一个问题,在副电池充满的情况切换到主电充电,图标切不过去  

回复光辉岁月—驱动 18:14:18

哦  

回复光辉岁月—驱动 18:14:47

#ifdef __DOUBLE_Battery__   

/*充电的过程中,拔出当前正在充电的电池时,就调用此函数*/

void Chring_battery_out(void)

{

if((Vbat2_Exist_First == KAL_FALSE) && (Vbat1_Exist_First == KAL_FALSE))

{

return ;

}

if(Vbat2_Exist_First == KAL_TRUE)

{/*电池1拔出,并且电池2是存在的*/

stack_stop_timer(&ChargeTimeout_timer);

      Use_Battery_Sel(Manual_Mode, battery2);     

g_chr.chring_battery = chring_battery2;

Send_Chr_battery_id(g_chr.chring_battery);

bmt_stop_stoptimer();

BMT_sendMes2UEM(PMIC_DOUBLE_BATTERY_CHARGER_IN);

bmt_charge_start();

}

if(Vbat1_Exist_First == KAL_TRUE)

{/*电池2拔出,并且电池1是存在的*/

stack_stop_timer(&ChargeTimeout_timer);

Use_Battery_Sel(Manual_Mode, battery1);     

g_chr.chring_battery = chring_battery1;

Send_Chr_battery_id(g_chr.chring_battery);

bmt_stop_stoptimer();

BMT_sendMes2UEM(PMIC_DOUBLE_BATTERY_CHARGER_IN);

bmt_charge_start();

}

}

#endif

回复光辉岁月—驱动 18:15:24

  #ifdef __DOUBLE_BATTERY__   

   if(Read_BATTERY_Sel() == use_battery2)

   {

   #ifdef __CHR_DEBUG__

kal_prompt_trace(MOD_BMT,"CHR_BATTERY == chr_battery2 Battery_Full");

#endif

   Chr_bat2_status=Battery_Full;

if(Vbat1_Exist_First == KAL_FALSE)

{/*当电池2充满后,电池1不存在*/

BMT.highfull = 1;

}

   }

   else if(Read_BATTERY_Sel() == use_battery1)

   {

   #ifdef __CHR_DEBUG__

kal_prompt_trace(MOD_BMT,"CHR_BATTERY == chr_battery1 Battery_Full");

#endif   

   Chr_bat1_status = Battery_Full;

if(Vbat2_Exist_First == KAL_FALSE)

{/*当电池1充满后,电池2不存在*/

BMT.highfull = 1;

}

   }

if((Chr_bat1_status == Battery_Full) && (Chr_bat2_status == Battery_Full))

{

/*两块电池都充满*/

   #ifdef __CHR_DEBUG__

kal_prompt_trace(MOD_BMT,"CHR_BATTERY == All_Battery_Full");

#endif

Use_Battery_Sel(Auto_Mode, battery2);     /*两块电板都充满电时,就切换到自动模式*/

BMT.highfull = 1;

/*这样只能在两个电池都充满时,才发送充满的消息*/  

//BMT_sendMes2UEM(BMT_CHARGE_COMPLETE);

#if 0

/*保证在充电器插入的情况下,能在次充电*/

Chr_bat1_status = Battery_Empty;

Chr_bat2_status = Battery_Empty;

#endif

}


else

{

/*在电池没有充过电时,且电量不低于2.5V时才可以去充电*/

if((Chr_bat1_status==Battery_Empty) && (Vbat1_Exist_First == KAL_TRUE))

{/*第一块电池启动充电*/

   #ifdef __CHR_DEBUG__

kal_prompt_trace(MOD_BMT,"Chr_bat1_status==Battery_Empty");

#endif

#ifdef __MTK_TARGET__

if(pmic_adpt_is_chr_valid())/*check if it's a valid charger*/

#endif //__MTK_TARGET__

{

BMT_sendMes2UEM(BMT_CHARGE_COMPLETE);

stack_stop_timer(&ChargeTimeout_timer);

Use_Battery_Sel(Manual_Mode, battery1);     

g_chr.chring_battery = chring_battery1;

Send_Chr_battery_id(g_chr.chring_battery);

bmt_stop_stoptimer();

BMT_sendMes2UEM(PMIC_DOUBLE_BATTERY_CHARGER_IN);

bmt_charge_start();

       kal_prompt_trace(MOD_BMT,"My AC IN and start charge!");   

return ;

}

}

else if((Chr_bat2_status==Battery_Empty) && (Vbat2_Exist_First == KAL_TRUE))

{/*第二块电池启动充电*/

   #ifdef __CHR_DEBUG__

kal_prompt_trace(MOD_BMT,"Chr_bat2_status==Battery_Empty");

#endif

#ifdef __MTK_TARGET__

if(pmic_adpt_is_chr_valid())/*check if it's a valid charger*/

#endif //__MTK_TARGET__

{  

BMT_sendMes2UEM(BMT_CHARGE_COMPLETE);

stack_stop_timer(&ChargeTimeout_timer);

Use_Battery_Sel(Manual_Mode, battery2);     

g_chr.chring_battery = chring_battery2;

Send_Chr_battery_id(g_chr.chring_battery);

bmt_stop_stoptimer();

BMT_sendMes2UEM(PMIC_DOUBLE_BATTERY_CHARGER_IN);

bmt_charge_start();

       kal_prompt_trace(MOD_BMT,"My AC IN and start charge!");         

return ;

}

}

}   

  #endif  //__DOUBLE_BATTERY__  

回复光辉岁月—驱动 18:15:38

以前写的,你参考一下  

超越无限 18:17:03
  
回复
超越无限 18:17:07
  
回复
光辉岁月—驱动 18:17:19
双电池很麻烦的
回复
超越无限 18:17:25
我先参考一下,多谢光辉
回复
光辉岁月—驱动 18:17:30
好的
回复
超越无限 18:17:38
是呀,做了10多天了
回复
光辉岁月—驱动 18:17:54
这个要MMI的一起做的
回复
光辉岁月—驱动 18:18:10
你要跟MMI说出你的思路,然后MMI配合一起做
回复
光辉岁月—驱动 18:18:39
而且和硬件关系很大,如果硬件没有设计很好,你会很难做的.
回复
超越无限 18:19:04
现在麻烦的是,我们只用了一个内部ADC和一个外部ADC
回复
超越无限 18:19:16
所以,永不断电是无法做了
回复
光辉岁月—驱动 18:19:42
这个还要看你的硬件了..以前我们做的,硬件上不可能做到不断电
回复
光辉岁月—驱动 18:19:56
有自动和手动功能
回复
光辉岁月—驱动 18:20:04
后来我们去掉了手动功能了
回复
超越无限 18:20:20
不断电应该要加中断才能完成,而且必须加个大电容
回复
光辉岁月—驱动 18:20:52
中断响应太慢了,我试过加1000UF的电容都没用的
回复
光辉岁月—驱动 18:20:55
还是会掉,  
回复光辉岁月—驱动 18:21:08  中断响应没有硬件响应快   回复光辉岁月—驱动 18:21:16  除非你是硬件切   回复超越无限 18:21:35  我们现在第二版打算加一个100U的电容   回复光辉岁月—驱动 18:21:49  没一点用,一样掉   回复光辉岁月—驱动 18:21:55  你不信可以试一下   回复超越无限 18:22:12  呵呵,硬件工程师说要ns级才行 我说中断至少也是us级   回复光辉岁月—驱动 18:22:12  如果不掉,你在打电话时,或是MP3时也还是会掉的   回复光辉岁月—驱动 18:22:19  是的,   回复光辉岁月—驱动 18:22:28  我们的MTK中断没有哪么快   回复光辉岁月—驱动 18:22:38  我当时想了很多方法都不行   回复光辉岁月—驱动 18:22:57  这个你们还是在硬件上想方法比较好

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top