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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 2410-adc-2.c

?? 嵌入式開發板s3c2410的模數轉換模塊的linux操作系統驅動程序
?? C
字號:
/*
*    HLG442-S3C2410-ADC_DRV 
* /26/03/2008    AUTHOR "machuanlong"
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/delay.h>
#include <asm/hardware.h>
#include <asm/semaphore.h>
#include <asm/uaccess.h>
#include <linux/kernel.h>   /* printk() */
#include <linux/slab.h>   /* kmalloc() */
#include <linux/fs.h>       /* everything... */
#include <linux/errno.h>    /* error codes */
#include <linux/types.h>    /* size_t */
#include <linux/mm.h>
#include <linux/kdev_t.h>
#include <linux/cdev.h>
#include <linux/delay.h>
#include <asm/io.h>


#include <linux/errno.h>

#include <linux/input.h>
#include <linux/init.h>
#include <linux/serio.h>
#include <asm/irq.h>
#include <asm/arch/regs-adc.h>
#include <asm/arch/map.h>
#include <asm/hardware/clock.h>
#include "s3c2410-adc.h"

#include <asm/arch/regs-irq.h>
#include <asm/arch-s3c2410/regs-clock.h>
 
#define DEVICE_NAME "adc"
static int adc_major = 0;
typedef struct {
 struct semaphore lock;
 wait_queue_head_t wait;
 int channel;
 int prescale;
}ADC_DEV;
static ADC_DEV adcdev;
static irqreturn_t adcdone_int_handler(int irq,void *dev_id,struct pt_regs *regs)
{
 wake_up(&adcdev.wait);
 return IRQ_HANDLED ;
}
static ssize_t s3c2410_adc_write(struct file *file, const char *buffer, size_t count, loff_t * ppos)
{
 return 0;
}
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;
 writel((readl(S3C2410_CLKCON) | S3C2410_CLKCON_ADC),S3C2410_CLKCON);
 writel((1<<14) | PRSCVL(adcdev.prescale) | ADC_INPUT(adcdev.channel) | 0x01 | 0x01, S3C2410_ADCCON);
 interruptible_sleep_on(&adcdev.wait);
 ret = readl(S3C2410_ADCDAT0);
 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)
{ 
  int ret;
  ret = request_irq(IRQ_ADC, adcdone_int_handler, SA_INTERRUPT, DEVICE_NAME, NULL);
 if (ret) {
  return ret;
 }
 init_MUTEX(&adcdev.lock);
 init_waitqueue_head(&(adcdev.wait));
 adcdev.channel=0;
 adcdev.prescale=255;
 return 0;
}
static int s3c2410_adc_release(struct inode *inode, struct file *filp)
{
 free_irq(IRQ_ADC, NULL);
 printk( "adc closed\n");
 return 0;
}

static void adc_setup_cdev(struct cdev *dev, int minor,
  struct file_operations *fops)
{
 int err, devno = MKDEV(adc_major, minor);
    
 cdev_init(dev, fops);
 dev->owner = THIS_MODULE;
 dev->ops = fops;
 err = cdev_add (dev, devno, 1);
 /* Fail gracefully if need be */
 if (err)
  printk (KERN_NOTICE "Error %d adding adc %d", err, minor);
}
static struct cdev AdcDevs;
static struct file_operations adc_remap_ops = {
 .owner =THIS_MODULE,
 .open = s3c2410_adc_open,
 .read = s3c2410_adc_read, 
 .write = s3c2410_adc_write,
 .release = s3c2410_adc_release,
};

int __init adc_init(void)
{
 /* normal ADC */
 writel(0,S3C2410_ADCTSC); //XP_PST(NOP_MODE);
 int result;
 dev_t dev = MKDEV(adc_major, 0);
 /* Figure out our device number. */
 if (adc_major)
  result = register_chrdev_region(dev, 1, "adc");
 else {
  result = alloc_chrdev_region(&dev, 0, 1, "adc");
  adc_major = MAJOR(dev);
 }
 if (result < 0) {
  printk(KERN_WARNING "adc: unable to get major %d\n", adc_major);
  return result;
 }
 if (adc_major == 0)                          
  adc_major = result;
 adc_setup_cdev(&AdcDevs, 0, &adc_remap_ops);
 printk("adc device installed, with major %d\n", adc_major);
 return 0;
}
static void adc_cleanup(void)
{
 cdev_del(&AdcDevs);
 unregister_chrdev_region(MKDEV(adc_major, 0), 1);
 printk("adc device uninstalled\n");
}

