mini2440 驱动ds18b20

发布者:superstar11最新更新时间:2024-06-24 来源: elecfans关键字:mini2440  驱动ds18b20 手机看文章 扫描二维码
随时随地手机看文章
  •        write_ds18b20(0xbe);                          //读取RAM   

  •     result[0] = read_ds18b20();                   //读低8位,存放在result[0]   

  •     result[1] = read_ds18b20();                   //读高8位,存放在result[1]   

  •     ds18b20_reset();  

  •     err = copy_to_user(buf, &result, sizeof(result));  

  •     return err ? -EFAULT : min(sizeof(result), size);  

  • }  

  •   

  • static int ds18b20_release(struct inode *inode,struct file *filp)  

  •   

  • {  

  •     return 0;  

  • }  

  •   

  • static const struct file_operations ds18b20_fops={  

  •     .owner=THIS_MODULE,   

  •     .read=ds18b20_read,  

  •     .open=ds18b20_open,  

  •     .release=ds18b20_release,  

  •   

  • };  

  • void ds18b20_setup_dev(struct ds18b20_dev *dev,int minor)  

  • {  

  •     int err;  

  •     int devno;  

  •     devno = MKDEV(ds18b20_major,minor);  

  •     cdev_init(&dev->cdev,&ds18b20_fops);  

  •     dev->cdev.owner=THIS_MODULE;  

  •     dev->cdev.ops=&ds18b20_fops;  

  •     err=cdev_add(&dev->cdev,devno,1);  

  •     if(err)  

  •         printk(KERN_NOTICE 'Error %d adding %dn',err,minor);  

  • }  

  •   

  • static int  __init ds18b20_init(void)  

  • {  

  •     int result;  

  •     dev_t devno = 0;  

  •       

  •     if(ds18b20_major){  

  •         devno = MKDEV(ds18b20_major,ds18b20_minor);  

  •         result = register_chrdev_region(devno,1,DEV_NAME);  

  •     }  

  •     else{  

  •         result = alloc_chrdev_region(&devno,0,1,DEV_NAME);  

  •         ds18b20_major = MAJOR(devno);  

  •     }  

  •     if(result < 0)  

  •         return result;  

  •     ds18b20_devp = kmalloc(sizeof(struct ds18b20_dev),GFP_KERNEL);  

  •     if(ds18b20_devp){  

  •         result = -ENOMEM;  

  •         goto fail_malloc;  

  •     }  

  •     memset(ds18b20_devp,0,sizeof(struct ds18b20_dev));  

  •     ds18b20_setup_dev(ds18b20_devp,0);  

  •     my_class = class_create(THIS_MODULE,'ds18b20_class');  

  •     /*在linux 2.6.27之前是:class_device_create*/  

  •     my_device = device_create(my_class,NULL,MKDEV(ds18b20_major, ds18b20_minor),NULL,'ds18b20');  

  •     return 0;  

  •     fail_malloc:  

  •         unregister_chrdev_region(devno,1);  

  •         return result;  

  • }  

  •   

  • static void __exit ds18b20_exit(void)  

  • {  

  •     cdev_del(&ds18b20_devp->cdev);  

  •     kfree(ds18b20_devp);  

  •     device_destroy(my_class, MKDEV(ds18b20_major, ds18b20_minor));//删除设备文件 /dev/ds18b20    

  •     class_destroy(my_class);   //删除创建的bus   

  •     unregister_chrdev_region(MKDEV(ds18b20_major,ds18b20_minor),1);  

  • }  

  •   

  • module_init(ds18b20_init);  

  • module_exit(ds18b20_exit);  

  •   

  • MODULE_LICENSE('GPL');  

  • MODULE_AUTHOR('WIOT');  


  • 应用程序代码:

    1. #include    

    2. #include    

    3. #include    

    4. #include    

    5.   

    6. void ds18b20_delay(int i)  

    7. {  

    8.     int j, k;  

    9.     for (j = 0; j < i; j++)  

    10.         for(k = 0; k < 50000; k++);  

    11. }  

    12.   

    13.   

    14.   

    15. int main(int argc,char **argv)  

    16. {  

    17.     int fd, i;  

    18.     unsigned char result[2];  

    19.     unsigned int Temp;  

    20.     unsigned char Temperature[7];         //显示温度用的buffer   

    21.     fd = open('/dev/ds18b20',0);       

    22.     if(fd < 0){  

    23.         perror('open device failed!n');  

    24.         exit(1);  

    25.     }  

    26.     while(1){  

    27.         read(fd,&result,sizeof(result));  

    28.         Temp = ((result[1]<<8)|result[0])*6.25; //这个是为了让温度后面有两位小数   

    29.         Temperature[0] = Temp/1000+48;      

    30.         Temperature[1] = Temp%1000/100+48;  

    31.         Temperature[2] = '.';  

    32.         Temperature[3] = Temp%100/10+48;  

    33.         Temperature[4] = Temp%10+48;  

    34.         Temperature[5] = ' ';  

    35.         Temperature[6] = 'C';  

    36.         printf('The temperature is:%sn',Temperature);  

    37.         ds18b20_delay(1000);  

    38.     }  

    39.     return 0;  

    40. }   

    驱动放弃了好长时间了啊,要捡起来,并且深入。以后还是要坚定自己的选择。既然对这个感兴趣,就要经常的去折腾。 


    [1] [2]
    关键字:mini2440  驱动ds18b20 引用地址:mini2440 驱动ds18b20

    上一篇:mini2440 编译U-Boot-1.1.6遇到的一些问题
    下一篇:U-Boot-2011.03移植nandflash到mini2440

    推荐阅读最新更新时间:2024-11-02 05:13

    mini2440上移植QT
    QT下载:http://download.qt-project.org/ qt-everywhere-opensource-src-4.8.4.tar.gz:http://download.qt-project.org/archive/qt/ tslib下载:https://github.com/libts/tslib/releases 编译安装QT-X11-4.5.3 QT-X11-4.5.3是运行于linux平台下用于仿真QT应用程序的软件,这样你便可以在linux平台下把你应用程序都调试好,然后再利用QT4.5.3把应用程序编译成ARM版本下载至开发板,这样你就可以在开发板上运行你的QT应用程序了。 下面是安装步骤:
    [单片机]
    <font color='red'>mini2440</font>上移植QT
    记录一下自己在mini2440上面 使用uboot的曲折的经历
    记录一下自己在mini2440上面 使用uboot的曲折的经历。 首先是使用了买板子时自带的代码: u-boot-1.1.6。但是编译时,总是提示有错误。也不知道这个版本是不是tekk的那个版本,自己修改了一些地方,但是感觉uboot的编译体系与一般的开源软件不相同,编译时,总是提示 有函数的实现找不到,即undefined reference to _,,,,网上说需要在makefile中添加 nostdlib等选项,但依然无法编译通过。 后来下载了 tekk的版本,貌似大家用的都是他的版本。 先说一下supervivi和uboot的区别。 在mini2440在norflash中烧写的是supervivi,super
    [单片机]
    mini2440裸机程序LED
    .text .global _start _start: ldr r0,=0x56000010 mov r1,#0x15400 str r1, ldr r0,=0x56000014 mov r1,#0x00 str r1, halt: b halt ****************************************** led_on.bin:led_on.S arm-linux-gcc -c -o led_on.o led_on.S arm-linux-ld -Ttext 0x00000000 led_on.o -o led_on_elf arm-linux-objcopy -O b
    [单片机]
    友善之臂Mini2440之嵌入式Linux下应用程序对Nand Flash的读写操作
    接上篇继续分析Nand Flash驱动:Nand Flash的设备探测函数s3c24xx_nand_probe的动作。 s3c24xx_nand_probe函数首先创建代表MTD原始设备的数据结构体struct mtd_info *mtd,并将其初始化,源代码如下所示: /* s3c24xx_nand_probe * called by device layer when it finds a device matching one our driver can handled. This code checks to see if * it can allocate all necessary resources t
    [单片机]
    【ARM】使用J-Link下载u-boot到Mini2440开发板
    #1各种引导系统介绍 ##1.1 bios 1 BIOS是英文 Basic Input Output System 的缩略语,直译过来后中文名称就是 基本输入输出系统 。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。 ##1.2 Grub 2 GNU GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的
    [单片机]
    【ARM】使用J-Link下载u-boot到<font color='red'>Mini2440</font>开发板
    DS18B20驱动程序
    /******************************************************************** 程序名称:DS18B20演示实验 时钟频率:内部RC 8M 芯片 :DS18B20 引脚 :**PA0 DATA** **PD0--PD7接数码管扫描端1--8** **PC0--PC7接数码管扫描端。.A--G** ********************************************************************/ #include iom16v.h #include macros.h #define DQ_H PORTA|=BIT
    [单片机]
    mini2440 入门块设备驱动(用RAM缓存模拟磁盘)代码记录(内核用的是2.6.32.2)
    #include linux/module.h #include linux/errno.h #include linux/interrupt.h #include linux/mm.h #include linux/fs.h #include linux/kernel.h #include linux/timer.h #include linux/genhd.h #include linux/hdreg.h #include linux/ioport.h #include linux/init.h #include linux/wait.h #include linux/blkdev.h #includ
    [单片机]
    基于STM32自码DS18B20驱动程序
    DS18B20是一款单总线可编程分辨率的数字温度计,详细内容可见中英文datasheet,笔者不在赘述。 很早就接触到的温度传感器,也相信每一个曾学习过嵌入式开发的人都用过,笔者在STM32F4上自码DS18B20驱动,有些小小心得: DS18B20的控制流程 根据DS18B20的通信协议,DS18B20只能作为从机,而单片机系统作为主机,单片机控制DS18B20完成一次温度转换必须经过3个步骤:复位、发送ROM指令、发送RAM指令。每次对DS18B20的操作都要进行以上三个步骤。 复位过程为:单片机将数据线拉低至少480uS,然后释放数据线,等待15-60uS让DS18B20接收信号,DS18B20接收到信号后,会把数据线拉
    [嵌入式]
    小广播
    设计资源 培训 开发板 精华推荐

    最新单片机文章
    何立民专栏 单片机及嵌入式宝典

    北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved