第9讲 设备驱动程序开发实例.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 设备驱动程序开发实例 本章要点 1、键盘驱动程序的设计 2、步进电机驱动程序的设计 3、直流电机驱动程序的设计 4、GPIO设备驱动程序设计 5、网络接口设备驱动程序的设计 9.1 键盘驱动程序的设计 9.1.1 键盘原理介绍 1、按键原理 2.矩阵键盘原理 9.1.2 键盘驱动程序设计思路分析 下面以一个6×4按键的键盘为例来讲述键盘驱动程序的设计方法。 该键盘有四列,其地址分别为:0xfe、0xfd、0xfb、Oxf7。该键盘的六行地址分别为:0xfe、0xfd、0xfb、Oxf7、0xef、0xdf。各行按键的地址分布排列如表9.1所示: 表9.1 各按键的地址分布排列 1、头文件 #include linux/config.h #include linux/kernel.h #include linux/sched.h #include linux/timer.h #include linux/init.h #include linux/module.h #include asm/hardware.h #include asm/io.h #include linux/delay.h #include linux/fs.h 2、处理设备I/O端口的数据的几个重要函数 (1)ioremap( )函数 函数ioremap( )的作用是把一个物理内存地址点映射为一个内核指针,实现从物理地址到内核空间虚拟地址的映射。 (2)inb( )函数   函数inb(端口地址)作用是从端口读取一个字节,这个函数的返回值就是从这个端口读取到的数据。 (3)outb( )函数 函数outb(数值,端口地址)的作用是向端口发送数值。 3、设备初始化 定义设备驱动程序的初始化函数KEYBOARD_CTL_init( ),在该函数中实现向系统注册设备号、设备名称和初始化寄存器。 (1)向系统注册设备 (2)初始化寄存器 (3)初始化函数KEYBOARD_init( ) 4、驱动程序的file-operation数据结构 5、键盘扫描的接口函数 【例9-1】编写一个6×4按键的键盘驱动程序。 源程序见教材 9.1.4 键盘用户应用程序设计 1、键盘用户应用程序设计分析 (1)获取设备驱动程序的文件描述符 (2)调用设备驱动程序中的read( )方法,读取检测到的按键数据值 (3)在用户应用程序中还用到一个函数usleep( ),usleep()函数的作用是:休眠若干微秒,延迟执行的时间,起到去除抖动的作用。 9.2 步进电机驱动器设计 9.2.2 嵌入式系统控制步进电机 9.2.3 步进电机驱动程序设计 1、头文件 设计键盘驱动程序,要使用Linux系统头文件,其顶部位于 /*ARM_Linux。 2、设备初始化 定义初始化函数BJDJ_init( ),在该函数中实现向系统注册设备号、设备名称和初始化寄存器。 (1)向系统注册设备 ret = devfs_register_chrdev(BJDJ_MAJOR, BJDJ, bjdj_ops); (2)初始化通用I/O端口GPIO 对通用I/O端口GPIO的GPDR和GAFR寄存器设置初值 : GPSR为置位寄存器,当1时,电机开始旋转。 GPCR为复位寄存器,当1时,电机停止转动。 GPDR为方向寄存器, 1为输出,0为输入。 GAFR为第二功能寄存器, 3、定义设备数据结构 由于本驱动程序只需对设备I/O端口进行控制处理,故在设备驱动的数据结构中仅定义了一个ioctl( )接口函数: static struct file_operations bjdj_ops = {      ioctl: bjdj_ioctl,  }; 4、对电机设备控制的ioctl( ) 函数 (1)定义数组bit[] ,接收来自用户应用程序的指令。    bit[0] = (cmd 0x01) 0; bit[1] = (cmd 0x02) 1; bit[2] = (cmd 0x04) 2; bit[3] = (cmd 0x08) 3; bit[4] = (cmd 0x10) 4; bit[5] = (cmd 0x20) 5; bit[6] = (cmd 0x40) 6; bit[7] = (cmd 0x80) 7; (2)控制转动角度和方向 由用户应用程序发送1组cmd指令:0x07、0x0b、0x0d、0x0e,数组 bit[ ]得到4组不同的数值,从而控制步进电机转动角度和方向。 若要正转:GPS

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档