linux gpio 用户空间,linux应用开发:用户空间如何通过sysfs控制GPIO

开发环境Ubuntu:14.04开发板:A33-Vstar开发板系统:linux-3.4.39-----------------------------------------------------

1. 启用GPIO sysfs interface首先看系统中有没有“/sys/class/gpio”这个文件夹。如果没有在编译内核的时候打开 Device Drivers-> GPIO Support-> /sys/class/gpio/… (sysfs interface)

2. 计算GPIO引脚编号打开linux-3.4/arch/arm/mach-sunxi/include/mach/gpio.h可以看到如下定义:#define SUNXI_PA_BASE0#define SUNXI_PB_BASE32#define SUNXI_PC_BASE64#define SUNXI_PD_BASE96#define SUNXI_PE_BASE128#define SUNXI_PF_BASE160#define SUNXI_PG_BASE192#define SUNXI_PH_BASE224#define SUNXI_PI_BASE256#define SUNXI_PJ_BASE288#define SUNXI_PK_BASE320#define SUNXI_PL_BASE352#define SUNXI_PM_BASE384#define SUNXI_PN_BASE416

规律:GPIOn_x的编号为32*n+x,例如此处用的GPIO1_6的编号为32*1+6=38。例如,我们想操作GPIO_PH7引脚,编号为:SUNXI_PH_BASE+引脚编号,即:224+7=231

注:也可以用以下方式取得GPIO编号信息,在终端中敲入以下命令:$ cd /sys/class/gpio$ for i in gpiochip* ; do echo `cat $i/label`: `cat $i/base` ; done但是A33不支持。

3. GPIO控制测试1)echo 231 > /sys/class/gpio/export执行此命令会在gpio/下生成gpio231目录2)echo out > gpio231/direction设置GPIO_PH7方向为输出3)控制echo 1 > gpio231/value设置GPIO_PH7为高电平echo 0 > gpio231/value设置GPIO_PH7为低电平4)关闭控制echo 231 > /sys/class/gpio/unexport

4. 说明1)/sys/class/gpio/export文件用于通知系统需要导出控制的GPIO引脚编号2)/sys/class/gpio/unexport 用于通知系统取消导出3)/sys/class/gpio/gpiochipX目录保存系统中GPIO寄存器的信息,包括每个寄存器控制引脚的起始编号base,寄存器名称,引脚总数。4)向/sys/class/gpio/export写入编号,比如12号引脚,echo 12 > /sys/class/gpio/export,命令成功后生成/sys/class/gpio/gpio12目录,如果没有出现相应的目录,说明此引脚不可导出。5)gpio231/下文件说明        direction 这个文件是控制你是输出还是输入模式

如果想设置为输入:echo in > direction

如果想设置为输出:echo out > direction

value 这个文件是在输出模式时,控制高低电平

高电平:echo 1 > value

低电平:echo 0 > value

edge 这个控制中断触发模式

无: echo none > edge

上升沿触发:echo rising > edge

下降沿触发:echo falling > edge

轮询:echo both > edge

active_low: 这个按照官方的说法是这个翻转电平,输入非零的数即上升沿变为下降沿。

o: echo 0 > active_low

非零的数: echo 3 > active_low

5. 用户空间编程控制#include #include #include #include #define GPIO_PH7231

int main(void){FILE *p=NULL;int i=0;

p = fopen("/sys/class/gpio/export","w");fprintf(p,"%d", GPIO_PH7);fclose(p);

p = fopen("/sys/class/gpio/gpio231/direction","w");fprintf(p,"out");fclose(p);

printf("running.

");for(i=0; i<50; i++){printf("gpio_ph7 value is 1.

");p = fopen("/sys/class/gpio/gpio231/value","w");fprintf(p,"%d",1);sleep(1);fclose(p);

printf("gpio_ph7 value is 0.

");p = fopen("/sys/class/gpio/gpio231/value","w");fprintf(p,"%d",0);sleep(1);fclose(p);

}

p = fopen("/sys/class/gpio/unexport","w");fprintf(p,"%d", GPIO_PH7);fclose(p);

return 0;}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值