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);//设置方向
	while(1)
	{

		gpio_write(&test_pin_mesg, 1);
		sleep(1);
		gpio_write(&test_pin_mesg, 0);
		sleep(1);
	}

shell指令操作

导出节点

echo 434 > /sys/class/gpio/export

查看节点

ls /sys/class/gpio/gpio434/

设置输出模式

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

查看配置模式

cat /sys/class/gpio/gpio434/direction

设置管脚电平

echo 1 > /sys/class/gpio/gpio434/value

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

使用的测试C代码如下

编译脚本文件

#!/bin/bash

CC=arm-linux-gnueabihf-gcc

${CC} gpio_test_output.c -o gpio_test_output

涉及的关键函数


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("gpiopin = 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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大牛攻城狮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值