DS18B20在linux下跑起来.docVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DS18B20在linux下跑起来

/jammy_lee/ http://21 DS18B20在linux下跑起来 上次的让LED在linux下闪烁起来可算是困难重重,毕竟是刚入手。这次的DS18B20加载到linux同样是个探险之旅。在不断的摸索、尝试,最后还是有点小成果。现在写下笔记,希望能与同路人分享交流。 在加载到linux之前,我先确保DS18B20在无OS的环境下能正常工作,即“裸奔”。这个阶段也不是一路顺利,虽然以前有在单片机下驱动DS18B20的经验,但是在ARM延时确实是个问题。上网搜索一下,有的人用定时器延时,有的就直接程序耗时的方式延时。急于求成的我,为了避免使用定时器又出现新的麻烦,唯有使用后者的方法。好了,解决延时问题,DS18B20也自然运行起来,没有辜负我!哈~ “裸奔”成功之后,现在就要给DS18B20披上linux的大衣。这次同样是将它以字符型设备驱动。按上次驱动LED的过程照葫芦画瓢,一个驱动程序,一个测试程序。 ? 驱动程序 驱动程序对比上次有所加深,多使用了几个系统调用函数。 ? open()函数,对设备特殊文件进行open()系统调用时,将调用驱动程序的open () 函数: int (*open)(struct inode * ,struct file *); 其中参数inode为设备特殊文件的inode (索引结点) 结构的指针,参数file是指向这一设备的文件结构的指针。open()的主要任务是确定硬件处在就绪状态、验证次设备号的合法性(次设备号可以用MINOR(inode- i - rdev) 取得)、控制使用设备的进程数、根据执行情况返回状态码(0表示成功,负数表示存在错误) 等。 ? read()函数。当对设备特殊文件进行read() 系统调用时,将调用驱动程序read() 函数: ?? ssize_t (*read) (struct file *, char *, size_t, loff_t *); 来从设备中读取数据。当该函数指针被赋为NULL 值时,将导致read 系统调用出错并返回-EINVAL(Invalid argument,非法参数)。函数返回非负值表示成功读取的字节数(返回值为signed size数据类型,通常就是目标平台上的固有整数类型)。 ? release()函数,当最后一个打开设备的用户进程执行close ()系统调用时,内核将调用驱动程序的release () 函数: void (*release) (struct inode * ,struct file *) ; release 函数的主要任务是清理未结束的输入/输出操作、释放资源、用户自定义排他标志的复位等。 ? 程序如下: /************************************************************/ //文件名:ds18b20.c //功能:linux下的ds18b20驱动程序 //使用说明: (1) //????????? (2) //????????? (3) //????????? (4) //作者:jammy-lee //日期:2009-03-31 /************************************************************/ //包含头文件 #include linux/init.h #include linux/delay.h #include linux/fs.h #include linux/module.h #include linux/kernel.h ? #include asm/uaccess.h #include asm-arm/arch-s3c2410/regs-gpio.h #include asm/irq.h #inculde asm/hardware.h #include asm/arch/regs-gpio.h #include asm/io.h #include asm/arch/map.h #include asm-arm/plat-s3c24xx/clock.h #include asm/arch/regs-clock.h ? //DS18B20端口的定义 #define DQ_PIN S3C2410_GPG14 #define DQ_IN S3C2410_GPG14_INP #define DQ_OUT S3C2410_GPG14_OUTP ? #define DEVICE_NAME DS18B20 //驱动设备的名称,可以使用命令 cat /proc/devices #define DS18B20_MAJOR

您可能关注的文档

文档评论(0)

ligennv1314 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档