查看: 2587|回复: 7

TQ2440 adc+中断 驱动

[复制链接]
  • TA的每日心情
    奋斗
    2018-3-5 10:57
  • 签到天数: 112 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2016-3-24 15:49:43 | 显示全部楼层 |阅读模式
    分享到:
      TQ2440 是由广州天嵌计算机科技有限公司精心打造的一款开发板。以稳定的性能,过硬的质量,丰富的扩展接口,优质的售后服务和技术支持,赢得众多企业的青睐和支持。
      基于tq2440开发板,内核2.6.30
      功能
      能进中断了,而且通道2读出来的数据也正确。
      点击触摸屏的时候可能会混淆。因为触摸屏用的也是 adc-irq .
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #define DEVICE_NAME "driver_adc"
      volatile unsigned long *adccon = NULL; //adc控制寄存器
      volatile unsigned long *adctsc = NULL; //adc 触摸屏控制寄存器
      volatile unsigned long *adcdly = NULL; //adc 起始延迟寄存器
      volatile unsigned long *adcdat0 = NULL; //adc 转换数据寄存器
      volatile unsigned long *adcdat1 = NULL; //adc 转换数据寄存器
      volatile unsigned long *intmsk = NULL;
      //*gpbdat &= ~((1<<5) );
      //ain2
      static DECLARE_WAIT_QUEUE_HEAD(adc_waitq);
      static volatile int val=0;
      static volatile int ev_press = 0;
      static irqreturn_t adc_irq(int irq, void *dev_id)
      {
      printk("-------------adc_irq is ok ------------\n");
      ev_press=1;
      //*adccon |= 0X1; //开始转换
      val=(*adcdat0&0x3ff);
      wake_up_interruptible(&adc_waitq);
      return IRQ_RETVAL(IRQ_HANDLED);
      }
      // ------------------- OPEN ------------------------
      ssize_t drive_open (struct inode * inode ,struct file * file)
      {
      printk("-----------------drive open ok----------------\n");
      request_irq(IRQ_ADC,adc_irq, IRQF_SAMPLE_RANDOM|IRQF_SHARED,"adc_irq",1);
      return 0;
      }
      // ------------------- RELEASE/CLOSE ---------------
      ssize_t drive_release (struct inode * inode ,struct file * file)
      {
      printk("-----------------drive close ok----------------\n");
      free_irq(IRQ_ADC, 1);
      return 0;
      }
      // ------------------- READ ------------------------
      ssize_t drive_read (struct file * file ,char * buf, size_t count, loff_t * f_ops)
      {
      printk("-----------------drive read ok----------------\n");
      *adccon |= (1<<14)|(0xff<<6)|(2<<3);//设置分频倍数0xff,设置输入通道为2
      //*intmsk |= (1<<31)| (1<<5)|(1<<8);
      *adccon |= 0X1; //开始转换
      wait_event_interruptible(adc_waitq, ev_press);
      ev_press = 0;
      /*
      while( !(*adccon & 0x8000) ) //等待转换结束
      ;
      val=(*adcdat0&0x3ff);
      */
      *adccon &=~1; //关adc
      printk("----------------drive -----val=%d \n",val);
      copy_to_user( buf,&val,sizeof(val) );
      printk("---------------drive-close-ok-------------\n",val);
      return val;
      }
      // ------------------- WRITE -----------------------
      ssize_t drive_write (struct file * file ,const char * buf, size_t count, loff_t * f_ops)
      {
      printk("-----------------drive write ok----------------\n");
      return 0;
      }
      // ------------------- IOCTL -----------------------
      ssize_t drive_ioctl (struct inode * inode ,struct file * file, unsigned int cmd, unsigned long arg)
      {
      printk("-----------------drive ioctl ok----------------\n");
      return 0;
      }
      // -------------------------------------------------
      static struct file_operations drive_ops ={
      .owner = THIS_MODULE,
      .open = drive_open,
      .read = drive_read,
      .write = drive_write,
      .ioctl = drive_ioctl,
      .release = drive_release,
      };
      static struct miscdevice misc = {
      .minor = MISC_DYNAMIC_MINOR,
      .name = DEVICE_NAME,
      .fops = &drive_ops,
      };
      static int __init init_drive(void)
      {
      int ret;
      ret = misc_register(&misc);
      adccon = (volatile unsigned long *)ioremap(0x58000000, 16);
      adctsc = (volatile unsigned long *)ioremap(0x58000004, 8);
      adcdly = (volatile unsigned long *)ioremap(0x58000008, 16);
      adcdat0= (volatile unsigned long *)ioremap(0x5800000c, 16);
      adcdat1= (volatile unsigned long *)ioremap(0x58000010, 16);
      intmsk = (volatile unsigned long *)ioremap(0x4a000008, 32);
      printk("-----------------drive button init ok----------------\n");
      return 0;
      }
      static void __exit exit_drive(void)
      {
      misc_deregister(&misc);
      printk("-----------------drive button exit ok----------------\n");
      }
      module_init(init_drive);
      module_exit(exit_drive);
      MODULE_LICENSE("GPL");
      //-------------------------------------应用程序------------------------------------------------
      #include
      #include
      #include
      #include // open() close()
      #include // read() write()
      #define DEVICE_NAME "/dev/driver_adc"
      //------------------------------------- main ---------------------------------------------
      int main(int argc, char **argv)
      {
      int fd,ret;
      int val;
      fd = open(DEVICE_NAME, O_RDWR);
      if (fd == -1)
      {
      printf("can't open device mknod %s c zhu ci \n",DEVICE_NAME);
      return 0;
      }
      while(1)
      {
      read(fd,&val,sizeof(val));
      printf("------------------app--------------------\n");
      printf("val=%d\n",val);
      sleep(3);
      }
      // close
      ret = close(fd);
      if (ret == -1)
      {
      printf("app close error!!!!!!!!!!\n");
      return 0;
      }
      return 0;
      }// end main
      感谢chen4013874的分享!
      供货情况:
      天嵌科技提供专业嵌入式板卡和行业解决方案。如有需要,可以联系天嵌科技的销售人员。
      销售电话:020-38219416 38373101
      技术支持:020-38219416转807 820
      网址:http://www.embedsky.com

    回复

    使用道具 举报

    该用户从未签到

    发表于 2016-3-25 15:34:42 | 显示全部楼层
    路过,帮顶一下。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-17 17:27
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2016-3-26 14:44:55 | 显示全部楼层
    楼主继续努力哈,最近还推荐了几个朋友用天嵌的,幸亏你们持续的更新共享资源,要不我读没法向朋友交代了。谢谢楼主,继续挺天嵌!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-3-29 10:52:35 | 显示全部楼层
    lzh2 发表于 2016-3-26 14:44
    楼主继续努力哈,最近还推荐了几个朋友用天嵌的,幸亏你们持续的更新共享资源,要不我读没法向朋友交代了。 ...

    刚学嵌入式用的就是tq2440这套板子,真心不错,主要是资料比较齐全!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-3-29 11:47:39 | 显示全部楼层
    这么棒的帖子,得推荐朋友好好来瞧瞧~
    楼主辛苦了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-3-5 10:57
  • 签到天数: 112 天

    连续签到: 1 天

    [LV.6]常住居民II

     楼主| 发表于 2016-3-30 15:55:55 | 显示全部楼层
    lzh2 发表于 2016-3-26 14:44
    楼主继续努力哈,最近还推荐了几个朋友用天嵌的,幸亏你们持续的更新共享资源,要不我读没法向朋友交代了。 ...

    哈哈哈哈多谢亲的大力支持,我们将更加努力地更新,方便亲们的开发
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-3-30 16:38:37 | 显示全部楼层
    大力支持顶起
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-3-31 09:13:17 | 显示全部楼层
    资料挺多的,很适合学些,谢谢楼主分享,以后继续用你们家板子!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-26 15:21 , Processed in 0.188890 second(s), 29 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.