这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 2410里的ADC怎么用阿?

共2条 1/1 1 跳转至

2410里的ADC怎么用阿?

菜鸟
2005-01-17 21:05:01     打赏
这个驱动怎么没有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



关键词: 2410里     怎么     用阿    

菜鸟
2005-01-20 00:08:00     打赏
2楼
看见了,谢谢sunmoon,刚开始学习linux驱动:)以后还要多请教你。

共2条 1/1 1 跳转至

回复

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