这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 帮忙看看这个ADC的驱动

共3条 1/1 1 跳转至

帮忙看看这个ADC的驱动

菜鸟
2005-01-17 21:01:05     打赏
这个驱动怎么没有file_operations,没有open操作?初始化的时候也没有注册设备? 编译以及insmod都没问题。我的板子是s3c2410,系统是mizi的armlinux。 应用程序怎么用这个驱动啊? #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> #undef DEBUG #ifdef DEBUG #define DPRINTK(x...) {printk(__FUNCTION__"(%d): ",__LINE__);printk(##x);} #else #define DPRINTK(x...) (void)(0) #endif #define START_ADC_AIN(x) \ { \ ADCCON = PRESCALE_EN | PRSCVL(255) | ADC_INPUT((x)) ; \ ADCCON |= ADC_START; \ } static struct semaphore adc_lock; static wait_queue_head_t *adc_wait; static void adcdone_int_handler(int irq, void *dev_id, struct pt_regs *reg) { wake_up(adc_wait); } int s3c2410_adc_read(int ain, wait_queue_head_t *wait) { int ret = 0; if (down_interruptible(&adc_lock)) return -ERESTARTSYS; adc_wait = wait; START_ADC_AIN(ain); sleep_on_timeout(adc_wait, HZ/100); /* 10ms */ #if 0 if (signal_pending(current)) { up(&adc_lock); return -ERESTARTSYS; } #endif ret = ADCDAT0 ; up(&adc_lock); adc_wait = NULL; DPRINTK("AIN[%d] = 0x%04x, %d\n", ain, ret, ADCCON & 0x80 ? 1:0); return (ret & 0x3ff); } int __init s3c2410_adc_init(void) { init_MUTEX(&adc_lock); /* normal ADC */ ADCTSC = 0; //XP_PST(NOP_MODE); if (request_irq(IRQ_ADC_DONE, adcdone_int_handler, SA_INTERRUPT, "ADC", NULL) < 0) goto irq_err; return 0; irq_err: return 1; } module_init(s3c2410_adc_init); #ifdef MODULE void __exit s3c2410_adc_exit(void) { free_irq(IRQ_ADC_DONE, NULL); } module_exit(s3c2410_adc_exit); MODULE_LICENSE("GPL"); #endif



关键词: 帮忙     看看     这个     驱动    

菜鸟
2005-01-18 23:22:00     打赏
2楼

没人写驱动的吗?


菜鸟
2005-01-19 23:56:00     打赏
3楼

那应该怎么改阿?read()里的参数wait_queue_head_t *wait怎么用?应用程序调用难道要传这个参数?


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]