上文中详细阐述了对应原理图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博客