S3C2440擁有八通道的十位ADC, 最大轉(zhuǎn)換率為2.5MHz A/D轉(zhuǎn)換器時鐘下的500KSPS。A/D轉(zhuǎn)換器支持片上采樣-保持功能和掉電模式的操作。
八個通道中有四個通道適用于電阻屏的觸摸屏觸摸檢測,另外四個是模擬輸入,分別是A[0:3],
ADC的使用極其簡單,選擇時鐘à選擇通道à啟動轉(zhuǎn)換à轉(zhuǎn)換完成
主要用到如下幾個寄存器
負(fù)責(zé)選擇時鐘通道以及啟動ADC
這里讀取ADC的值
注意這一位,這說明轉(zhuǎn)換完成讀取的時候還可以觸發(fā)轉(zhuǎn)換,也就是相當(dāng)于連續(xù)轉(zhuǎn)換
Adc.c
#include"adc.h"http://=====================================================================//名稱:ADCSelect(intch,U32preScaler)//功能:選擇轉(zhuǎn)換通道,轉(zhuǎn)換器預(yù)分頻值設(shè)置//參數(shù):ch:轉(zhuǎn)換通道preScaler:預(yù)分頻值//返回值:無//=======================================================================voidADCSelect(intch,u8preScaler){rADCCON=(1<<14)"(preScaler<<6)|(ch<<3);//選擇通道,選擇分頻數(shù)啟動轉(zhuǎn)換}//=======================================================================//名稱:ADEnable()//功能:采用置位使能方式啟動AD轉(zhuǎn)換,16次采樣取平均值//參數(shù):無//返回值:轉(zhuǎn)換后的值//=======================================================================u16ADEnable(void){inti;intval=0;for(i=0;i<16;i++){rADCCON|=0x1;//使能ADC轉(zhuǎn)換while(rADCCON&0x1);//判斷使能ADC轉(zhuǎn)換后被清零while(!(rADCCON&0x8000));//等待轉(zhuǎn)換結(jié)束val+=(rADCDAT0&0x3ff);//讀取ADC轉(zhuǎn)換的值}val=val>>4;//計算ADC轉(zhuǎn)換值returnval;}//=======================================================================//名稱:ADRead()//功能:采用讀控制器的方式啟動AD轉(zhuǎn)換//參數(shù):無//返回值:轉(zhuǎn)換后的值//=======================================================================u16ADRead(void){inti;intval=0;rADCCON|=0x2;//ADC轉(zhuǎn)換通過讀操作來啟動for(i=0;i<16;i++){rADCCON|=0x1;//使能ADC轉(zhuǎn)換while(rADCCON&0x1);//判斷使能ADC轉(zhuǎn)換后被清零while(!(rADCCON&0x8000));//等待轉(zhuǎn)換結(jié)束val+=(rADCDAT0&0x3ff);//讀取ADC轉(zhuǎn)換的值}val=val>>4;//計算ADC轉(zhuǎn)換值returnval;}
Adc.h
#ifndef__ADC_H#define__ADC_H#include"2440addr.h"#include"def.h"voidADCSelect(intch,u8preScaler);u16ADEnable(void);u16ADRead(void);#endif