linux 下的gpio驱动.ppt

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linux 下的gpio驱动

LINUX下的GPIO驱动 LINUX下的GPIO驱动 设备驱动程序是计算机硬件与应用程序的接口,是软件系统与硬件系统沟通的桥梁。如果没有设备驱动程序,那么硬件设备就只是一堆废铁,没有一点的功能。 LINUX下的GPIO驱动 。 设备驱动程序(Device Driver),简称驱动程序(Driver)。它是一个允许计算机软件(Computer Software)与硬件(Hardware)交互的程序。这种程序建立了一个硬件与硬件,或硬件与软件沟通的界面。CPU经由主板上的总线(Bus)或其它沟通子系统(Subsystem)与硬件形成连接,这样的连接使得硬件设备(Device)之间的数据交换成为可能。 LINUX下的GPIO驱动 核心板原理图与底板原理图可以确定,底板上的4个LED灯是由GPM0~GPM3 控制的 LINUX下的GPIO驱动 由S3C6410数据手册 设置GPMCON 设置IO口为输出还是输入 设置GPMPUD 设置IO口是上拉还是下拉 设置GPMDAT 设置IO口输出电平 LINUX 下的GPIO驱动 底层驱动文件在 Linux-3.0.1/drivers/char/s3c6410_leds.c 包含头文件后 #define DEVICE_NAME leds“ 表明注册设备名为leds 开发平台文件系统中,/dev目录下会有名为leds的设备 初始化函数 初始化函数 static int __init dev_init(void) { int ret; ? ? ?? ? ? ? ? unsigned tmp; ? ? ? ?//gpm0-3 pull up tmp = readl(S3C64XX_GPMPUD); //从IO口读32位数据 到tmp 参数为地址 tmp = (~0xFF);//GPMPUD物理地址0x7F008828 tmp |= 0xaa;//使能上拉电阻 writel(tmp,S3C64XX_GPMPUD); 初始化函数 //gpm0-3 output mode GPM配置寄存器 tmp =readl(S3C64XX_GPMCON); tmp = (~0xFFFF); tmp |= 0x1111; //设置为输出模式 writel(tmp,S3C64XX_GPMCON); //gpm0-3 output 0 tmp = __raw_readl(S3C64XX_GPMDAT); tmp |= 0x10;//输出数writel(tmp,S3C64XX_GPMDAT); ? ? ? ? ?//注册杂项字符设备 ret = misc_register(misc);//不用手动创建节点 printk (DEVICE_NAME\tinitialized\n); return ret; } Ioctl函数 static long s3c6410_leds_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { switch(cmd) { unsigned tmp; case 0: case 1: if (arg 4) { return -EINVAL; } Ioctl函数 tmp = readl(S3C64XX_GPMDAT); if(cmd==0) //close light { tmp = (~(1arg)); } else //open light { tmp |= (1arg); } Ioctl函数 writel(tmp,S3C64XX_GPMDAT); printk (DEVICE_NAME: %d %d\n, arg, cmd); return 0; default: return -EINVAL; } } 。 底层驱动的调用 2.6内核中,ioctl的原型为 long (* unlocked_ioctl)(struct *file,unsigned int,unsigned long); 在file_operations中,需定义为.unlocked_ioctl= s3c6410_leds_ioctl。应用层中调用仍为ioctl()。 应

您可能关注的文档

文档评论(0)

yanpizhuang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档