亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? adc.c

?? _計(jì)算實(shí)用教程Visual C++6.0實(shí)用教程
?? C
字號:
/* ADC.c */

#include<linux/errno.h>
#include<linux/fs.h>
#include<linux/major.h>
#include<linux/kernel.h>
#include<linux/signal.h>
#include<linux/module.h>
#include<linux/sched.h>
#include<asm/io.h>
#include<asm/segment.h>
#include<asm/system.h>

#include "ADC.h"

extern int printk(const char* fmt, ...);
int adc_busy=0;
unsigned short data_port,control_port,status_port;


static int adc_open(struct inode *  inode,struct file * file)
{
unsigned int minor=MINOR(inode->i_rdev);

if (minor>7) return -ENODEV;
if (adc_busy==ADC_BUSY) return -EBUSY;

adc_busy=ADC_BUSY;
return 0;
}

static void adc_close(struct inode * inode,struct file * file)
{
adc_busy=ADC_FREE;
}

static int adc_read(struct inode * inode,struct file * file,char * buf,int count)
{
unsigned char data[16];
int adc_val;
unsigned int temp_val;
int temp1,temp2,temp3;
unsigned int minor=MINOR(inode->i_rdev);

if (count < 1) return -EINVAL;
switch (minor)
{
case CHANNEL_0:
	temp1=0x8f;
	break;
case CHANNEL_1:
	temp1=0xcf;
	break;
case CHANNEL_2:
	temp1=0x9f;
	break;
case CHANNEL_3:
	temp1=0xdf;
	break;
case CHANNEL_4:
	temp1=0xaf;
	break;
case CHANNEL_5:
	temp1=0xef;
	break;
case CHANNEL_6:
	temp1=0xbf;
	break;
case CHANNEL_7:
	temp1=0xff;
	break;
default:
	temp1=0x8f;
	break;
}
cli();
for(temp2=0; temp2<8; temp2++)
{
temp3= (temp1 << temp2) & 0x80;
outb(temp3,data_port);

temp3=temp3 | 1;
outb(temp3,data_port);
outb(temp3,data_port); /* this is to make the clk 50% duty cycle*/
/* Duty cycle as measured with a 66 MHz 486 is 48% */
temp3=temp3 & 0xfe;
outb(temp3,data_port);
}

temp3=temp3 & 0x7f;
outb(temp3,data_port);

for(temp2=0; temp2<16; temp2++)
{
temp3= 01;
outb(temp3,data_port);

data[temp2]=inb(data_port+1)&0x80;

temp3=temp3 & 0xfe;
outb(temp3,data_port);
outb(temp3,data_port);
}
sti();

adc_val=0; 
for(temp2=0; temp2<16; temp2++)
{
temp_val=( (unsigned int) data[temp2] & 0x00ff) << 8;
adc_val= adc_val | ( (temp_val ^ 0x8000) >> temp2);
}
adc_val=adc_val>> 3;
put_fs_word(adc_val,buf);
/* printk("ADC: Input value from port: %d\n",adc_val); */
return 1;
}

static struct file_operations adc_fops={
	NULL,
	adc_read,
	NULL,
	NULL,
	NULL,
        NULL,
	NULL,
	adc_open,
	adc_close,
	NULL
};

int init_module(void)
{
unsigned char ret_val,test_val=0x00;

outb(test_val,PARALLEL_1);
ret_val=inb(PARALLEL_1);
if (ret_val==test_val) 
   {
   data_port=PARALLEL_1;
   }
else
  {
   outb(test_val,PARALLEL_2);
   ret_val=inb(PARALLEL_2);
   if (ret_val==test_val)
      {
      data_port=PARALLEL_2;
      }
   else
      {
      data_port=PARALLEL_3;
      }
   }


printk("ADC: init module \n");
 if (register_chrdev(ADC_MAJOR,"adc",&adc_fops))
 {
   printk("Register_chrdev failed: Quitting\n");
   return -EIO;
   }
else
{
printk("ADC: Device Registered\n");
return 0;
}
}

void cleanup_module(void)
{
int busy=0;
printk("ADC: Cleanup Module \n");

   if (adc_busy==ADC_BUSY) busy=1;
   if (busy) printk("ADC: Device busy, remove later\n");
   if (unregister_chrdev(ADC_MAJOR,"adc")!=0)
     {
     printk("ADC: Clean up module failed\n");
     }
     else
    {
    printk("Clean up module succeeded\n");
    }
}

