首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ARM Linux S3C2440之ADC驱动实现(2)

ARM Linux S3C2440之ADC驱动实现(2)

  • static irqreturn_t adc_done_handler(int irq, void *dev_id)  
  • {  
  •     adc_dev.data = ADCDAT0 & 0x3ff;  
  •     adc_dev.flag = 1;  
  •     wake_up_interruptible(&adc_dev.wait);      //唤醒等待事件


  • return IRQ_HANDLED;  
  • }  


  • static
    struct file_operations dev_fops = {  
  •     .owner = THIS_MODULE,  
  •     .open  = adc_open,  
  •     .read  = adc_read,  
  • };  


  • static
    struct miscdevice misc = {  
  •     .minor = MISC_DYNAMIC_MINOR,  
  •     .name  = DEVICE_NAME,  
  •     .fops  = &dev_fops,  
  • };  


  • static
    int __init dev_init(void)  
  • {  

  • int ret;  

  •     ADC_REG_BASE = ioremap(S3C2410_PA_ADC,0x14);    //物理地址映射
  •     adc_clk = clk_get(NULL,"adc");  

  • if (!adc_clk) {  

  • return -ENOENT;  
  •     }  
  •     clk_enable(adc_clk);            //开启adc 时钟,系统开机时默认是关闭的

  •     ret = request_irq(IRQ_ADC,adc_done_handler,IRQF_SHARED,DEVICE_NAME,&adc_dev);   //分配中断线

  • if (ret) {  
  •        iounmap(ADC_REG_BASE);  

  • return ret;  
  •     }  

  •     ret = misc_register(&misc);      //注册设备


  • return ret;  
  • }  



  • static
    void __exit dev_exit(void)  
  • {  
  •     misc_deregister(&misc);  
  • }  

  • module_init(dev_init);  
  • module_exit(dev_exit);  

  • MODULE_LICENSE("GPL");  
  • MODULE_AUTHOR("itspy");  
  • MODULE_DESCRIPTION("adc driver test");  
继承事业,薪火相传
返回列表