• 大小: 19KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-10
  • 语言: 其他
  • 标签: ds18b20  驱动  linux  2440  

资源简介

在友善之臂mini2440上基于linux下的字符设备的ds18b20的驱动,是用gpio模拟的。还有相关测试的应用程序。

资源截图

代码片段和文件信息

#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 “ds18b20.h“

static int sensor_major=SENSOR_MAJOR;
static int sensor_minor=SENSOR_MINOR;

dev_t dev;

struct cdev sensor;

static unsigned char Sensor_Init(void)
{
unsigned char presence=1;

s3c2410_gpio_cfgpin(DQDQ_OUTPUT);
s3c2410_gpio_setpin(DQ1);
udelay(1);
s3c2410_gpio_setpin(DQ0);
udelay(480);
s3c2410_gpio_cfgpin(DQDQ_INPUT);
udelay(55);
s3c2410_gpio_cfgpin(DQDQ_INPUT);
presence = s3c2410_gpio_getpin(DQ);
udelay(200);
return (presence);

}

static void Write_One_Bit(unsigned char Bit)
{
s3c2410_gpio_cfgpin(DQDQ_OUTPUT);
s3c2410_gpio_setpin(DQ0);
udelay(2);
if(Bit==1)s3c2410_gpio_setpin(DQ1);
udelay(65);
s3c2410_gpio_setpin(DQ1);
udelay(2);
}

static unsigned char Read_One_Bit(void)
{
unsigned char Bit;

s3c2410_gpio_cfgpin(DQDQ_OUTPUT);
s3c2410_gpio_setpin(DQ0);
udelay(1);
s3c2410_gpio_setpin(DQ1);
s3c2410_gpio_cfgpin(DQDQ_INPUT);
udelay(13);
Bit = s3c2410_gpio_getpin(DQ);
udelay(65);
s3c2410_gpio_cfgpin(DQDQ_OUTPUT);
s3c2410_gpio_setpin(DQ1);

return (Bit);
}

static void Write_One_Byte(unsigned char Byte)
{
unsigned char loop;
unsigned char temp;
for(loop=0;loop<8;loop++){
temp = Byte>>loop;
temp&= 0x01;
Write_One_Bit(temp);
}
udelay(104);
}

static unsigned char Read_One_Byte(void)
{
int loop;
unsigned char Byte=0;
for(loop=0;loop<8;loop++){
if(Read_One_Bit())Byte|=(0x01< }
return (Byte);
}

static ssize_t sensor_open(struct inode *inodestruct file *filp)
{
if(!Sensor_Init())
{
Write_One_Byte(SKIP_ROM);
Write_One_Byte(WRITE_SCRATCHPAD);
Write_One_Byte(TH);
Write_One_Byte(TL);
Write_One_Byte(BIT_12);
Sensor_Init();
Write_One_Byte(WRITE_SCRATCHPAD);
Write_One_Byte(COPY_SCRATCHPAD);
}
else
{
printk(“init failed!\n“);
}
return 0;
}

static ssize_t sensor_read(struct file *filpchar __user *bufsize_t sizeloff_t *ppos)
{
int tempLtempMret;
Sensor_Init();
Write_One_Byte(SKIP_ROM);
Write_One_Byte(CONVERT_T);
mdelay(750);
Sensor_Init();
Write_One_Byte(SKIP_ROM);
Write_One_Byte(READ_SCRATCHPAD);
tempL=Read_One_Byte();
tempM=Read_One_Byte();
tempM<<=8;
tempM|=tempL;
ret=copy_to_user(buf&tempMsize);
if(ret>0){
return -EFAULT;
}
return 0;
}

int sensor_release(struct inode *inodestruct file *filp)
{
return 0;
}

static const struct file_operations sensor_fops=
{
.owner = THIS_MODULE
.read =

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        233  2011-12-23 19:21  DS18B20\.ds18b20.ko.cmd

     文件      15102  2011-12-23 15:38  DS18B20\.ds18b20.mod.o.cmd

     文件      25585  2011-12-23 19:21  DS18B20\.ds18b20.o.cmd

     文件         67  2011-12-23 19:21  DS18B20\.tmp_versions\ds18b20.mod

     文件       3860  2011-12-23 19:20  DS18B20\ds18b20.c

     文件        900  2011-12-23 15:34  DS18B20\ds18b20.h

     文件       4906  2011-12-23 19:21  DS18B20\ds18b20.ko

     文件        444  2011-12-23 15:38  DS18B20\ds18b20.mod.c

     文件       1492  2011-12-23 15:38  DS18B20\ds18b20.mod.o

     文件       4156  2011-12-23 19:21  DS18B20\ds18b20.o

     文件        195  2011-12-22 22:34  DS18B20\Makefile

     文件          0  2011-12-23 15:38  DS18B20\Module.symvers

     文件         41  2011-12-23 19:21  DS18B20\modules.order

     文件      14493  2011-12-23 19:24  DS18B20\tem

     文件        490  2011-12-23 19:24  DS18B20\tem.c

    ..AD...         0  2011-12-23 19:21  DS18B20\.tmp_versions

    ..AD...         0  2011-12-23 20:44  DS18B20

----------- ---------  ---------- -----  ----

                71964                    17


评论

共有 条评论