1655|1

1237

帖子

66

TA的资源

纯净的硅(中级)

楼主
 

【米尔MYC-JX8MPQ评测】三、gpio应用编程 [复制链接]

 

gpio操作可以通过sys文件系统接口,文件系统 gpio 操作 在文件系统操作 GPIO 时,必须先检查想要操作的 GPIO 是否被其他驱动占用,如果 被占用,后续操作会报 busy 的警告。

以操作拓展脚的一个接口为例,使用万用表测 量电压。(ECSPI2_MOSI_3V3, GPIO5_IO11,139)

导出 GPIO

root@myd-jx8mp:~# echo 139 > /sys/class/gpio/export

导出成功后会在/sys/class/gpio/目录下生成 gpio139 这个目录。

设置/查看 GPIO 方向 设置输出,输入以下命令:

root@myd-jx8mp:~# echo out > /sys/class/gpio/gpio139/direction

或者设置输入:

root@myd-jx8mp:~# echo in > /sys/class/gpio/gpio139/direction

查看 gpio 方向:

root@myd-jx8mp:~# cat /sys/class/gpio/gpio139/direction out

返回 in 表示输入,返回 out 表示输出。

设置/查看 GPIO 的值 设置输出低:

root@myd-jx8mp:~# echo "0" > /sys/class/gpio/gpio139/value

或者设置输出高:

root@myd-jx8mp:~# echo "1" > /sys/class/gpio/gpio139/value

查看 gpio 的值:

root@myd-jx8mp:~# cat /sys/class/gpio/gpio139/value 1

可以看到 GPIO5_IO11 输出高电平,然后可以用万用表测量 J25 扩展 IO 的 ECSPI2_MOSI_3V3 引脚,可以看到电压为 3.3V 左右

 

GPIO68各属性文件的用途
文件名 路径 作用
active_low /sys/class/gpio/gpio139/active_low 具有读写属性。用于决定value中的值是否翻转——0不翻转,1翻转。
edge /sys/class/gpio/gpio139/edge 具有读写属性。设置GPIO中断,或检测中断是否发生。
subsystem /sys/class/gpio/gpio139/subsystem 符号链接,指向父目录。
value /sys/class/gpio/gpio139/value 具有读写属性。GPIO的电平状态设置或读取。
direction /sys/class/gpio/gpio139/direction 具有读写属性。用于查看或设置GPIO输入输出
power /sys/class/gpio/gpio139/power 设备供电方面的相关信息
uevent /sys/class/gpio/gpio139/uevent 内核与udev(自动设备发现程序)之间的通信接口
device /sys/class/gpio/gpio139/device 符号链接,指向父目录。

 

 

实际应用中,通过c语言读写linux系统文件的方式对gpio进行操作,示例代码如下:

 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <errno.h>
#include <string.h>
#define    DEV_PATH        "/sys/class/gpio/gpio139/value"            // 输入输出电平值设备
#define    EXPORT_PATH        "/sys/class/gpio/export"                  // GPIO设备导出设备
#define    DIRECT_PATH        "/sys/class/gpio/gpio139/direction"        // GPIO输入输出控制设备
#define        OUT            "out"
#define        IN            "in"
#define        GPIO        "139"      //gpio号                               
#define    HIGH_LEVEL        "1"
#define    LOW_LEVEL        "0"
int main(int argc, char ** argv)
{
    static int fd_dev, fd_export, fd_dir, ret;
    char buf[10], direction[4];
    fd_export = open(EXPORT_PATH, O_WRONLY);                      // 打开GPIO设备导出设备
    if(fd_export < 0) {
        perror("open export:");
        return -1;
    }
    write(fd_export, GPIO, strlen(GPIO));
    fd_dev = open(DEV_PATH, O_RDWR);                              // 打开输入输出电平值设备
    if(fd_dev < 0) {
        perror("open gpio:");
        return -1;
    }
    fd_dir = open(DIRECT_PATH, O_RDWR);                           // 打开GPIO输入输出控制设备
    if(fd_dir < 0) {
        perror("open direction:");
        return -1;
    }
    ret = read(fd_dir, direction, sizeof(direction));             // 读取GPIO输入输出方向
    if(ret < 0) {
        perror("read direction:");
        close(fd_export);
        close(fd_dir);
        close(fd_dev);
        return -1;
    }
    printf("default direction:%s", direction);
    strcpy(buf, IN);
    ret = write(fd_dir, buf, strlen(IN));
    if(ret < 0) {
        perror("write direction:");
        close(fd_export);
        close(fd_dir);
        close(fd_dev);
        return -1;
    }
    ret = read(fd_dir, direction, sizeof(direction));
    if(ret < 0) {
        perror("read direction:");
        close(fd_export);
        close(fd_dir);
        close(fd_dev);
        return -1;
    }
    ret = read(fd_dev, buf, sizeof(buf));                         // 读取GPIO输入电平值
    if(ret < 0) {
        perror("read gpio:");
        close(fd_export);
        close(fd_dir);
        close(fd_dev);
        return -1;
    }
    printf("current direction:%sinput level:%s", direction, buf);
    close(fd_export);
    close(fd_dir);
    close(fd_dev);
    return 0;
}

 

最新回复

这个用万用表测 量电压例程实用   详情 回复 发表于 2022-4-16 21:13
点赞 关注
 
 

回复
举报

6587

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

这个用万用表测 量电压例程实用

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表