Linux下的ds18b20驱动(编译成模块)

本文介绍了在Linux环境下,如何为Tiny6410开发板编写和编译ds18b20温度传感器驱动模块。详细讲解了驱动代码,包括GPIO配置、数据传输,并提供了加载模块和测试代码的步骤。
摘要由CSDN通过智能技术生成

本实验基于Tiny6410开发板上的模块


代码如下:代码声明是参考友善之臂论坛里面的,注释是自己添加的。

#include    <linux/module.h> //最基本的文件,支持动态添加和卸载模块。Hello World驱动要这一个文件就可以了
#include    <linux/fs.h> //包含了文件操作相关struct的定义,例如大名鼎鼎的struct file_operations
#include    <linux/kernel.h>
#include    <linux/init.h>
#include    <linux/delay.h>
#include    <linux/cdev.h> //对字符设备结构cdev以及一系列的操作函数的定义。//包含了cdev 结构及相关函数的定义。
#include    <linux/device.h> //包含了device、class 等结构的定义
#include    <linux/gpio.h>
#include    <plat/gpio-cfg.h>


#define    DEVICE_NAME "temp"
static struct cdev cdev; //linux/cdev.h
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)); //设置gpio8为为中断8使能
    
    /* S3C64XX_GPN(8)在arch\arm\plat-s3c64xx\Irq_eint.c中定义;
     * s3c_gpio_cfgpin(S3C64XX_GPN(offs), 0x2 << (offs * 2)); offs指的是S3C64XX的哪个中断,参考Tiny6410硬件手册知道,本温度传感器硬件用到的是EINT8;
     * int offs = eint_offset(irq); 定义了offs是如何得来的,
     * #define eint_offset(irq) ((irq) - IRQ_EINT(0)) 其中的IRQ_EINT(0)意思是外部中断0吧,irq代表你要用到的中断号;
***********************************************************/
 
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值