Zynq-7000、FMQL45T900的GPIO控制(四)---linux应用层配置GPIO输入控制

上文中详细阐述了对应原理图MIO/EMIO的编号,怎么计算获取linux下gpio的编号

 本文涉及C代码上传,下载地址

Zynq-7000、FMQL45T900的GPIO控制c语言代码资源-CSDN文库

本文详细记录一下针对获取到gpio的编号,进行配置输入模式,并进行C语言编码控制

这里以FMQL45T900为例,zynq-7000的操作流程都是一样的,只是需要操作的GPIO的管脚计算不同

主要步骤是,导出对应GPIO对应节点,配置方向、读取管脚电平

gpio_export(&test_pin_mesg);//生成gpio节点
gpio_direction(&test_pin_mesg);//设置方向
gpio_read(&test_pin_mesg, &value);//读入value,

shell指令操作

导出节点

echo 434 > /sys/class/gpio/export

查看节点

ls /sys/class/gpio/gpio434/

设置输入模式

echo in > /sys/class/gpio/gpio434/direction

查看配置模式

cat /sys/class/gpio/gpio434/direction

获取管脚电平

cat /sys/class/gpio/gpio434/value

FMQL45T900实际开发板上进行测试如下图,zynq-7000的流程也是一样,只是导出的GPIO节点不一样

使用的测试C代码如下

编译脚本文件

#!/bin/bash

CC=arm-linux-gnueabihf-gcc

${CC} gpio_test_input.c -o gpio_test_input

关键函数


static int gpio_export(struct pin_mesg* mesg){  
    char name[4];  
    int fd,len;  

    fd = open("/sys/class/gpio/export", O_WRONLY);
    if (fd < 0) {
        perror("open export");
        return(-1);
    }
    len = sprintf(name, "%d", mesg->pin);  
    dbg_info("name = gpio%s\n",name);
    if (write(fd, name, sizeof(name)) < 0) {  
        perror("write export");
        return -1;  
    }  
    close(fd);  
    return 0;  
}  
static int gpio_direction(struct pin_mesg* mesg){  
    char path[64];  
    int fd,res;
    char *dir;
    if(mesg->inout_flags & IN)
	dir = "in";
    if(mesg->inout_flags & OUT)
	dir = "out";
    sprintf(path,"/sys/class/gpio/gpio%d/direction", mesg->pin);
	
    dbg_info("direction path: %s,direction = %s\n", path, dir);  
    
    fd = open(path, O_WRONLY);
    if (fd < 0) {
		perror("open direction");
        return -1;  
    }  
	res = write(fd, dir, sizeof(dir));
    if (res <= 0) {
        perror("write direction");
        return -1;
    }
    close(fd);
    return 0;
}

输入测试结果如下图所示

C代码上传,下载地址

Zynq-7000、FMQL45T900的GPIO控制c语言代码资源-CSDN文库

用这几篇帖子深入探讨一下ZYNQ-7000/FMQL45T900的GPIO相关设计,都说GPIO最简单,这样记录下来起始还是很费劲的。可以根根据需求,直接跳转到相关的内容

Zynq-7000、FMQL45T900的GPIO控制(一)-----SDK配置GPIO普通输入输出模式,以及GPIO编号_大牛攻城狮的博客-CSDN博客

Zynq-7000、FMQL45T900的GPIO控制(二)-----SDK配置GPIO外部中断输入_大牛攻城狮的博客-CSDN博客

Zynq-7000、FMQL45T900的GPIO控制(三)---linux管脚编号计算_大牛攻城狮的博客-CSDN博客

Zynq-7000、FMQL45T900的GPIO控制(四)---linux应用层配置GPIO输入控制_大牛攻城狮的博客-CSDN博客

Zynq-7000、FMQL45T900的GPIO控制(五)---linux应用层配置GPIO输出控制_大牛攻城狮的博客-CSDN博客

Zynq-7000、FMQL45T900的GPIO控制(六)---linux驱动层配置GPIO输入输出控制_大牛攻城狮的博客-CSDN博客

(1条消息) Zynq-7000、FMQL45T900的GPIO控制(七)---linux驱动层配置GPIO中断输入_大牛攻城狮的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大牛攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值