- 1、本文档共116页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章_GPIO
华中科技大学计算机学院 第三篇 驱动程序开发篇字符设备驱动架构 第三篇 驱动程序开发篇 设备驱动程序是对设备的抽象处理,在设备驱动程序中封装了如何控制设备的技术细节. 通过特定的接口导出一个规范的操作集合,内核通过设备接口规范,使用文件系统的方式把设备操作导出到用户空间。 设备驱动程序有如下特点: 是内核的部分,驱动程序出现的严重错误可能会引起系统的崩溃。 为内核和子系统提供标准接口以实现各种调用。 使用标准内核服务。 具有内核态和用户态两种模式. 可动态装载和卸载。 在Linux设备驱动中,字符设备驱动较为基础。将以字符设备为重点,讲解Linux字符设备驱动程序的结构及其主要组成部分的编程方法。 第三篇 驱动程序开发篇 Linux字符设备驱动的关键数据结构为: cdev及file_operations结构体 字符设备驱动程序中重要的组成部分: 字符设备驱动模块的加载与卸载,其中驱动模块的加载实现设备号的申请和cdev注册,在卸载函数中实现设备号的释放和cdev的注销。 在Linux2. 6 下用 cdev结构体描述字符设备,其中, cdev的成员dev_t 用于定义设备号. file_operation用于定义字符设备驱动提供给虚拟文件系统的接口函数. 接口函数给每个设备提供I/O设备的固定存取入口点,使得可以通过这组有固定名称和功能的接口函数来访问I/O设备。 第三篇 驱动程序开发篇 具体的接口函数概要介绍如下: ①open入口点。打开设备准备I/O操作。进行打开操作,都会调用设备的open入口点。open必须对将要进行的I/O操作做好必要的准备工作。如果设备是独占的,则open必须设置一些标志以表示设备处于忙状态。 ②close入口点。关闭一个设备。当最后一次使用设备终结后,调用close程序.独占设备必须标记设备可再次使用。 ③read入口点。从设备上读数据。对于有缓冲区的I/O操作,一般是从缓冲区中读数据。进行读操作将调用read子程序。 第三篇 驱动程序开发篇 ④write入口点。往设备上写数据。对于有缓冲区的I/O设备操作,一般是把数据写人缓冲区里。进行写操作将调用write程序。 ⑤ioctl入口点。执行读、写之外的操作,实现对设备的控制. ⑥select入口点。检查设备,看数据是否可读或设备是否可用于写数据。系统调用在检查与设备特别文件相关的文件描述符时,使用select入口点. 如果设备驱动程序没有提供上述入口点的某一个,系统会用缺省的子程序来代替,对于不同的系统,也还有一些其他的入口点。 5.1 PXA 270 GPIO介绍 PXA27x处理器提供121个高度复用的通用I/O(GPIO)端口.用于产生和接收特定应用的输入和输出信号。 每个端口都可以通过编程来配置为输出或者输人,或为了某些特定的功能应用而配置为双向交叉端口。 若程序中将其作为输入,一个GPIO端口也可同时作为一个中断源来使用。 系统复位的时候,所有的GPIO引脚默认配置为输入端口。 为了节约能耗,所有在软件中未被使用的GPIO引脚将会被配置为输出状态. 当PXA27X处理器被从休眠或者重启的状态唤醒的时候,所有的GPIO输入端都将处于被禁用的一种状态,直到读使能的挂起位(PSSR[RDF])被清0为止。 详细信息可参考:PXA270 datasheet.pdf p24-12 Table 24-5. GPDR0 Bit Definitions 5.1 PXA 270 GPIO介绍 PXA27x处理器的大多数GPIO引脚都是可复用的。一般GPIO功能如下: 作为输入,可以通过取样或编程,GPIO引脚信号会在时钟信号的上升或下降沿产生中断; 作为输出,这些GPIO端口可以单独的被清0或者重新置位。当系统进入休眠模式的时候可以通过编程将这些引脚预先设置为任何的状态; 每一个GPIO都可以通过编程实现其他交叉功能,实现更加灵活的应用。 5.1 PXA270 GPIO介绍1.作为通用的I/O 使用GPIO管脚方向寄存器GPDR0/1/2/3将相应的引脚配置为输入或者输出。将引脚配置为输出,就对相应寄存器执行‘“写”操作. 具体方法是将GPIO引脚输出寄存器GPSR0/1/2/3置为“1”,将GPIO输出清除寄存器GPCR0/1/2/3置为“1”(书上有误)。 通过GPIO状态寄存器GPLR0/1/2/3读取GPIO引脚的电平状态,也可以通过读取GPIO上升沿检测使能寄存器GRER0/1/2/3和下降沿检测使能寄存器GFER0/1/2/3来检测每个GPIO引脚的上升沿和下降沿信号. 另外还有GPIO边缘状态检测寄存器GEDR0/1/2/3可以读取边缘状态。 其他寄存器以及功能介绍,请参看PXA27 x系列数据手
文档评论(0)