資源簡介
jz2440上實驗成功
內核是4.3.2版本
交叉編譯工具是arm-linux 3.4.5
我的接線方式:VCC接J3的17口,GND接J3的18口,DATA接的是J1的1口
測試成功。
代碼片段和文件信息
#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“
#define?DHT11_IO??S3C2410_GPE(15)
/*?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?(?DHT11_IO?)?)?)
{
temp?++?;
if?(?temp?>?12?)
return?1?;
udelay?(?5?)?;
}
temp?=?0?;
while?(?s3c2410_gpio_getpin?(?DHT11_IO?)?)
{
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?(?DHT11_IO??S3C2410_GPIO_OUTPUT?);
s3c2410_gpio_setpin?(?DHT11_IO??0?);
msleep?(?20?);
// mdelay?(?18?);
s3c2410_gpio_setpin?(?DHT11_IO??1?);
udelay?(?30?);
s3c2410_gpio_cfgpin?(?DHT11_IO??S3C2410_GPIO_INPUT?);
if?(?!err?)
{
DataTemp?=?10?;
while?(?!(?s3c2410_gpio_getpin?(?DHT11_IO?)?)?&&?DataTemp?)
{
DataTemp?--;
udelay?(?10?);
}
if?(?!DataTemp?)
{
err?=?1;
count?=?-EFAULT;
}
}
if?(?!err?)
{
DataTemp?=?10?;
while?(?(?s3c2410_gpio_getpin?(?DHT11_IO?)?)?&&?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?(?DHT11_IO??S3C2410_GPIO_OUTPUT?);
s3c2410_gpio_setpin?(?DHT11_IO??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?)
{
int?
評論
共有 條評論