参考资料1:http://www.eefocus.com/html/10-04/94673s.shtml
GPIO设备驱动原理
在Linux系统下,字符设备和块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O操作就紧接着发生了。块设备则不然,它利用一块系统内存作缓冲区,当用户进程对设备请求能满足用户的要求,就返回请求的数据;如果不能,就调用请求函数来进行实际的I/O操作。块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待。
GPIO属于字符设备,其驱动程序的使用可以按照两种方式编译,一种是静态编译进内核,另一种是编译成模块以供动态加载。由于嵌入式Linux支持静态编译和动态加载两种模式,如果考虑到精简内核的需要,这里可以使用动态加载的方法来实现驱动的装载。
设备驱动程序必须向Linux核心或者它所在的子系统提供一个标准的接口。例如,USB驱动程序向Linux核心提供了一个设备文件I/O接口,GPIO设备驱动程序向GPIO子系统提供了GPIO设备接口,接着向核心提供了文件I/O和缓冲区的接口。禁止、使能上拉只是针对gpio用作输入端口时起作用,作输出时一律禁止上拉。输入时当外部电路是oc门
且输出为高的时候,oc门的输出管只是处于截止状态,并没有使gpio管脚处于高电平状态,这时就需要
通过内部上拉电阻提供一个到高电平的通路。所以gpio为输入状态且外部电路为oc门时需要使能上拉,
其他情况禁止。
什么时候使用GPIO口的上拉电阻啊? 一般是输出能力不足的时候加上拉。
说实话这个要看具体硬件,输入的时候如果外面的设备输出能力不够,你就要加上拉(但是按说应该是设计外面设备的人加上拉的);一个GPIO你不能指望他有多大的输出能力(一般说来,他直接驱动一个LED都有问题);
都加上拉好像没有什么问题吧,但是有些硬件也许要求你不能加上拉,比如在3.3V和5V混起来用的时候要注意。
gpio串电阻分压可以减小过冲,保证信号质量
上拉不过是将引脚拉到一个确定的电平,一般片内的上拉都很弱
上拉,就是把电位拉高,比如拉到VCC
下拉,就是把电压拉低,拉到GND
一般就是刚上电的时候,端口电压不稳定,为了让他稳定为高或低,就会用到上拉或下拉电阻。
有些芯片内部集成了上拉电阻,所以外部就不用上拉电阻了。但是有一些开漏的,外部必须加上拉电阻。
上拉和下拉电阻式提供电流最用,还有就是有些口是OC门,如果不加上拉则不能表示高低电平。
三星的2410手册上写:上拉寄存器是控制对应端口上拉使能的。当对应位为0时,设置对应引脚上拉使能,
为1时,禁止对应引脚上拉使能。如果上拉寄存器使能,无论引脚功能寄存器如何设置(输入,输出,数
据,中断等),对应引脚输出高电平。
PS:上拉是一个电阻接到一个电压,其实就是增强IO的驱动能力。
下拉是一个电阻接到地,保证IO口是低电平。
拉寄存器设置后将管脚的不确定状态设置为高电平状态,相当与我们平时在做电路设计时候添加的上拉电阻一样的原理,不同的是在ARM处理集成了这些东西并且可以通过软件来配置,关于上拉详细内容参考百度百科
阅读(1004) | 评论(0) | 转发(0) |