#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "s3c2410-adc.h"
#define ADC_DEV
static int adc_fd = -1;
"/dev/adc/0raw"
#define ADC_DEV
#define DCM_IOCTRL_SETPWM
#define DCM_TCNTB0
"/dev/adc/0raw"
(0x10)
(16384)
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;
}
static int dcm_fd = -1;
char *DCM_DEV="/dev/dcm/0raw";
void Delay(int t)
{
int i;
for(;t>0;t--)
for(i=0;i<400;i++);
}
int main(int argc, char **argv)
{
float data[10]={0};
float aver;
int j;
float d;
pthread_t th_com;
void * retval;
int i = 0;
//int status = 1;
int setpwm = 0;
int factor = DCM_TCNTB0/1024;
//set s3c44b0 AD register and start AD
if(init_ADdevice()<0){
printf("Error opening %s adc device\n", ADC_DEV);
return -1;
}
/* Create the threads */
pthread_create(&th_com, NULL, comMonitor, 0);
printf("\nPress Enter key start!\n");
if((dcm_fd=open(DCM_DEV, O_WRONLY))<0){
printf("Error opening %s device\n", DCM_DEV);
return 1;
}
//the filter
while( stop==0 ){
data[j]=(float)GetADresult(1);
for(j=9;j>0;j--)
{
data[j]=data[j-1];
aver+=data[j];
}
aver=aver/10;
printf("a%d=%8.4f\t",1,aver);
setpwm = aver-512;
if(setpwm >20)
printf("fanzhuan");
else if (setpwm <-20)
printf("zhengzhuan");
else printf("tingzhi");
ioctl(dcm_fd, DCM_IOCTRL_SETPWM, (setpwm * factor));
Delay(500);
printf("setpwm = %d \n", setpwm);
usleep(1);
printf("\r");
}
pthread_join(th_com, &retval);
printf("/n");
close(dcm_fd);
return 0;
}