Date: 9-Nov-2011
By: Calvinlee1984@163.com
1.S3c2440A提供了8通道10位模数转换接口(其中有四个通道用于触摸屏),ADC最大转换频率为2.5MHZ,其最大转换速率可达500KSPS。ADC内含采样并保持功能而且支持掉电模式,其微分线性误差(Differential Linearity Error)为±1.0LSB,积分线性误差(Intergal Linearity Error)为±2.0LSB。FL2440开发板利用其中的1通道接1个可调电阻,可做AD模数测试,其硬件原理图如下:
2.ADC控制框图
3.寄存器设置
static void ADC_Port_Init(void){
//ADC工作方式设置:预分频使能、模拟通道1、标准转换模式、读时启动转换
//ADC转换频率计算(必须<PCLK/5)
rADCCON &= ~(0xff);
rADCCON |= (1<<14|0x31<<6|0<<3|0<<2|1<<1); //Prescaler Enable,Prescaler=49,Analog Input 0,Enable start by read operation
}
4.代码分析 ADC.c
#include "2440addr.h"
#include "2440lib.h"
#include "UART.h"
#include "def.h"
//寄存器设置
static void ADC_Port_Init(void){
rADCCON &= ~(0xff);
rADCCON |= (1<<14|0x31<<6|0<<3|0<<2|1<<1); //Prescaler Enable,Prescaler=49,Analog Input 0,Enable start by read operation
}
void ADC_Display(void){
WORD TmpAdcData;
ADC_Port_Init(); //ADC端口初始化
rADCCON |= (1<<1); //ADC转换开始,启动后处理器会自动清除此位
while(UART0_GetKey()!=ESC_KEY){
TmpAdcData = (rADCDAT0 & (0x3FF)); //读操作
while(!(rADCCON & (0x1<<15))); //等待读取完成
UART0_Printf("AIN0:%04d\n",TmpAdcData); //输出数据至终端
Delay(1000); //延时1000ms
}
}
5.测试程序及结果
#include "UART.h"
#include "ADC.h"
int Main(void)
{
UART0_Port_Init(115200); //UART0端口初始化
ADC_Display(); //显示ADC转换数据
while(1){
;
}
return 0;
}