前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Linux驱动炼成记] 02-用户空间控制GPIO

[Linux驱动炼成记] 02-用户空间控制GPIO

作者头像
程序手艺人
发布2019-02-21 16:22:27
1.5K0
发布2019-02-21 16:22:27
举报
文章被收录于专栏:程序手艺人程序手艺人

平时调试GPIO的时候,往往是驱动写好控制接口,应用层操作,驱动配置端口->编译->烧录固件->查看现象,这样操作很繁琐,很浪费时间, 直接通过串口登录开发板,通过命令的方式控制端口,这样的方式既方便又快速.

注意: 前提条件是驱动程序中不能初始化该GPIO,否则操作过程中会提示设备忙的状态。

内核配置:

  1. 登录开发板,确认文件系统中是否有**/sys/class/gpio/**文件夹,如果没有,重新配置内核:

Device Drivers-> GPIO Support ->/sys/class/gpio/… (sysfs interface)

这里写图片描述
这里写图片描述

操作步骤

  • 操作目录: sys/class/gpio
  • /sys/class/gpio/export: 用于通知系统需要导出控制的GPIO引脚编号
  • /sys/class/gpio/unexport: 用于通知系统取消导出
  • /sys/class/gpio/gpiochipX: 目录保存系统中GPIO寄存器的信息,包括每个寄存器控制引脚的起始编号base,寄存器名称,引脚总数 导出一个引脚的操作步骤
  • 计算引脚编号

引脚编号 = 控制引脚的寄存器基数 + 控制引脚寄存器位数

列举一款芯片计算方式:

#define GPIO_PA(n) 	(0*32 + n)
#define GPIO_PB(n) 	(1*32 + n)
#define GPIO_PC(n) 	(2*32 + n)
#define GPIO_PD(n) 	(3*32 + n)
#define GPIO_PE(n) 	(4*32 + n)
#define GPIO_PF(n) 	(5*32 + n)

PA0 = 0*32+0 = 0
PA1 = 0*32+1 = 1
  • 通过echo 1 > /sys/class/gpio/export,写入引脚编号,成功之后,会生成gpio1目录 如果没有出现相应的目录,说明此引脚不可导出;
  • 设置端口输入/输出: echo out > /sys/class/gpio/direction, 查看: cat /sys/class/gpio/direction, 支持的参数:
  • in/out
  • high/low 同时设置方向为输出,并将value设置为相应的1/0
  • 高低电平操作: echo 1 > /sys/class/gpio/value 设置为高电平

示例程序

int LEDDriver_SetGPIO()
{
	pid_t status;
	status = system("echo 21 > /sys/class/gpio/export");
	if(status == -1){
		printf("system error");
		return -1;
	}else{
		if(WIFEXITED(status)){
			if(0 == WEXITSTATUS(status)){
					printf("run  successfully\n");
			}else{
				printf("run failed %d \n",WEXITSTATUS(status));
				return -1;
			}
		}else{
			printf("exit code %d \n",WEXITSTATUS(status));
			return -1;
		}
	}
	system("echo out > /sys/class/gpio/gpio21/direction");    
	system("echo 1 > /sys/class/gpio/gpio21/value");    
}
学会此方法,平时的工作效率又提升一倍!

参考

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年12月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 内核配置:
  • 操作步骤
  • 示例程序
    • 学会此方法,平时的工作效率又提升一倍!
    • 参考
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档