TQT507开发板GPIO应用指南
  t5NtRixbu4xu 2023年11月02日 45 0

本文档介绍了应用层如何控制 GPIO,适用于天嵌开发板TQT507 。

1.sysfs 方式控制GPIO 

通过 sysfs 方式进行操控,进入到/sys/class/gpio 目录下              

TQT507开发板GPIO应用指南_引脚

可以看到该目录下包含两个文件 export、unexport以及2个gpiochipX(X 等于 0、 352)命名的文件夹。

1.1 gpiochipX 

gpiochipX:当前 SoC 所包含的 GPIO 控制器, 每一个 gpiochipX 文件夹用来管理一组 GPIO。随便进到其中某个目录下,可以看到这些目录下包含了如下文件 :

TQT507开发板GPIO应用指南_输出模式_02

在这个目录我们主要关注的是 base、 label、 ngpio 这三个属性文件,这三个属性文件均是只读、不可写。

base:与 gpiochipX 中的 X 相同,表示该控制器所管理的这组 GPIO 引脚中最小的编号。每一个 GPIO引脚都会有一个对应的编号, Linux 下通过这个编号来操控对应的 GPIO 引脚。


TQT507开发板GPIO应用指南_#define_03


label:该组 GPIO 对应的标签,也就是名字

TQT507开发板GPIO应用指南_输出模式_04


ngpio:该控制器所管理的 GPIO 引脚的数量(所以引脚编号范围是:base ~ base+ngpio-1)


TQT507开发板GPIO应用指南_#define_05

1.2 export  

export:用于将指定编号的GPIO引脚导出。在使用 GPIO引脚之前,需要将其导出,导出成功之后才能使用它。注意export文件是只写文件,不能读取,将一个指定的编号写入到export文件中即可将对应的 GPIO 引脚导出。

TQT507开发板GPIO应用指南_引脚_06

导出成功之后会发现在/sys/class/gpio 目录下生成了一个名为 gpio0 的文件夹(gpioX, X 表示对应的编号),如上图所示。这个文件夹就是导出来的 GPIO 引脚对应的文件夹,用于管理、控制该 GPIO 引脚 。

1.3 unexport  

unexport:将导出的 GPIO 引脚删除。当使用完 GPIO 引脚之后,我们需要将导出的引脚删除,同样该文件也是只写文件、不可读,譬如:echo 0 > unexport ,删除导出的编号为 0 的 GPIO 引脚。删除成功之后,之前生成的 gpio0 文件夹就会消失!

TQT507开发板GPIO应用指南_引脚_07

1.4 gpioX  

将指定的编号写入到 export 文件中,可以导出指定编号的 GPIO 引脚,导出成功之后会在/sys/class/gpio目录下生成对应的 gpioX(X 表示 GPIO 的编号)文件夹,以前面所生成的 gpio0 为例,进入到 gpio0 目录,该目录下的文件如下所示

TQT507开发板GPIO应用指南_输出模式_08


我们主要关心的文件是 active_low、 direction、 edge 以及 value 这四个属性文件,接下来分别介绍这四个属性文件的作用:

direction:配置 GPIO 引脚为输入或输出模式,该文件可读、可写。

读表示查看 GPIO 当前是输入还是输出模式;

写表示将 GPIO 配置为输入或输出模式;

读取或写入操作可取的值为"out"(输出模式)和"in"(输入模式),如下所示


TQT507开发板GPIO应用指南_#define_09

value:在 GPIO 配置为

输出模式下,向 value 文件写入"0"控制 GPIO 引脚输出低电平,写入"1"则控制 GPIO 引脚输出高电平;

输入模式下,读取 value 文件获取 GPIO 引脚当前的输入电平状态。

譬如:

获取 GPIO 引脚的输入电平状态

TQT507开发板GPIO应用指南_输出模式_10

控制 GPIO 引脚输出高电平

TQT507开发板GPIO应用指南_引脚_11


active_low:这个属性文件用于控制极性, 可读可写,默认情况下为 0

# active_low 等于 0 时                      
     echo "0" > active_low                 
     echo "out" > direction                 
     echo "1" > value #输出高                 
     echo "0" > value #输出低                 
     # active_low 等于 1 时                 
     echo "1" > active_low                 
     echo "out" > direction                 
     echo "1" > value #输出低                 
     echo "0" > value #输出高

edge:控制中断的触发模式,该文件可读可写。在配置 GPIO 引脚的中断触发模式之前,需将其设置为输入模式:

非中断引脚:echo "none" > edge            
上升沿触发:echo "rising" > edge            
下降沿触发:echo "falling" > edge            
边沿触发:echo "both" > edge

1.5 GPIO对应引脚计算方法 

全志的GPIO号在 sunxi-gpio.h 中定义

#define SUNXI_BANK_SIZE 32            
#define SUNXI_PA_BASE    0           
#define SUNXI_PB_BASE    32            
#define SUNXI_PC_BASE    64            
#define SUNXI_PD_BASE    96            
#define SUNXI_PE_BASE    128            
#define SUNXI_PF_BASE    160            
#define SUNXI_PG_BASE    192            
#define SUNXI_PH_BASE    224            
#define SUNXI_PI_BASE    256            
#define SUNXI_PJ_BASE    288            
#define SUNXI_PK_BASE    320            
#define SUNXI_PL_BASE    352            
#define SUNXI_PM_BASE    384            
#define SUNXI_PN_BASE    416            
#define SUNXI_PO_BASE    448

计算方式--举两个例子

a、PA13

PA 是从0开始定义的,那么就是:0 +13 = 13,那么 PA13 的GPIO号 就是 GPIO13

b、PE10

PE 是从128开始定义的,那么就是:128 + 10 = 138,那么 PE10 的GPIO号 就是 GPIO138

2.利用 sunxi_pinctrl 的 debug 节点  

挂载文件节点,并进入相应目录:

mount -t debugfs none /sys/kernel/debug            
cd /sys/kernel/debug/sunxi_pinctrl

2.1查看 pin 的配置  

echo PC2 > sunxi_pin            
cat sunxi_pin_configure

TQT507开发板GPIO应用指南_#define_12

2.2修改 pin 属性  

每个 pin 都有四种属性,如复用 (function),数据 (data),驱动能力 (dlevel),上下拉 (pull),

修改 pin 属性的命令如下:

echo PC2 1 > pull            
cat sunxi_pin_configure  //查看修改情况
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
t5NtRixbu4xu