单片机 > 单片机程序设计 > 详情

S3C2440的ADC程序

发布时间:2025-10-29 发布时间:
|

使用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!\r\n");

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!\r\n");

}

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!\r\n");

}

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!\r\n");

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!\r\n");

return 0;

}


关键字:S3C2440  ADC程序 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
hot51增强型单片机开发板原理图