unsigned short test_parallel(void)
{

unsigned char ret_val,test_val=0x55;
unsigned short dport;

outb(test_val,PARALLEL_3);
ret_val=inb(PARALLEL_3);
if (ret_val==test_val) 
   {
   dport=PARALLEL_3;
   }
else
  {
   outb(test_val,PARALLEL_1);
   ret_val=inb(PARALLEL_1);
   if (ret_val==test_val)
      {
      dport=PARALLEL_1;
      }
   else
      {
   outb(test_val,PARALLEL_2);
   ret_val=inb(PARALLEL_2);
   if (ret_val==test_val) 
{
dport=PARALLEL_1;
}else
{
printk("No Parallel Port Available\n");
return -EIO;
}
      }
   }
return(dport);
}

int test_adc(void)
{
unsigned char cbyte;

cbyte=inb(data_port+2);
cbyte=cbyte&0xfe;
outb(cbyte,data_port+2);
cbyte=inb(data_port+1);
cbyte=cbyte & 0x80;
if (cbyte) return ADC_NOT_AVAILABLE;
cbyte=inb(data_port+2);
cbyte=cbyte|0x01;
outb(cbyte,data_port+2);
cbyte=inb(data_port+1);
cbyte=cbyte&0x80;
if (!cbyte) return ADC_NOT_AVAILABLE;
return ADC_AVAILABLE;
}

