wince 电池问题。GetSystemPowerStatusEx2是获取都是0,电源属性里面 电池显示为充电,是怎么回事呢?
用GetSystemPowerStatusEx试试,
不会是你的电池驱动有问题?
没人顶啊,我自己顶一个。
刚跟硬件工程师聊了下,硬件是 电池 -》接在 AD转换模块,再接 -》CPU
cpu检测的是AD转换模块引脚接出来的电量信号,而不是电池 的电量。
而电池看起来是在给 AD转换模块充电
所以显示的是充电?
而CPU检测的是 3.3V的电压,所以显示电池电量高
那么为什么我用GetSystemPowerStatusEx2是获取都是0呢?
用GetSystemPowerStatusEx 也不行
GetSystemPowerStatusEx2()的函数返回值正确吗?
可能是驱动的问题,不过也只是可能!
最终放弃了使用API,用以下代码实现电量采样:
//电量采样
#define ADC_FREQ 2500000 //频率
#define PCLK 50700000 //频率
#define ADC_BASE 0xB1800000 // 0x58000000
#define ADCP(x) *(volatile int*)(ADC_BASE+(x))
#define rADCCON ADCP(0x00)
#define rADCDAT0 ADCP(0x0c)
volatile int preScaler;
int CMainDlg::GetBatteryStatus()
{
preScaler = ADC_FREQ;
preScaler = PCLK/ADC_FREQ -1; //PCLK:50.7MHz
int i;
int battery;
static int prevCh=-1;
int oldValue;
oldValue = rADCCON;
rADCCON = (1<<14)|(preScaler<<6)|(3<<3); //setup channel
if(prevCh!=3)
{
rADCCON = (1<<14)|(preScaler<<6)|(3<<3); //setup channel
for(i=0;i<1000;i++); //delay to set up the next channel
prevCh=3;
}
rADCCON|=0x1; //start ADC
while(rADCCON & 0x1); //check if Enable_start is low
while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high
battery = ( (int)rADCDAT0 & 0x3ff );// 0 -1023
rADCCON = oldValue;
return battery;
}
为什么我用SYSTEM_POWER_STATUS_EX2得到的全是0呢???
换两个PDA都试过了,不会是驱动的问题吧
应该是驱动有问题吧,看看电源组件是不是选择FULL