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

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

?? s3c2410 ad.txt

?? 本文包括兩部分的內(nèi)容!第一部分介紹了s3c2410集成ad驅(qū)動(dòng)程序開(kāi)發(fā)
?? TXT
字號(hào):
2410自帶了8個(gè)ad通道,10bit,500ksps。在網(wǎng)上查了資料,很少有人用它做ad轉(zhuǎn)換的,原因是精度不高。不過(guò)對(duì)于一些要求不是很高的地方,還是值得一用。
在/kernel/drivers/char中已經(jīng)有了ad不完整的驅(qū)動(dòng),基本框架搭好了,只要加上文件系統(tǒng)那部分就可以直接使用了。使用時(shí)一定要在Vref上加上電壓,否則ad就不工作了?,F(xiàn)在就把驅(qū)動(dòng)和應(yīng)用程序貼出來(lái),供大家參考學(xué)習(xí)。
應(yīng)用程序的作用是要測(cè)量的通道號(hào)告訴驅(qū)動(dòng),驅(qū)動(dòng)得到通道號(hào)經(jīng)過(guò)ad轉(zhuǎn)換后將數(shù)字量傳給應(yīng)用程序。
驅(qū)動(dòng)程序:
/*
* s3c2410-adc.c
*
* S3C2410 ADC 
*  exclusive with s3c2410-ts.c
*/
#include linux/config.h>
#include linux/module.h>
#include linux/kernel.h>
#include linux/init.h>
#include linux/sched.h>
#include linux/irq.h>
#include linux/delay.h>
#include asm/hardware.h>
#include asm/semaphore.h>
#include asm/uaccess.h>
#include asm/io.h> 
#define DEVICE_NAME   "s3c2410-adc"
#define ADCRAW_MINOR   1
#define ADC_WRITE(ch, prescale)  ((ch)<<16|(prescale))
#define ADC_WRITE_GETCH(data)  (((data)>>16)&0x7)   //得到通道號(hào)
#define ADC_WRITE_GETPRE(data)  ((data)&0xff)      //得到轉(zhuǎn)換的比例因子 
static int adcMajor = 0; 
typedef struct {
struct semaphore lock;
wait_queue_head_t wait;
int channel;
int prescale;
}ADC_DEV; 
static ADC_DEV adcdev; 
#define START_ADC_AIN(ch, prescale) \
do{ \
ADCCON = PRESCALE_EN | PRSCVL(prescale) | ADC_INPUT((ch)) ; \
ADCCON |= ADC_START; \
}while(0) 
static void adcdone_int_handler(int irq, void *dev_id, struct pt_regs *reg)
{
wake_up(&adcdev.wait);
} 
static ssize_t s3c2410_adc_write(struct file *file, const char *buffer, size_t count, loff_t * ppos)
{
int data; 
if(count!=sizeof(data)){
printk("the size of  input data must be %d\n", sizeof(data));
return 0;
}
copy_from_user(&data, buffer, count);
adcdev.channel=ADC_WRITE_GETCH(data);
adcdev.prescale=ADC_WRITE_GETPRE(data);
DPRINTK("set adc channel=%d, prescale=0x%x\n", adcdev.channel, adcdev.prescale);
return count;
} 
static ssize_t s3c2410_adc_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)
{
int ret = 0;
if (down_interruptible(&adcdev.lock))
return -ERESTARTSYS;
START_ADC_AIN(adcdev.channel, adcdev.prescale);
interruptible_sleep_on(&adcdev.wait);
printk("in read channel=%d\n",adcdev.channel);
ret = ADCDAT0;
printk("ADCDAT0=%x\n",ADCDAT0);
while((ADCCON & 0x80)!=1)
udelay(100);
ret &= 0x3ff;
copy_to_user(buffer, (char *)&ret, sizeof(ret));
up(&adcdev.lock);
return sizeof(ret);
} 
static int s3c2410_adc_open(struct inode *inode, struct file *filp)
{
init_MUTEX(&adcdev.lock);
init_waitqueue_head(&(adcdev.wait)); 
adcdev.channel=0;
adcdev.prescale=0xff; 
MOD_INC_USE_COUNT;
printk("adc opened!\n");
return 0;
} 
static int s3c2410_adc_release(struct inode *inode, struct file *filp)
{
MOD_DEC_USE_COUNT;
printk( "adc closed\n");
return 0;
} 

