从规范中,我知道以下信息:
JGPIO1 PIN# :10
SoC GPIO # : 71
USE select: IO 0x532[7] ( 0 = native function, 1 = GPIO )
IO select: IO 0x536[7] (0 = output, 1 = input )
Level: IO 0x540[7] ( 0 = low, 1= high )
在这种情况下,我要对GPIO引脚#10进行编程。是否可以参考任何示例或示例代码?
我可以通过RW-everything [1]做到这一点。但是,这是在Windows中。
我想在C和linux环境中执行此操作。
请指教。
================================================== =============
例如,如果我要设置
0x532处的第7位为1
0x536处的第7位为0
在0x540处,第7位为1。
在Linux用户空间中,用于访问GPIO的典型方法是通过/ sys伪文件系统(也称为sysfs)。这提供了某种可移植的接口,该接口试图最小化硬件依赖性并避免与设备驱动程序发生冲突。
要确定您要在板上访问的GPIO编号,您必须查阅SoC文档。/ sys / class / gpio /中的目录名称需要与其硬件寄存器对应的名称进行标识。这些目录名称的格式为gpiochip N,其中N表示该寄存器中的基本GPIO号。文件gpiochipN / label应该有助于识别寄存器,例如通过其(内存或端口)地址。
请注意,N可能不会以0开头。IntelBayTrail系统可能将gpiochip82作为其第一个目录,因此编号最小的GPIO将为82。应将寄存器的位号添加到基数中以获得GPIO号。
有关正式文档,请参阅Sysfs Userspace接口。
我可以通过RW-everything 1做到这一点。但是,这是在Windows中。
可以编写类似的程序在Linux下执行。但是,Linux程序(与以x86为中心的Windows不同)应该可以移植到其他体系结构,因此这种需要了解底层硬件详细信息的程序几乎不可能编写/维护。设备驱动程序的一个目的是隔离/模块化此类硬件详细信息,而此类程序正试图规避那些驱动程序!
另外,使用这样的程序可能会使系统不稳定或出现故障。在正在运行的系统上,对内存和/或设备寄存器进行处理是不安全的。FWIW我编写了一个实用程序,该实用程序报告一个特定SoC的引脚配置,但只读取寄存器,而从不修改任何设置。
请注意,大多数SoC文档(以及Linux)都将引脚控制和配置视为与GPIO分开的子系统(但如果不重叠则紧密相关)。引脚控制和配置通常包括:
该GPIO子系统通常处理:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句