您现在的位置: 主页 > MCU > 单片机应用 > S3C2440的ADC程序 -
本文所属标签:
为本文创立个标签吧:

S3C2440的ADC程序 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-08 

[导读]使用ADC只需要对相应的寄存器进行配置,然后启动ADC即可,启动ADC有两种方法:1. 手动完成启动。2.读取上一次转换结果后自动启动下一次ADC转换。得到ADC是否转换完成的信息的方法有两种方法:1. 查询法:查询寄存器A

使用ADC只需要对相应的寄存器进行配置,然后启动ADC即可,启动ADC有两种方法:

本文引用地址: http://www.21ic.com/app/mcu/201808/785005.htm

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;

}




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机应用 > S3C2440的ADC程序 -
 

网站地图

围观()