static struct file_operations s3c2410_fops = {
owner:THIS_MODULE,
open:s3c2410_adc_open,
read:s3c2410_adc_read,
write:s3c2410_adc_write,
release:s3c2410_adc_release,
}; 
#ifdef CONFIG_DEVFS_FS
static devfs_handle_t devfs_adc_dir, devfs_adcraw;
#endif 
int __init s3c2410_adc_init(void)
{
int ret; 
/* normal ADC */
ADCTSC = 0;
ret = request_irq(IRQ_ADC_DONE, adcdone_int_handler, SA_INTERRUPT, DEVICE_NAME, NULL);
if (ret) {
return ret;
} 
ret = register_chrdev(0, DEVICE_NAME, &s3c2410_fops);
if (ret < 0) {
printk(DEVICE_NAME " can't get major number\n");
return ret;
}
adcMajor=ret; 
#ifdef CONFIG_DEVFS_FS
devfs_adc_dir = devfs_mk_dir(NULL, "adc", NULL);
devfs_adcraw = devfs_register(devfs_adc_dir, "0raw", DEVFS_FL_DEFAULT,
adcMajor, ADCRAW_MINOR, S_IFCHR | S_IRUSR | S_IWUSR, &s3c2410_fops, NULL);
#endif
printk (DEVICE_NAME"\tinitialized\n");
printk ("initialized\n"); 
printk("inilized ADCDAT0=%x\n",ADCDAT0);
printk("inilized ADCCON=%x\n",ADCCON);
return 0;
} 
module_init(s3c2410_adc_init); 
#ifdef MODULE
void __exit s3c2410_adc_exit(void)
{
#ifdef CONFIG_DEVFS_FS
devfs_unregister(devfs_adcraw);
devfs_unregister(devfs_adc_dir);
#endif
unregister_chrdev(adcMajor, DEVICE_NAME); 
free_irq(IRQ_ADC_DONE, NULL);
} 
module_exit(s3c2410_adc_exit);
MODULE_LICENSE("GPL");
#endif 
應(yīng)用程序:
#include stdio.h>
#include unistd.h>
#include sys/types.h>
#include sys/ipc.h>
#include sys/ioctl.h>
#include fcntl.h> 
#define ADC_DEV"/dev/adc/0raw"
#define ADC_WRITE(ch, prescale)((ch)<<16|(prescale))
#define ADC_WRITE_GETCH(data)(((data)>>16)&0x7)   //得到通道號(hào)
#define ADC_WRITE_GETPRE(data)((data)&0xff)      //得到轉(zhuǎn)換的比例因子 
static int get(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;
} 
main()
{
int i;
int fd;
float d;
void * retval;
   
if((fd=open(ADC_DEV, O_RDWR))<0)
{
printf("Error opening %s adc device\n", ADC_DEV);
return -1;
}
for(i=0; i<=7; i++)
{
d=((float)get(i)*3.3)/1024.0;
printf("a[%d]=%8.4f\n",i,d);
}
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女视频第一区二区三区免费观看网站| 成人在线综合网| 亚洲成人精品一区| 一区二区三区中文字幕| 中文字幕一区二区三区在线不卡 | 国产精品自产自拍| 激情文学综合插| 精品中文字幕一区二区小辣椒| 免费在线看一区| 久久99精品国产.久久久久| 精品亚洲成a人| 国产乱人伦精品一区二区在线观看| 精品一区二区三区免费视频| 精品一区二区日韩| 风间由美一区二区av101| 成人性色生活片免费看爆迷你毛片| 成人97人人超碰人人99| 色婷婷激情综合| 欧美日韩国产不卡| 欧美变态tickle挠乳网站| 精品国产区一区| 亚洲国产激情av| 亚洲精品一二三四区| 午夜欧美2019年伦理 | 91精品国产欧美一区二区18| 日韩欧美在线不卡| 日本一区二区三区dvd视频在线| 欧美国产成人在线| 一区二区三区四区乱视频| 污片在线观看一区二区| 国产综合久久久久久久久久久久| 国产suv精品一区二区883| 91成人看片片| 精品国产免费一区二区三区香蕉| 国产精品美女久久久久久久久久久 | 亚洲欧洲国产日本综合| 亚洲一区二区五区| 国内国产精品久久| 97久久精品人人做人人爽50路| 在线看国产一区二区| 日韩三级视频在线看| 国产精品家庭影院| 午夜一区二区三区视频| 激情综合网最新| 色综合天天做天天爱| 欧美一级久久久久久久大片| 中文字幕欧美国产| 亚洲成人av一区二区三区| 国产成人在线视频网站| 欧美日韩亚州综合| 欧美国产日产图区| 日韩电影在线观看电影| av网站一区二区三区| 欧美丰满高潮xxxx喷水动漫| 中文字幕av一区二区三区| 婷婷激情综合网| www.亚洲激情.com| 精品少妇一区二区三区在线视频 | 国产成人8x视频一区二区| 欧美日韩在线三级| 国产精品国模大尺度视频| 另类中文字幕网| 在线亚洲精品福利网址导航| 国产日韩欧美a| 日本不卡视频一二三区| 成人精品高清在线| 日韩欧美你懂的| 亚洲小说春色综合另类电影| 国产99久久久国产精品潘金网站| 欧美伦理电影网| 日韩美女啊v在线免费观看| 国内精品国产三级国产a久久| 欧美日精品一区视频| 亚洲图片欧美激情| 国产精品自在在线| 亚洲精品在线观看视频| 亚洲电影第三页| 91免费看视频| 国产精品热久久久久夜色精品三区| 蜜芽一区二区三区| 在线精品观看国产| 自拍偷拍国产精品| 成人精品一区二区三区中文字幕| 欧美sm美女调教| 免费观看日韩av| 制服丝袜av成人在线看| 伊人一区二区三区| 91蜜桃网址入口| 亚洲色欲色欲www| 成人av在线网站| 欧美高清在线精品一区| 国产精品一区二区不卡| 欧美电影免费观看高清完整版在| 日日夜夜精品视频天天综合网| 在线免费观看一区| 一区二区三区中文字幕精品精品| 99国产精品久久久久久久久久久| 国产精品日韩成人| 成人av在线电影| 中文字幕一区二区三区不卡 | 欧美一区午夜视频在线观看| 天涯成人国产亚洲精品一区av| 欧美性猛片xxxx免费看久爱| 亚洲另类在线制服丝袜| 91蜜桃在线观看| 一区二区久久久久久| 欧美综合在线视频| 午夜私人影院久久久久| 色美美综合视频| 亚洲一级不卡视频| 777午夜精品视频在线播放| 秋霞国产午夜精品免费视频| 精品国产精品网麻豆系列| 精品一区二区三区在线观看国产| 久久新电视剧免费观看| 国产精品一二三四区| 国产精品久久久久久久久果冻传媒 | 国精产品一区一区三区mba桃花 | 亚洲欧美另类图片小说| 91小视频在线| 亚洲午夜激情av| 777午夜精品免费视频| 极品瑜伽女神91| 国产欧美一区二区在线| aa级大片欧美| 视频一区中文字幕国产| 精品久久人人做人人爰| 国产白丝精品91爽爽久久| 亚洲欧美日韩在线不卡| 欧美群妇大交群中文字幕| 精品制服美女久久| 欧美国产日韩精品免费观看| 91福利精品第一导航| 免费在线观看一区二区三区| 2023国产精华国产精品| 99国产精品国产精品毛片| 性做久久久久久久免费看| 精品av综合导航| 91亚洲精品乱码久久久久久蜜桃| 偷拍日韩校园综合在线| 精品成人在线观看| av高清久久久| 视频一区在线播放| 2023国产精品| 在线视频国内自拍亚洲视频| 视频一区二区三区在线| 久久综合九色综合97婷婷| 97se狠狠狠综合亚洲狠狠| 日韩精品欧美精品| 国产欧美va欧美不卡在线| 在线免费不卡电影| 国精产品一区一区三区mba桃花 | 国产成人精品一区二区三区四区| 亚洲欧美日韩在线| 精品电影一区二区| 在线精品视频小说1| 国产成人亚洲综合a∨婷婷图片| 亚洲线精品一区二区三区| 久久久蜜桃精品| 在线精品亚洲一区二区不卡| 精久久久久久久久久久| 中文字幕亚洲精品在线观看| 这里只有精品免费| 国内精品国产成人国产三级粉色 | 亚洲欧美激情一区二区| 日韩欧美在线1卡| a4yy欧美一区二区三区| 麻豆精品新av中文字幕| 国产精品成人免费精品自在线观看 | 4hu四虎永久在线影院成人| a4yy欧美一区二区三区| 韩国女主播成人在线| 亚洲综合在线免费观看| 精品国产免费久久| 欧美视频三区在线播放| 成人永久aaa| 蜜臀av一区二区| 一区二区三区四区av| 中文一区二区在线观看| 日韩女优毛片在线| 欧美影院午夜播放| 成人精品视频一区| 国产一区不卡精品| 日本强好片久久久久久aaa| 一区二区三区四区五区视频在线观看 | 日韩视频永久免费| 欧美三级乱人伦电影| 91久久香蕉国产日韩欧美9色| 成人丝袜18视频在线观看| 国产精品亚洲第一| 美女视频免费一区| 日本成人在线看| 亚洲国产精品久久久久秋霞影院 | 国产精品视频你懂的| 久久一二三国产| 欧美疯狂性受xxxxx喷水图片| 欧美性大战久久| 在线一区二区三区| 一本到不卡精品视频在线观看| jvid福利写真一区二区三区|