完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
今天我们大家讨论下关于GPIO驱动的一些东西,首先我们来看下针对OK210开发板LED驱动的源码,这也是一个比较简单的gpio驱动程序。 #include #include #include #include #include #include #include #include #include #include #include #include #include #define DEVICE_NAME "leds" static int led_gpios[] = { #ifdef CONFIG_OK210_BOARD_V2 S5PV210_MP04(4), //在gpio-herring.h中对gpio寄存器有定义; S5PV210_MP04(5), S5PV210_MP04(6), S5PV210_MP04(7), #else S5PV210_GPH2(0), S5PV210_GPH2(1), S5PV210_GPH2(2), S5PV210_GPH2(3), #endif }; 上面这段代码主要是根据配置文件的不同调用不同寄存器来实现不同的功能; #define LED_NUM ARRAY_SIZE(led_gpios) static long fl210_leds_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { switch(cmd) { case 0: case 1: if (arg > LED_NUM) { return -EINVAL; } gpio_set_value(led_gpios[arg], !cmd); //对指定的GPIO寄存器写上一个值 printk(DEVICE_NAME": %ld %dn", arg, cmd); break; default: return -EINVAL; } return 0; } static struct file_operations fl210_led_dev_fops = { .owner = THIS_MODULE, .unlocked_ioctl = fl210_leds_ioctl, }; static struct miscdevice fl210_led_dev = { .minor = MISC_DYNAMIC_MINOR, .name = DEVICE_NAME, .fops = &fl210_led_dev_fops, }; static int __init fl210_led_dev_init(void) { int ret; int i; for (i = 0; i < LED_NUM; i++) { ret = gpio_request(led_gpios, "LED"); if (ret) { printk("%s: request GPIO %d for LED failed, ret = %dn", DEVICE_NAME, led_gpios, ret); return ret; } s3c_gpio_cfgpin(led_gpios, S3C_GPIO_OUTPUT); //设置数组中的 这个gpio为输出模式 gpio_set_value(led_gpios, 1); } ret = misc_register(&fl210_led_dev);// 注册杂项设备 printk(DEVICE_NAME"tinitializedn"); return ret; } 这里我们看下 gpio_request(unsigned gpio, const char *label) 这个函数的参数,gpio则为你要申请的哪一个管脚,label则是为其取一个名字。 static void __exit fl210_led_dev_exit(void) { int i; for (i = 0; i < LED_NUM; i++) { gpio_free(led_gpios); //释放io } misc_deregister(&fl210_led_dev); //释放杂项设备 } module_init(fl210_led_dev_init); module_exit(fl210_led_dev_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Forlinx Inc."); 我们通过对这段代码的分析可以看出对GPIO的操作主要用到了gpio_set_value (),gpio_request(),s3c_gpio_cfgpin(),这三个函数和led_gpios[]数组,我们可以通过对这个数组里面的成员的修改来实现对其他管脚控制,同时运行上面三个函数可以实现对gpio的赋值控制 |
|
|
相关推荐
|
|
|
好评呢????????????????
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
TuyaOpen开源 + DshanPi-A1(RK3576)开发板的Tuya IoT平台接入与AI大模型整合方案(笔记)
1327 浏览 0 评论
「含关键代码」基于AM3352/AM3354/AM3359的Linux开发案例分享
5241 浏览 0 评论
87854 浏览 0 评论
【高手问答】如何做到精通linux技术?资深工程师带你突破难点
5308 浏览 2 评论
3997 浏览 2 评论
2335浏览 1评论
SiRider S1芯擎工业开发板测评+1.防止黑客入侵通信监控系统(PSA)
1662浏览 0评论
TuyaOpen开源 + DshanPi-A1(RK3576)开发板的Tuya IoT平台接入与AI大模型整合方案(笔记)
1332浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 19:18 , Processed in 0.577261 second(s), Total 70, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