tiny6410温度传感器驱动学习1(测试通过)
来源:互联网 发布:程序员自由职业平台 编辑:程序博客网 时间:2024/05/02 00:02
参考http://www.arm9home.net/read.php?tid-16249.html的驱动代码如下
#include <linux/module.h>#include <linux/fs.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/cdev.h>#include <linux/device.h>#include <linux/gpio.h>#include <plat/gpio-cfg.h>#define DEVICE_NAME "temp" //设备名字static struct cdev cdev; struct class *tem_class;static dev_t devno;static int major = 243;void tem_reset(void){ s3c_gpio_cfgpin(S3C64XX_GPN(8), S3C_GPIO_SFN(1)); gpio_set_value(S3C64XX_GPN(8), 1); udelay(100); gpio_set_value(S3C64XX_GPN(8), 0); udelay(600); gpio_set_value(S3C64XX_GPN(8), 1); udelay(100); s3c_gpio_cfgpin(S3C64XX_GPN(8), S3C_GPIO_SFN(0));}void tem_wbyte(unsigned char data){ int i; s3c_gpio_cfgpin(S3C64XX_GPN(8), S3C_GPIO_SFN(1)); for (i = 0; i < 8; ++i) { gpio_set_value(S3C64XX_GPN(8), 0); udelay(1); if (data & 0x01) { gpio_set_value(S3C64XX_GPN(8), 1); } udelay(60); gpio_set_value(S3C64XX_GPN(8), 1); udelay(15); data >>= 1; } gpio_set_value(S3C64XX_GPN(8), 1);}unsigned char tem_rbyte(void){ int i; unsigned char ret = 0; for (i = 0; i < 8; ++i) { s3c_gpio_cfgpin(S3C64XX_GPN(8), S3C_GPIO_SFN(1)); gpio_set_value(S3C64XX_GPN(8), 0); udelay(1); gpio_set_value(S3C64XX_GPN(8), 1); s3c_gpio_cfgpin(S3C64XX_GPN(8), S3C_GPIO_SFN(0)); ret >>= 1; if (gpio_get_value(S3C64XX_GPN(8))) { ret |= 0x80; } udelay(60); } s3c_gpio_cfgpin(S3C64XX_GPN(8), S3C_GPIO_SFN(1)); return ret;}static ssize_t tem_read(struct file *filp, char *buf, size_t len, loff_t *offset){ unsigned char low, high; tem_reset(); udelay(420); tem_wbyte(0xcc); tem_wbyte(0x44); mdelay(750); tem_reset(); udelay(400); tem_wbyte(0xcc); tem_wbyte(0xbe); low = tem_rbyte(); high = tem_rbyte(); *buf = low / 16 + high * 16; *(buf + 1) = (low & 0x0f) * 10 / 16 + (high & 0x0f) * 100 / 16 % 10; return 0;}static struct file_operations tem_fops = { .owner = THIS_MODULE, .read = tem_read,};static int __init tem_init(void){ int result; devno = MKDEV(major, 0); result = register_chrdev_region(devno, 1, DEVICE_NAME); if (result) { printk("register failed\n"); return result; } cdev_init(&cdev, &tem_fops); cdev.owner = THIS_MODULE; cdev.ops = &tem_fops; result = cdev_add(&cdev, devno, 1); if (result) { printk("cdev add failed\n"); goto fail1; } tem_class = class_create(THIS_MODULE, "tmp_class"); if (IS_ERR(tem_class)) { printk("class create failed\n"); goto fail2; } device_create(tem_class, NULL, devno, DEVICE_NAME, DEVICE_NAME); return 0;fail2: cdev_del(&cdev);fail1: unregister_chrdev_region(devno, 1); return result;}static void __exit tem_exit(void){ device_destroy(tem_class, devno); class_destroy(tem_class); cdev_del(&cdev); unregister_chrdev_region(devno, 1);}module_init(tem_init);module_exit(tem_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR(nanjizhiyin@sina.com);
#include "stdio.h"#include "sys/types.h"#include "sys/ioctl.h"#include "stdlib.h"#include "termios.h"#include "sys/stat.h"#include "fcntl.h"#include "sys/time.h"main(){ int fd; unsigned char buf[2]; if ((fd=open("/dev/temp",O_RDWR | O_NDELAY | O_NOCTTY)) < 0) { printf("Open Device DS18B20 failed.\r\n"); exit(1); } else { printf("Open Device DS18B20 successed.\r\n"); while(1) { read(fd, buf, sizeof(buf)); printf("%d.%dC\r\n", buf[0], buf[1]); sleep(1); } close(fd); }}
- tiny6410温度传感器驱动学习1(测试通过)
- tiny6410温度传感器2(测试中)
- tiny6410--SHT10温度传感器
- 移植ads7846驱动到tiny6410(tiny6410)
- 移植ads7846驱动到tiny6410(tiny6410)
- 基于ARM-LINUX的温度传感器驱动18B20(1)
- tiny6410温度传感器详细开发步骤
- tiny6410温度传感器详细开发步骤
- S3C2440 温度传感器ds18b20的驱动编写与测试--比较详细的1-wire
- S3C2440 温度传感器ds18b20的驱动编写与测试
- arm+linux fl2440 ds18b20 温度传感器驱动编写及测试
- 【Tiny6410 And Linux】—(6.1)—LCD 驱动测试程序——原理
- 【Tiny6410 And Linux】—(6.1)—LCD 驱动测试程序——代码
- S3C6410 DS18B20温度传感器驱动(三) --- 驱动源代码
- linux ds18b20 温度传感器驱动
- 详解温度传感器tmp275驱动
- stm32 驱动DS18B20温度传感器
- tiny6410 蜂鸣器字符设备驱动<1>
- 利用NamingContainer属性获取GridView行号【转】
- Jetspeed2学习笔记(四)(转载)
- MIPI 资料 1
- 关于OpenGL矩阵的左乘与列主序
- Spring 中的数据源
- tiny6410温度传感器驱动学习1(测试通过)
- 创业者获得第一笔投资的秘密
- HyperLink与LinkButton的区别
- 寻找最大的子串(分治法)
- java设计模式(简洁版)
- ios学习--sqlite 操作工具 FMDB
- C#获取屏幕大小或任务栏大小
- 活动目录(Active Directory)小结 【转载】
- Jetspeed2学习笔记(五)(转载)