資源簡介
自己編寫的基于linux在mini2440開發板上運行的溫濕度傳感器驅動代碼,可以正常使用碼,包括已經編譯好的文件和測試程序
代碼片段和文件信息
#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?“dht11“
static?char?DHT11_read_byte?(?void?)
{
char?DHT11_byte?;
unsigned?char?i?;
unsigned?char?temp?;
DHT11_byte?=?0?;
for?(?i?=?0?;?i?8?;?i?++?)
{
temp?=?0?;
while?(?!?(s3c2410_gpio_getpin?(?S3C2410_GPF(0)?)?)?)
{
temp?++?;
if?(?temp?>?12?)
return?1?;
udelay?(?5?)?;
}
temp?=?0?;
while?(?s3c2410_gpio_getpin?(?S3C2410_GPF(0)?)?)
{
temp?++?;
if?(?temp?>?20?)
return?1?;
udelay?(?5?)?;
}
if?(?temp?>?6?)
{
DHT11_byte?<<=?1?;
DHT11_byte?|=?1?;
}?
else
{
DHT11_byte?<<=?1?;
DHT11_byte?|=?0?;
}
}
return?DHT11_byte?;
}
static?ssize_t?DHT11_read?(?struct?file*?filp?char?__user*?buf?size_t?count?loff_t*?f_pos?)
{
unsigned?char?DataTemp;
unsigned?char?i;
unsigned?char?err;
char?tempBuf[5];
// loff_t?pos?=?*f_pos?;
err?=?0?;
s3c2410_gpio_cfgpin?(?S3C2410_GPF(0)??S3C2410_GPIO_OUTPUT?);
s3c2410_gpio_setpin?(?S3C2410_GPF(0)??0?);
msleep?(?18?);
// mdelay?(?18?);
s3c2410_gpio_setpin?(?S3C2410_GPF(0)??1?);
udelay?(?40?);
s3c2410_gpio_cfgpin?(?S3C2410_GPF(0)??S3C2410_GPIO_INPUT?);
if?(?!err?)
{
DataTemp?=?10?;
while?(?!(?s3c2410_gpio_getpin?(?S3C2410_GPF(0)?)?)?&&?DataTemp?)
{
DataTemp?--;
udelay?(?10?);
}
if?(?!DataTemp?)
{
err?=?1;
count?=?-EFAULT;
}
}
if?(?!err?)
{
DataTemp?=?10?;
while?(?(?s3c2410_gpio_getpin?(?S3C2410_GPF(0)?)?)?&&?DataTemp?)
{
DataTemp?--;
udelay?(?10?);
}
if?(?!DataTemp?)
{
err?=?1;
count?=?-EFAULT;
}
}
if?(?!err?)
{
for?(?i?=?0;?i?5;?i?++?)
{
tempBuf[i]?=?DHT11_read_byte?()?;
}
DataTemp?=?0?;
for?(?i?=?0;?i?4;?i?++?)
{
DataTemp?+=?tempBuf[i]?;
}
if?(?DataTemp?!=?tempBuf[4]?)
{
count?=?-EFAULT;
}
// if?(?count?>?(?5?-?pos?)?)
// {
// count?=?5?-?pos?;
// }
if?(?count?>?5?)
{
count?=?5?;
}
//? pos?+=?count;
// if?(?copy_to_user?(?buf??tempBuf?+?*f_pos??count?)?)
if?(?copy_to_user?(?buf??tempBuf??count?)?)
{
count?=?-EFAULT?;
}
// *f_pos?=?pos;
}
s3c2410_gpio_cfgpin?(?S3C2410_GPF(0)??S3C2410_GPIO_OUTPUT?);
s3c2410_gpio_setpin?(?S3C2410_GPF(0)??1?);
return?count;
}
static?struct?file_operations?dev_fops?=?{
.owner?=?THIS_MODULE
.read?=?DHT11_read
};
static?struct?miscdevice?misc?=?{
.minor?=?MISC_DYNAMIC_MINOR
.name?=?DEVICE_NAME
.fops?=?&dev_fops
};
static?int?__init?DHT11_init_module?(?void?
評論
共有 條評論