qt gpio

Tiny6410上的GPIO驱动及用户测试程序

 转 

最近在玩友善之臂Tiny6410开发板,但是源码中没有用户层操作GPIO的GPIO驱动,且之前的工作一直都是看和改,难免手生,故写此GPIO驱动,以作练习之用。

1. 驱动层gpio.c

编译:将此gpio.c放在driver/gpio目录下,并修改下面的Makefile文件,添加 obj-y += gpio.o

使用此驱动在命令行下操作GPIO:

cd /sys/class/s3c-gpio

echo GPK 4 0 > write   // 设置GPK4输出0

echo GPN 0 > read    //读取GPN0的状态

关闭/打开 GPIO驱动调试信息:

cd /sys/module/gpio/parameters

echo 0 > gpio_dbg    //关闭GPIO驱动调试信息

echo 1 > gpio+dbg    //打开GPIO驱动调试信息


#include <linux/module.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/mm.h>
#include <linux/sched.h>
#include <linux/init.h>
#include <linux/cdev.h>
#include <asm/io.h>
#include <asm/system.h>
#include <asm/uaccess.h>
#include <linux/device.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/gpio.h>
#include <plat/gpio-core.h>
#include <plat/gpio-cfg.h>
#include <plat/gpio-cfg-helpers.h>

static int gpio_dbg = 1;
module_param(gpio_dbg, int, S_IRUGO | S_IWUSR);

#define gpio_dbg(format, args...) \
 do { \
  if(gpio_dbg) \
   printk(format, ##args); \
 } while (0)


#define CLASS_NAME "s3c-gpio"

static struct class *gpio_class;

static int s3c64xx_gpio_sections[] = {
 S3C64XX_GPA(0), S3C64XX_GPB(0), S3C64XX_GPC(0), S3C64XX_GPD(0), 
 S3C64XX_GPE(0), S3C64XX_GPF(0), S3C64XX_GPG(0), S3C64XX_GPH(0),
 S3C64XX_GPI(0), S3C64XX_GPJ(0), S3C64XX_GPK(0), S3C64XX_GPL(0),
 S3C64XX_GPM(0), S3C64XX_GPN(0), S3C64XX_GPO(0), S3C64XX_GPP(0),
 S3C64XX_GPQ(0),
};

static int s3c_gpio_get_pin_nr(char* label, int nr)
{
 struct s3c_gpio_chip *chip;
 int pin;
 int ret = -EINVAL;
 int i;

 for(i=0; i<ARRAY_SIZE(s3c64xx_gpio_sections); i++)
 {
  pin = s3c64xx_gpio_sections[i];
  chip = s3c_gpiolib_getchip(pin);
  if (!chip)
   continue;
  if(strcmp(chip->chip.label, label)==0)
  {
   if(nr<(chip->chip.ngpio))
   {
    pin = pin + nr;
    ret = pin;
   }
   break;
  }
 }
 if(ret<0)
  printk("Can't find gpio: [%s%d] !\n", label, nr);
 else
  gpio_dbg("Find gpio: [%s%d], nr = %d\n", label, nr, ret);
 return ret;
}

static ssize_t gpio_read_show(struct class *dev, struct class_attribute *attr, char *buf)
{
 return sprintf(buf, "%s\n", "Usage: echo GPX nr > read");
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值