module_init(adc_init);
module_exit(adc_cleanup);
//MODULE_AUTHOR("Machuanlong");
//MODULE_LICENSE("Dual BSD/GPL");
///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
Makefile(驅動的)
///////////////////////////////////////////////////////////////////////////////////
ifeq ($(KERNELRELEASE),)
#KERNELDIR ?= /source/kernel/linux-2.6.8.1-farsight
KERNELDIR ?= /disk2/linux-2.6.14
PWD := $(shell pwd)
modules:
 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
 rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
.PHONY: modules modules_install clean
else
    obj-m := s3c2410_adc.o
endif
 
///////////////////////////////////////////////////////////////////////////////////
s3c2410-adc.h
///////////////////////////////////////////////////////////////////////////////////
#ifndef _S3C2410_ADC_H_
#define _S3C2410_ADC_H_
#define ADC_WRITE(ch, prescale) ((ch)<<16|(prescale))
#define ADC_WRITE_GETCH(data) (((data)>>16)&0x7)
#define ADC_WRITE_GETPRE(data) ((data)&0xff)
#define ADC_INPUT(x)  (x<<3)
#define PRSCVL(x)  (x<<6)
#endif /* _S3C2410_ADC_H_ */
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
測試程序:
main.c
///////////////////////////////////////////////////////////////////////////////////
/************************************************\
**HLG442 ADC-TEST
 /26/3/2008
Author machuanlong 
*      *
\***********************************************/
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/ioctl.h>
#include <pthread.h>
#include <fcntl.h>
#include "s3c2410-adc.h"
#define ADC_DEV  "/dev/adc"
static int adc_fd=-1;
static int GetADresult(int channel)
{
 int data;
 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;
int main(void)
{
 int i;
 float d;
 if((adc_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)GetADresult(i)*3.3)/1024.0;
   printf("a%d=%8.4f\t",i,d);
   printf("\n");
   sleep(1);
   printf("\r");
  
 }
 close(adc_fd);
 return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美mv日韩mv国产网站app| 国产成人精品免费一区二区| 精品国产乱码91久久久久久网站| 欧美性大战久久久久久久蜜臀| 成人性生交大片| 精品午夜久久福利影院| 九九九精品视频| 麻豆成人在线观看| 国产精品91xxx| 99久久婷婷国产| 欧美天堂一区二区三区| 色综合婷婷久久| 欧美精品一区二区三区高清aⅴ| 在线观看视频欧美| 日韩手机在线导航| 亚洲国产成人高清精品| 国产综合色在线视频区| 成人a级免费电影| 欧美在线观看视频一区二区三区| 成人av免费观看| 在线亚洲高清视频| 国产免费成人在线视频| 亚洲激情综合网| 香港成人在线视频| 国产白丝网站精品污在线入口| 色哟哟日韩精品| 久久精品在线观看| 亚洲综合网站在线观看| 国产在线精品一区二区三区不卡| av不卡一区二区三区| 久久久久久久久岛国免费| 亚洲bt欧美bt精品777| jizz一区二区| 日韩精品一区二区三区中文精品| 亚洲最色的网站| 欧美私人免费视频| 中文字幕欧美一| 国内外成人在线| 欧美日韩国产首页| 亚洲综合色自拍一区| 成人免费视频国产在线观看| 国产日韩欧美一区二区三区综合| 精品制服美女丁香| 日韩一区二区在线看片| 午夜久久久影院| 在线免费观看不卡av| 亚洲国产人成综合网站| 在线不卡一区二区| 狠狠色狠狠色合久久伊人| 欧美人体做爰大胆视频| 亚洲一区二区三区国产| 欧美精选一区二区| 久久福利资源站| 久久这里只有精品6| 韩国精品在线观看| 亚洲三级视频在线观看| 91麻豆swag| 日本三级韩国三级欧美三级| 日韩美女一区二区三区四区| 久久精品99久久久| 欧美激情在线观看视频免费| 一本到一区二区三区| 午夜私人影院久久久久| 国产日韩欧美麻豆| 久久影音资源网| 99久久久久久99| 玉米视频成人免费看| 日韩久久免费av| 欧美午夜在线观看| 成a人片亚洲日本久久| 五月婷婷综合在线| 国产精品久久精品日日| 69堂成人精品免费视频| 91麻豆精品秘密| 丁香啪啪综合成人亚洲小说| 亚洲大片一区二区三区| 中文字幕一区日韩精品欧美| 日韩一区二区不卡| 欧美伊人精品成人久久综合97| 久久国产精品无码网站| 天天色综合成人网| 亚洲免费av网站| 日本一区二区高清| 精品国产精品一区二区夜夜嗨| 在线观看成人免费视频| 欧美亚洲愉拍一区二区| 一本久久综合亚洲鲁鲁五月天 | 香蕉av福利精品导航| 亚洲资源中文字幕| 亚洲成人免费视| 三级精品在线观看| 日韩高清欧美激情| 极品美女销魂一区二区三区免费| 亚洲国产精品视频| 亚洲一区中文在线| 丝袜国产日韩另类美女| 日本不卡的三区四区五区| 美女视频免费一区| 国产精品12区| 91在线播放网址| 色婷婷亚洲综合| 精品久久久久久最新网址| 日韩免费在线观看| 国产精品午夜在线| 亚洲午夜影视影院在线观看| 青青青伊人色综合久久| 国产乱色国产精品免费视频| 丁香婷婷深情五月亚洲| caoporn国产一区二区| 在线观看日韩av先锋影音电影院| 欧美片网站yy| 国产精品国产自产拍高清av| 亚洲国产精品一区二区久久| 精品无人区卡一卡二卡三乱码免费卡| 色欧美乱欧美15图片| 天天影视涩香欲综合网| 青青草精品视频| 91香蕉国产在线观看软件| 欧美va亚洲va香蕉在线| 亚洲欧美偷拍三级| 国产高清久久久| 欧美一级日韩不卡播放免费| 亚洲色图视频网站| 国产麻豆精品在线| 精品国产一二三区| 日韩精品乱码av一区二区| 国产美女精品一区二区三区| 欧美福利电影网| 亚洲国产一区视频| 91成人在线精品| 亚洲一本大道在线| 欧美浪妇xxxx高跟鞋交| 亚洲资源在线观看| 欧美成人综合网站| 美女尤物国产一区| 在线亚洲免费视频| 日韩欧美在线综合网| 亚洲第一福利一区| 日本韩国欧美三级| 亚洲国产日韩精品| 日韩一本二本av| 精品一区二区三区蜜桃| 日韩欧美国产一区在线观看| 国产精品99久| 一区二区三区在线不卡| 91福利社在线观看| 日韩电影在线观看电影| 国产欧美日韩视频在线观看| 99精品视频一区二区三区| 国产精品青草综合久久久久99| 色香蕉久久蜜桃| 国产九九视频一区二区三区| 亚洲人成在线播放网站岛国 | 欧美疯狂做受xxxx富婆| 成人一区二区在线观看| 亚洲精品久久7777| 久久久久久久久久久久久夜| 成人av在线网站| 国产乱人伦偷精品视频免下载| 中文字幕永久在线不卡| 日韩欧美一级二级三级| 在线视频中文字幕一区二区| 国产中文字幕一区| 亚洲国产精品天堂| 一区二区三区四区不卡在线| 欧美大黄免费观看| 在线观看中文字幕不卡| 成人午夜视频网站| 91在线视频播放| 成人亚洲一区二区一| 国产精品一区二区果冻传媒| 久久精品国产99国产| 日韩电影免费在线观看网站| 亚洲欧美日韩综合aⅴ视频| 精品国产成人系列| 久久久久久久久蜜桃| 日韩精品一区二区三区中文不卡| 99精品国产91久久久久久| gogogo免费视频观看亚洲一| 99久久精品费精品国产一区二区| 国产aⅴ综合色| 成人久久18免费网站麻豆 | 欧美精品一区二区在线播放| www国产成人免费观看视频 深夜成人网| 欧美视频在线观看一区| 91精品久久久久久久91蜜桃| 欧美不卡一二三| 欧美一区二区三区免费视频| 色88888久久久久久影院按摩| 欧美电影一区二区三区| 亚洲精品一区二区在线观看| 久久久亚洲综合| 亚洲mv大片欧洲mv大片精品| 美国毛片一区二区| 成人免费视频视频| 欧洲色大大久久| 国产精品欧美久久久久一区二区| 亚洲黄色av一区| 久久国产精品99精品国产| av色综合久久天堂av综合|