#include "S3C2451_adc.h"
//#define ADCCON (*(volatile unsigned *)0x58000000)
//#define ADCTSC (*(volatile unsigned *)0x58000004)
//#define ADCDLY (*(volatile unsigned *)0x58000008)
//#define ADCDAT0 (*(volatile unsigned *)0x5800000c)
//#define ADCDAT1 (*(volatile unsigned *)0x58000010)
//#define ADCUPDN (*(volatile unsigned *)0x58000014)
//#define ADCMUX (*(volatile unsigned *)0x58000018)
// ʹÓòéѯ·½Ê½¶ÁÈ¡A/Dת»»Öµ
int read_adc(int resolution)
{
// ʹÄÜÔ¤·ÖƵ¹¦ÄÜ£¬ÉèÖÃA/Dת»»Æ÷µÄʱÖÓ = PCLK/(65+1)
rADCCON = (1<<16)|(1 << 14) | (65 << 6) | (resolution << 3);
// Çå³ýλ[2]£¬ÉèΪÆÕͨת»»Ä£Ê½,½ûÖ¹read start
rADCCON &= ~((1<<2)|(1<<1));
// ÉèÖÃλ[0]Ϊ1£¬Æô¶¯A/Dת»»
rADCCON |= (1 << 0);
// µ±A/Dת»»ÕæÕý¿ªÊ¼Ê±£¬Î»[0]»á×Ô¶¯Çå0
while (rADCCON & (1 << 0));
// ¼ì²âλ[15]£¬µ±ËüΪ1ʱ±íʾת»»½áÊø
while (!(rADCCON & (1 << 15)) );
// ¶ÁÈ¡Êý¾Ý
return (rADCDAT0 & 0xfff);
}
//#define ADCCON (*(volatile unsigned *)0x58000000)
//#define ADCTSC (*(volatile unsigned *)0x58000004)
//#define ADCDLY (*(volatile unsigned *)0x58000008)
//#define ADCDAT0 (*(volatile unsigned *)0x5800000c)
//#define ADCDAT1 (*(volatile unsigned *)0x58000010)
//#define ADCUPDN (*(volatile unsigned *)0x58000014)
//#define ADCMUX (*(volatile unsigned *)0x58000018)
// ʹÓòéѯ·½Ê½¶ÁÈ¡A/Dת»»Öµ
int read_adc(int resolution)
{
// ʹÄÜÔ¤·ÖƵ¹¦ÄÜ£¬ÉèÖÃA/Dת»»Æ÷µÄʱÖÓ = PCLK/(65+1)
rADCCON = (1<<16)|(1 << 14) | (65 << 6) | (resolution << 3);
// Çå³ýλ[2]£¬ÉèΪÆÕͨת»»Ä£Ê½,½ûÖ¹read start
rADCCON &= ~((1<<2)|(1<<1));
// ÉèÖÃλ[0]Ϊ1£¬Æô¶¯A/Dת»»
rADCCON |= (1 << 0);
// µ±A/Dת»»ÕæÕý¿ªÊ¼Ê±£¬Î»[0]»á×Ô¶¯Çå0
while (rADCCON & (1 << 0));
// ¼ì²âλ[15]£¬µ±ËüΪ1ʱ±íʾת»»½áÊø
while (!(rADCCON & (1 << 15)) );
// ¶ÁÈ¡Êý¾Ý
return (rADCDAT0 & 0xfff);
}