- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
GPIO 资料
通用I/O接口 General Purpose IO Interface,GPIO 是ARM系统及片上SoC System-on-Chip 系统中非常重要的一种I/O接口,具有使用灵活、可配置性好、硬件代价小等优点,在ARM系统中广泛应用。
1?实例说明
ARM Linux系统的设备可分为字符设备、块设备和网络设备三种。GPIO属于字符设备,字符设备是指存取时具有较少缓存的设备。而块设备的读写都由缓存来支持,并且块设备必须能够随机存取,字符设备则没有这个要求。
GPIO不仅支持常用的中断和查询低速数据传输方式,还支持DMA高速数据传输方式,支持多种I/O端口类型,可满足多种应用需求。
本章介绍ARM的通用I/O资源,并结合外围电路给出了这些GPIO的一般使用方法。
2? GPIO原理
2.1 GPIO设备驱动原理
在Linux系统下,字符设备和块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件。I/O操作就紧接着发生了。块设备则不然,它利用一块系统内存作缓冲区,当用户进程对设备请求能满足用户的要求,就返回请求的数据;如果不能,就调用请求函数来进行实际的I/O操作。块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待。
GPIO属于字符设备,其驱动程序的使用可以按照两种方式编译,一种是静态编译进内核,另种是编译成模块以供动态加载。由于嵌入式Linux支持静态编译和动态加载两种模式,如果考虑到精简内核的需要,这里可以使用动态加载的方法来实现驱动的装载。
设备驱动程序必须向Linux核心或者它所在的子系统提供个标准的接口。例如,USB驱动程序向Linux核心提供了一个设备文件I/O接口,GPIO设备驱动程序向GPIO子系统提供了GPIO设备接口,接着向核心提供了文件I/O和缓冲区的接口。
1. 用户程序访问GPIO 用户程序访问设备的整体工作情况如图8-1所示。
如图8-l所示的数据结构是在内核态工作,而内核通过对相应数据结构的赋值,以此记录了用户程序对外部设备的使用情况。节点数据结构工作在JFFS 一种基于Flash的文件系统 阶段,其定位了用户程序访问的设备文件,并根据相应文件属性满足用户程序对该设备文件的访问。在对设备数据的交换过程中,File数据结构维护着缓冲区的数据。
设备驱动程序使用标准的核心服务如内存分配、中断转发和等待队列来完成工作。大多数设备驱动程序可以在需要的时候作为核心模块加载,在不需要的时候卸载。这使得核心服务对于系统资源非常具有适应性和效率性。
系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它具有以下功能。
·对设备初始化和释放。
·把数据从内核传送到硬件,以及从硬件读取数据。 ·读取应用程序传送给设备文件的数据,以及回送应用程序请求的数据。 ·检测和处理设备出现的错误。 2.用户进程调用 用户进程通过设备文件与实际的硬件打交道。每个设备文件都有其文件属性 c/b ,表示是字符设备还是块设备。另外,每个文件都有两个设备号,第一个是主设备号,标识驱动程序,第二个是次设备号,标识使用同一个设备驱动程序的不同的硬件设备,比如有两个软盘,就可以用次设备号来区分它们。设备文件的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问到驱动程序。 在用户进程调用驱动程序时,系统进入核心态,这时不再是抢先式调度。也就是说,系统必须在驱动程序的子函数返回后才能进行其他的工作。如果驱动程序陷入死循环,那么整个内核就会崩溃,只有重新启动系统。
2.2如何驱动GPIO及对应设备
一般的ARM都提供超过100路的GPIO复用管脚,要使用这些管脚,就必须首先将其驱动起来。如果使用的芯片带有MMU内存管理,那么在写驱动模块的时候不能直接去操作物理地址,必须利用io rein ap命令重新映射。
1.?I/0端口
和硬件打交道离不开I/O端口,老的ISA设备经常是占用实际的I/0端口,在Linux下,操作系统没有对I/0端口屏蔽。也就是说,任何驱动程序都可以对任意的I/O;端口操作,这样就很容易引起混乱。每个驱动程序都应该自己避免误用端口,有两个重要的kernel函数可以保证驱动程序做到这一点。
check-region int? i0-port,? int 0ff_set
这个函数用来查看系统的I/0表,看是否有别的驱动程序占用某一段I/0口。参数1:I/0端口的基地址;参数2:I/O端口占用的范围。返回值:0,没有占用;非0,已经被占用。
request_region int
您可能关注的文档
- can britain recover its economic competitiveness i.doc
- CATIA 3D线束设计作图.doc
- Catti Vocabulary I.doc
- CBM 煤层气地质学.ppt
- CBKD系列防爆视孔灯和不锈钢防爆视孔灯价格.docx
- CANDU堆介绍.ppt
- cdg%rrhq扩展知识—电化学.doc
- CCNA1215-第15章 路由选择和路由选择协议.ppt
- Cell Phone Inspection Standard X1.docx
- CentOS 6.4 installation tutorial.doc
- 2025工作面设计说明书.pdf
- 岭南版美术五年级下册第7课《画出立体感、空间感》核心素养教案.pdf
- 2025年(3套含答案)部编版小学语文一年级下册期末测试卷 .pdf
- 2023年国家开放大学《56324-工程招投标与合同管理实训》专科考试复习资料.pdf
- 2025年 高中数学新北师大版精品教案《北师大版高中数学必修4 本章小 .pdf
- 2025年(12)公共营养师理论模拟考试题与答案.pdf
- 2025年(150题)安管人员题库 .pdf
- 2025年(200题)金属非金属矿山(露天矿山)安全管理人员考试及答案 .pdf
- 2025年 酒店服务赛项英语题库 翻译 .pdf
- 2025年大庆医学高等专科学校单招职业适应性测试题库及参考答案1套.docx
文档评论(0)