WINCE6.0+S3C2443下ADC在电池驱动应用

********************************LoongEmbedded************************

作者:LoongEmbedded(kandi)

时间:2011.02.25

类别:WINCE 驱动开发

********************************LoongEmbedded************************

 

1.       ADC在电池驱动中的应用

1.1    电池检测端口和CPU的硬件接口

1

 

1.2    电池驱动中需要使用ADC来转换电池的电压值

下面是电池驱动battif.cBattery_sampleADC的函数体,这个函数用于对输出的电池电压这个模拟值转换为数字值

2

下面就来学习这个函数对这些寄存器的设置

ACDMUX

ACDMUX用于选择模拟输入通道,根据图1选择的是AIN0通道,见下图对ACDMUX寄存器的描述

3

ADCCON

ADCCONADC的控制寄存器

4

我的系统中FCLK=533MHZPCLK=FCLK/8,根据下面的公式

5

根据图25,可以算出A/D转换频率=PCLK/(49+1)=FCLK/(8*(49+1))=533/(8*50)=1.3325MHZ,从而计算出一次的A/D转换时间=5*(1/1.3325MHZ)=3.725us

 

ADCDAT0

ADCDAT0ADC转换数据寄存器,ADCDAT0[9:0]保存着电池电压值经过ADC转换之后的数字值,这里ADCDAT0要和0x3FF进行与运算就是为了取出ADCDAT0[9:0]的值

6

 

 

1.3    KSPS

7

KSPS(kilo samples per second)表示每秒采样千次,是转换速率的单位,而转换速率(conversion rate)是指完成一次从模拟量到数字量的AD转换所需要时间的倒数。我们知道S3C2443ADC最大的A/D转换时钟频率是2.5MHZ,所以可以计算出一次A/D转换的时间=5*(1/2.5MHZ)=2us,所以1s中的采样次数=1s/2us=500KSPS,这就是500KSPS的由来。

 

 

2.       获取电池状态的函数BatteryPDDGetStatus

电池驱动mdd层的battapi.c下面的函数BatteryAPIGetSystemPowerStatusEx2会定时调用BatteryPDDGetStatus来获取电池的状态,包括是否在充电,电量的百分比等,这些信息就是功过pddBatteryPDDGetStatus函数来填充结构体SYSTEM_POWER_STATUS_EX2的成员来告诉mdd层的,这个结构体/WINCE600/PUBLIC/COMMON/SDK/INC/winbase.h中定义,如下:

8

下面来学习这个结构体的主要的常用的成员的含义

ACLineStatus

用于指示AC电源状态,也就是电池是否在充电

9

BatteryFlag

表示电池是否在充电以及充电的情况

10

BatteryLifePercent

表示电池电量所剩的百分比,这个值可以是从0100,也可以是BATTERY_PERCENTAGE_UNKNOWN的状态,我们的电池的驱动中就有这方面的应用,在充电的时候,如果计算出电池电量小于50%的时候,就不显示电池具体的电量显示,这时候只需要对BatteryLifePercent赋值为BATTERY_PERCENTAGE_UNKNOWN就可以了

11

12

13

14

 

 

S3C2440AADC和触摸屏接口

http://blog.sina.com.cn/s/blog_63f980240100kxjx.html

 

KSPS

http://www.baidu.com/s?wd=KSPS

 

 

原文地址:https://www.cnblogs.com/LoongEmbedded/p/5298806.html