#include #include "s3c2410-adc.h"
#define ADC_DEV "/dev/adc/0raw"
static int adc_fd = -1;
static int init_ADdevice(void)
{
if((adc_fd=open(ADC_DEV, O_RDWR))<0){
printf("Error opening %s adc device\n", ADC_DEV);
return -1;
}
}
static int GetADresult(int channel)
{
int PRESCALE=0XFF;
int data=ADC_WRITE(channel, PRESCALE);
write(adc_fd, &data, sizeof(data));
read(adc_fd, &data, sizeof(data));
return data;
}
static int stop=0;
static void* comMonitor(void* data)
{
getchar();
stop=1;
return NULL;
}
int main(void)
{
int i;
float d;
pthread_t th_com;
void * retval;
//set s3c44b0 AD register and start AD
if(init_ADdevice()<0)
return -1;
/* Create the threads */
pthread_create(&th_com, NULL, comMonitor, 0);
printf("\nPress Enter key exit!\n");
while( stop==0 ){
for(i=0; i<=2; i++){//采样0~2 路A/D 值
d=((float)GetADresult(i)*3.3)/1024.0;
printf("a%d=%8.4f\t",i,d);
}
usleep(1);
printf("\r");
}
/* Wait until producer and consumer finish. */
pthread_join(th_com, &retval);
printf("\n");
return 0;
}
六、实验步骤
1、阅读理解源码
进入/arm2410cl/exp/basic/04_ad 目录,使用vi 编辑器或其他编辑器阅读理解源代码。
2、编译应用程序
运行make 产生ad 可执行文件
3、下载调试
换到minicom 终端窗口,使用NFS mount 开发主机的/arm2410cl 到/host 目录。
我们可以通过调节开发板上的三个黄色的电位器,来查看a0、a1、a2 的变化。
7、 实验心得:
通过本次实验,我学习了A/D接口原理,了解实现A/D系统对于系统的软件和硬件要求。掌握了linux下A/D设备驱动程序设计的基本方法;掌握了ARM的A/D相关寄存器的功能,熟悉ARM系统硬件的A/D相关电工工作总结接口。还掌握了S3C2410芯片上的8通道10位AD换器的工作原理;熟悉了各种A/D转换器原理和性能指标。