在国内国外的TI的论坛查了一下这个问题 大家的解决方法都是
1) disable PM IO port by:
HCI_EXT_MapPmInOutPortCmd(HCI_EXT_PM_IO_PORT_NONE, HCI_EXT_PM_IO_PORT_PIN7)
2) Set P0.7 to low
3) Check battery with battMeasure()
4) Set P0.7 to high
5) Enable PM IO port by:
HCI_EXT_MapPmInOutPortCmd(HCI_EXT_PM_IO_PORT_P0, HCI_EXT_PM_IO_PORT_PIN7)
具体可以参考下面的几个链接
http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/30345.aspx
http://e2e.ti.com/support/wireless_connectivity/f/538/t/241961.aspx?pi310978=2
于是我修改了如下代码
if ( events & KFD_BATTERY_CHECK_EVT )
{
// Disable stack to toggle bypass control on TPS62730 (DC/DC converter)
HCI_EXT_MapPmIoPortCmd( HCI_EXT_PM_IO_PORT_NONE, HCI_EXT_PM_IO_PORT_PIN7 );
//Set P0.7 to low
P0 &= 0x7F;
// Restart timer
if ( BATTERY_CHECK_PERIOD )
{
osal_start_timerEx( keyfobapp_TaskID, KFD_BATTERY_CHECK_EVT, BATTERY_CHECK_PERIOD );
}
// perform battery level check
Batt_MeasLevel( );
//Set P0.7 to high
P0 |= 0x80;
// Enable stack to toggle bypass control on TPS62730 (DC/DC converter)
HCI_EXT_MapPmIoPortCmd( HCI_EXT_PM_IO_PORT_P0, HCI_EXT_PM_IO_PORT_PIN7 );
return (events ^ KFD_BATTERY_CHECK_EVT);
}
但是现在的问题是这样的, 不论我注不注释掉KeyFobApp_Init( uint8 task_id ) 中这段代码:
#if defined ( DC_DC_P0_7 )
// Enable stack to toggle bypass control on TPS62730 (DC/DC converter)
HCI_EXT_MapPmIoPortCmd( HCI_EXT_PM_IO_PORT_P0, HCI_EXT_PM_IO_PORT_PIN7 );
#endif // defined ( DC_DC_P0_7 )
显示的电量还是固定的百分之二十多。
但是只要注释掉上面这段代码 而其他地方不做任何修改 反而可以正常显示
在原理上理解了为什么会是一直百分之二十多 但是代码又不是这样的
不知道哪里出了问题
wenzhong shen:
这个是针对有TPS62730的稳压电源的电路的,具体是在电池电量测量时,首先旁路稳压芯片,用电池给cc2541供电,这样才能检测电池电压,测量完后禁止旁路稳压电源输出。P0.7是一个旁路控制引脚。
另外那个宏定义是说 如果你宏定义了DC_DC_P0_7,那么就将p.7分配成电源的旁路控制引脚。
spencer chen:
回复 wenzhong shen:
恩 多谢。
我也是这么理解的 可是如果不把这段宏定义注释掉 不论怎么更改程序 就还是显示百分之二十多的电量。
而只要注释掉了 不用改任何地方显示就是正确的
我是在想 为什么按照你的这个思路来修改程序不能正确检测到电池电量呢? 还是说我修改的程序有什么错误吗?