linux编写gpio驱动程序,linux gpio字符设备驱动

在linux下编写led驱动,控制相应的gpio管脚。

在这里有两种方式

1) 直接操作相应的寄存器

2) 通过内核提供的gpio操作库函数

第一种方式就省略了,只讲第二种方式。

这里板卡上有两个led灯,在用户空间采用两种方式控制led

1. /dev/led0 /dev/led1

fd0 = open("/dev/led0", O_RD_WR);

ioctl(fd0, 1, 0);//ioctl(fd,cmd,data)

ioctl(fd0, 0, 0);

fd0 = open("/dev/led1", O_RD_WR);

ioctl(fd1, 1, 1);//ioctl(fd,cmd,data)

ioctl(fd1, 0, 1);

2. /dev/led

fd = open("/dev/led", O_RD_WR);

ioctl(fd0, 1, 0);//ioctl(fd,cmd,data)

ioctl(fd0, 0, 0);

ioctl(fd0, 1, 1);//ioctl(fd,cmd,data)

ioctl(fd0, 0, 1);

主要添加的源代码 #include #include

unsigned long led_gpio_table[2] =

{

S5PV210_GPC1(3),//

S5PV210_GPC1(4),

};

int cdd_open(...)

{

gpio_request(led_gpio_table[0], "GPC1_3");/*申请gpio管脚*/

}

int cdd_ioctl(...)

{

switch(cmd)

{

case 1:

gpio_direction_output(led_gpio_table[data], 0);/*设置管脚为输出,默认输出低电平*/

s3c_gpio_setpull(ed_gpio_table[data], S3C_GPIO_PULL_NONE);/*禁止内部上拉*/

gpio_set_value(led_gpio_table[data], 1);/*设置输出高电平*/

break;

case 0:

gpio_direction_output(led_gpio_table[data], 0);/*设置管脚为输出,默认输出低电平*/

s3c_gpio_setpull(ed_gpio_table[data], S3C_GPIO_PULL_NONE);/*禁止内部上拉*/

gpio_set_value(led_gpio_table[data], 0);/*设置输出低电平*/

break;

default:

return -EINVAL;

}

}

int cdd_release(...)

{

gpio_free(...);/*释放管脚*/

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值