S3C2440的ADC程序
扫描二维码
随时随地手机看文章
使用ADC只需要对相应的寄存器进行配置,然后启动ADC即可,启动ADC有两种方法:
1. 手动完成启动。
2.读取上一次转换结果后自动启动下一次ADC转换。
得到ADC是否转换完成的信息的方法有两种方法:
1. 查询法:查询寄存器ADCCON的第15位(ADC的转换完成位)。
2. 中断法:转换完成后,产生ADC中断信号。
当不使用触摸屏时,与ADC相关的寄存器主要有据寄存器ADCCON和寄存器ADCDAT0。寄存器ADCCON主要用于选择ADC的启动方式、设置ADC转换时钟以及ADC转换结束标志位等。寄存器ADCDAT0中存放了ADC抓换所得的结果,ADC转换结束后,可以直接读改寄存器的值来得到转换结果。
注意:普通ADC转换数据值存储在ADCDAT0的低10位,数据范围0~0x3ff。ADC的时钟来自PCLK时钟的分频,并且时钟必须小于PCLK/5。
//****************ADC 中断*****************
void ADC_start();
extern int ADC_dat;
void __irq ADC_isr()
{
unsigned long irqOffSet;
send_dat(ADC_dat);
send_str((unsigned char *)"ADC is started!rn");
ADC_dat = 1010;//((int)rADCDAT0&0x3ff);//读取ADC的转换值
//dely(100);
send_dat(ADC_dat);
//ADC_start();//启动AD
send_dat(ADC_dat);
irqOffSet = rINTOFFSET;// 取得中断号
rSUBSRCPND |= (1<<10)|(1<<9);
rSRCPND |= 1< rINTPND= rINTPND;//中断标志清零 dely(550); send_str((unsigned char *)"ADC is end!rn"); } void Init_ADC() { //寄存器进行清零 rADCCON &= ~((1<<14)|(0xff<<6)|(0x07<<3)|(1<<2)|(1<<1)|(1<<0)); //允许分频,预分频值为49,通道0,正常工作模式,读数时不启动转换 rADCCON |= (1<<14)|(49<<6)|(0<<3)|(0<<2)|(0<<1); rINTSUBMSK &= ~((1<<10)|(1<<9)); rINTMSK &= ~(1<<31);//使能ADC中断 pISR_ADC = (unsigned int)ADC_isr; send_str((unsigned char *)"ADC initial is OK!rn"); } void ADC_start() { rADCCON |= 0x01;//启动AD转换 while(!(rADCCON&0x01));//ADC 开始后,bit0会自动清零 } int get_ADC_data(void) { //send_dat(ADC_dat); send_str((unsigned char *)"test is started!rn"); ADC_dat = 1010;//((int)rADCDAT0&0x3ff);//读取ADC的转换值 //dely(100); send_dat(ADC_dat); //ADC_start();//启动AD send_dat(ADC_dat); send_str((unsigned char *)"test is end!rn"); return 0; }