int adc_init(void)
{
int adc_stat;

printk("\n\n");
printk("    General Purpose DAS : Gadre and  Engineer \n");
printk("    Copyright 1996  The Peshwe at IUCAA , Pune\n");

data_port=test_parallel();
if (data_port!=0x378 &&  data_port!=0x278 && data_port!=0x3bc) 
{
printk("Parallel Port Not Available\n");
return -EINVAL;
}
printk("The Code detected %x as the parallel port in this machine\n",data_port);
adc_stat=test_adc(); 
if (adc_stat==1)
{
printk("ADC: registering driver\n");
 if (register_chrdev(ADC_MAJOR,"adc",&adc_fops))
  {
   printk("Register_chrdev failed: Quitting\n");
   return -EIO;
   }
else
  {
printk("ADC: Device Registered\n");
printk("   \t\t SanSon DAS  testing Successful \t\t \n\n");
return 0;
  }
}
printk("ADC not connected\n");
printk(" \n\n");
return -EIO;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区人| 91免费观看视频在线| 日韩欧美国产系列| 日韩精品欧美精品| 精品国产免费一区二区三区香蕉| 精品一区二区三区香蕉蜜桃| 日韩欧美成人午夜| 国产成a人亚洲| 成人欧美一区二区三区| 色网站国产精品| 三级精品在线观看| 久久综合成人精品亚洲另类欧美 | 国产高清不卡一区二区| 国产视频视频一区| 色视频欧美一区二区三区| 亚洲综合另类小说| 精品少妇一区二区三区视频免付费| 国产一本一道久久香蕉| 亚洲天堂2016| 日韩欧美视频在线| www.欧美.com| 亚洲精品国产第一综合99久久| 欧美放荡的少妇| 国产精品一区2区| 亚洲自拍与偷拍| 精品国产乱码久久久久久闺蜜| 国产精品91一区二区| 亚洲在线成人精品| xf在线a精品一区二区视频网站| 91在线国产观看| 蜜桃一区二区三区在线| 国产女人18毛片水真多成人如厕| 在线免费一区三区| 国产精品99久久久久久似苏梦涵| 一区二区三区中文字幕电影| 欧美一区二区私人影院日本| 成+人+亚洲+综合天堂| 亚洲电影一级片| 国产精品网友自拍| 日韩一卡二卡三卡| 色视频欧美一区二区三区| 国产综合色精品一区二区三区| 亚洲综合男人的天堂| 国产视频一区二区在线| 日韩一区二区在线观看视频播放| 99久久精品免费看| 国模一区二区三区白浆| 亚洲成av人影院| 亚洲丝袜制服诱惑| 久久久av毛片精品| 欧美一区二区在线视频| 日本久久精品电影| 成人激情动漫在线观看| 国产一区久久久| 日本va欧美va精品发布| 亚洲尤物视频在线| 尤物在线观看一区| 国产精品电影一区二区三区| xfplay精品久久| 欧美xxxx老人做受| 91精品欧美综合在线观看最新| 在线欧美一区二区| 日本高清无吗v一区| 97久久超碰精品国产| 成人深夜视频在线观看| 国产成人自拍网| 国产一区二区三区国产| 精品一区中文字幕| 久久精品噜噜噜成人88aⅴ| 亚洲国产一区二区三区| 日韩美女精品在线| 中文字幕一区二区三| 日韩你懂的电影在线观看| 国产精品丝袜黑色高跟| 欧美激情一区二区三区不卡| 久久夜色精品国产欧美乱极品| 日韩网站在线看片你懂的| 欧美日本在线播放| 欧美日韩国产一二三| 欧美日韩亚洲丝袜制服| 欧美日精品一区视频| 欧美三电影在线| 欧美精品三级日韩久久| 在线观看91av| 欧美va日韩va| 久久久亚洲精华液精华液精华液| 精品91自产拍在线观看一区| 精品国产成人系列| 久久综合色鬼综合色| 国产视频一区二区在线| 国产精品激情偷乱一区二区∴| 中文字幕一区三区| 亚洲一区免费视频| 日本系列欧美系列| 国产精品一区二区久激情瑜伽| 成人黄色大片在线观看| 色8久久精品久久久久久蜜| 欧美日免费三级在线| 日韩欧美国产一区二区三区| 久久精子c满五个校花| 国产精品每日更新在线播放网址| 亚洲综合图片区| 麻豆freexxxx性91精品| 国产福利一区在线| 91免费视频观看| 欧美二区乱c少妇| 国产女人aaa级久久久级| 亚洲精品国产一区二区精华液| 日韩电影在线看| 国产福利一区在线| 精品视频免费看| 欧美精品一区二| 一区二区三区在线观看动漫| 日本 国产 欧美色综合| 国产91精品免费| 欧美日韩精品是欧美日韩精品| 欧美成人免费网站| 亚洲欧美另类小说| 久久成人免费网| 91麻豆国产自产在线观看| 日韩一级片网址| 中文字幕欧美一| 麻豆精品视频在线观看| 91蝌蚪国产九色| 26uuu国产电影一区二区| 亚洲精品videosex极品| 久久99热99| 欧美日韩高清影院| 亚洲色图视频免费播放| 蜜桃精品视频在线| 欧日韩精品视频| 国产精品入口麻豆原神| 六月丁香婷婷色狠狠久久| 色婷婷国产精品综合在线观看| 久久久久国产一区二区三区四区| 一区二区三区精品| 国产不卡免费视频| 精品国产制服丝袜高跟| 亚洲成人一二三| thepron国产精品| 国产午夜一区二区三区| 美美哒免费高清在线观看视频一区二区 | 在线成人高清不卡| 亚洲三级在线免费观看| 国产精品18久久久久久vr| 欧美欧美午夜aⅴ在线观看| 国产精品色婷婷| 国产福利不卡视频| 欧美成人官网二区| 丝袜美腿高跟呻吟高潮一区| 色播五月激情综合网| 国产精品国产三级国产有无不卡 | 成人av网站在线观看| 久久免费电影网| 激情都市一区二区| 日韩欧美自拍偷拍| 奇米综合一区二区三区精品视频| 精品视频免费看| 亚洲高清在线视频| 欧美丝袜丝交足nylons| 一二三区精品视频| 91国产成人在线| 亚洲激情av在线| 色一情一伦一子一伦一区| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 欧美日韩小视频| 一卡二卡欧美日韩| 91国产免费观看| 亚洲国产中文字幕在线视频综合| 色婷婷av一区二区三区gif | 亚洲一区免费在线观看| 欧美午夜电影网| 亚洲午夜在线电影| 这里只有精品免费| 日本vs亚洲vs韩国一区三区| 日韩一区二区三区视频在线 | 国产精品一色哟哟哟| 久久天天做天天爱综合色| 国产精品一级二级三级| 中国av一区二区三区| 色综合视频一区二区三区高清| 一区二区在线看| 在线观看91精品国产麻豆| 美日韩一区二区| 国产亚洲自拍一区| 99精品视频在线观看免费| 一区二区三区四区乱视频| 欧美精品 国产精品| 久久精品国产亚洲一区二区三区| 久久精品亚洲一区二区三区浴池 | 亚洲一区二区三区自拍| 51精品秘密在线观看| 国产一区视频导航| 国产精品久久99| 欧美日韩亚洲不卡| 国产九色sp调教91| 一区二区三区电影在线播| 91精品在线免费观看| 懂色av一区二区三区蜜臀| 一区二区三区电影在线播|