嵌入式linux控制led单个灯亮,GPIOLIB方式控制LED

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

1、驱动

/*

GPIO Driver driver for EasyARM-iMX283

*/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

//#include

//#include

#define DEVICE_NAME"imx28x_led"

#define LED_GPIOMXS_PIN_TO_GPIO(PINID_LCD_D23)//for 283 287A/B

//#define LED_GPIOMXS_PIN_TO_GPIO(PINID_SAIF0_MCLK)//for 280

/*--------------------------------------------------------------------------------------------------------

*/

static int gpio_open(struct inode *inode, struct file *filp);

static int gpio_release(struct inode *inode, struct file *filp);

ssize_t gpio_write(struct file *filp, const char __user *buf, size_t count,

loff_t *f_pos);

static long gpio_ioctl(struct file *file,unsigned int command, unsigned long arg);

static int gpio_init(void);

static void gpio_exit(void);

/*--------------------------------------------------------------------------------------------------------

*/

static int gpio_open(struct inode *inode, struct file *filp)

{

gpio_request(NUC970_PB5, "led");

return 0;

}

static int gpio_release(struct inode *inode, struct file *filp)

{

gpio_free(NUC970_PB5);

return 0;

}

ssize_t gpio_write(struct file *filp, const char __user *buf, size_t count,

loff_t *f_pos)

{

char data[2];

copy_from_user(data, buf, count);

gpio_direction_output(NUC970_PB5, data[0]);

return count;

}

static long gpio_ioctl(struct file *file,unsigned int command, unsigned long arg)

{

//int data=0;

switch (command) {

case 0:

gpio_direction_output(NUC970_PB5, 0);

break;

case 1:

gpio_direction_output(NUC970_PB5, 1);

break;

}

return 0;

}

static struct file_operations gpio_fops={

.owner= THIS_MODULE,

.open = gpio_open,

.write= gpio_write,

.release= gpio_release,

.unlocked_ioctl = gpio_ioctl,

};

static struct miscdevice gpio_miscdev = {

.minor = MISC_DYNAMIC_MINOR,

.name= DEVICE_NAME,

.fops= &gpio_fops,

};

static int __init gpio_init(void)

{

misc_register(&gpio_miscdev);

printk(DEVICE_NAME" up. \n");

return 0;

}

static void __exit gpio_exit(void)

{

misc_deregister(&gpio_miscdev);

printk(DEVICE_NAME " down.\n");

}

module_init(gpio_init);

module_exit(gpio_exit);

MODULE_LICENSE("Dual BSD/GPL");

MODULE_AUTHOR("zhuguojun, ZhiYuan Electronics Co, Ltd.");

MODULE_DESCRIPTION("GPIO DRIVER FOR EasyARM-i.MX28xx");

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值