日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

驱动框架7——使用gpiolib完成led驱动

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 驱动框架7——使用gpiolib完成led驱动 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以下內容源于朱有鵬《物聯網大講堂》課程的學習整理,如有侵權,請告知刪除。


十四、使用gpiolib完成led驅動

1、流程分析

(1)第1步:使用gpio_request申請要使用的一個GPIO;

(2)第2步:gpio_direction_input/gpio_direction_output 設置輸入/輸出模式;

(3)第3步:設置輸出值gpio_set_value ?獲取IO口值gpio_get_value。


2、代碼實踐

(1)在led1上編寫代碼測試通過;

(2)擴展支持led2和led3、led4,可以分開注冊,也可以使用gpio_request_array去一次注冊;

(3)學習linux中查看gpio使用情況的方法




  • 內核中提供了虛擬文件系統debugfs,里面有一個gpio文件,提供了gpio的使用信息(諸如誰被使用了,誰沒有被使用)。
  • 使用方法:mount -t debugfs debugfs /tmp,然后cat /tmp/gpio即可得到gpio的所有信息,使用完后umount /tmp卸載掉debugfs

(4)代碼(驅動申請LED1資源而已)

#include <linux/module.h> // module_init module_exit #include <linux/init.h> // __init __exit #include <linux/fs.h> #include <linux/leds.h> #include <mach/regs-gpio.h> #include <mach/gpio-bank.h> #include <linux/io.h> #include <linux/ioport.h> #include <mach/gpio.h>#define GPIO_LED1 S5PV210_GPJ0(3) #define GPIO_LED2 S5PV210_GPJ0(4) #define GPIO_LED3 S5PV210_GPJ0(5)#define X210_LED_OFF 1 // X210中LED是正極接電源,負極節GPIO #define X210_LED_ON 0 // 所以1是滅,0是亮static struct led_classdev mydev1; // 定義結構體變量 static struct led_classdev mydev2; // 定義結構體變量 static struct led_classdev mydev3; // 定義結構體變量// 這個函數就是要去完成具體的硬件讀寫任務的 static void s5pv210_led1_set(struct led_classdev *led_cdev,enum led_brightness value) {printk(KERN_INFO "s5pv210_led1_set\n");//writel(0x11111111, GPJ0CON);// 在這里根據用戶設置的值來操作硬件// 用戶設置的值就是valueif (value == LED_OFF){// 用戶給了個0,希望LED滅//writel(0x11111111, GPJ0CON);// 讀改寫三部曲//writel((readl(GPJ0DAT) | (1<<3)), GPJ0DAT);gpio_set_value(GPIO_LED1, X210_LED_OFF);}else{// 用戶給的是非0,希望LED亮//writel(0x11111111, GPJ0CON);//writel((readl(GPJ0DAT) & ~(1<<3)), GPJ0DAT);gpio_set_value(GPIO_LED1, X210_LED_ON);} }static void s5pv210_led2_set(struct led_classdev *led_cdev,enum led_brightness value) {printk(KERN_INFO "s5pv2102_led_set\n");//writel(0x11111111, GPJ0CON);// 在這里根據用戶設置的值來操作硬件// 用戶設置的值就是valueif (value == LED_OFF){// 用戶給了個0,希望LED滅//writel(0x11111111, GPJ0CON);// 讀改寫三部曲//writel((readl(GPJ0DAT) | (1<<4)), GPJ0DAT);}else{// 用戶給的是非0,希望LED亮//writel(0x11111111, GPJ0CON);//writel((readl(GPJ0DAT) & ~(1<<4)), GPJ0DAT);} }static void s5pv210_led3_set(struct led_classdev *led_cdev,enum led_brightness value) {printk(KERN_INFO "s5pv210_led3_set\n");//writel(0x11111111, GPJ0CON);// 在這里根據用戶設置的值來操作硬件// 用戶設置的值就是valueif (value == LED_OFF){// 用戶給了個0,希望LED滅//writel(0x11111111, GPJ0CON);// 讀改寫三部曲//writel((readl(GPJ0DAT) | (1<<5)), GPJ0DAT);}else{// 用戶給的是非0,希望LED亮//writel(0x11111111, GPJ0CON);//writel((readl(GPJ0DAT) & ~(1<<5)), GPJ0DAT);} }static int __init s5pv210_led_init(void) {// 用戶insmod安裝驅動模塊時會調用該函數// 該函數的主要任務就是去使用led驅動框架提供的設備注冊函數來注冊一個設備int ret = -1;// 在這里去申請驅動用到的各種資源,當前驅動中就是GPIO資源if (gpio_request(GPIO_LED1, "led1_gpj0.3")) //這里是申請失敗{printk(KERN_ERR "gpio_request failed\n");} else //申請成功后{// 設置為輸出模式,并且默認輸出1讓LED燈滅gpio_direction_output(GPIO_LED1, 1);}// led1mydev1.name = "led1";mydev1.brightness = 0; mydev1.brightness_set = s5pv210_led1_set;ret = led_classdev_register(NULL, &mydev1);if (ret < 0) {printk(KERN_ERR "led_classdev_register failed\n");return ret;}// led2mydev2.name = "led2";mydev2.brightness = 0; mydev2.brightness_set = s5pv210_led2_set;ret = led_classdev_register(NULL, &mydev2);if (ret < 0) {printk(KERN_ERR "led_classdev_register failed\n");return ret;}// led3mydev3.name = "led3";mydev3.brightness = 0; mydev3.brightness_set = s5pv210_led3_set;ret = led_classdev_register(NULL, &mydev3);if (ret < 0) {printk(KERN_ERR "led_classdev_register failed\n");return ret;}return 0; }static void __exit s5pv210_led_exit(void) {led_classdev_unregister(&mydev1);led_classdev_unregister(&mydev2);led_classdev_unregister(&mydev3);gpio_free(GPIO_LED1); }module_init(s5pv210_led_init); module_exit(s5pv210_led_exit);// MODULE_xxx這種宏作用是用來添加模塊描述信息 MODULE_LICENSE("GPL"); // 描述模塊的許可證 MODULE_AUTHOR("aston <1264671872@qq.com>"); // 描述模塊的作者 MODULE_DESCRIPTION("s5pv210 led driver"); // 描述模塊的介紹信息 MODULE_ALIAS("s5pv210_led"); // 描述模塊的別名信息

總結

以上是生活随笔為你收集整理的驱动框架7——使用gpiolib完成led驱动的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲精品免费看 | 天天操夜夜夜 | 在线观看aa | 制服.丝袜.亚洲.中文.综合 | 欧洲亚洲天堂 | 国产精品视屏 | 成人午夜免费福利 | 亚洲成人免费观看 | 欧美啪啪一区二区 | 亚洲小说区图片区都市 | 麻豆69| 国产成人精品无码免费看81 | 国产毛茸茸 | 国产噜噜噜噜久久久久久久久 | www.youjizz.com亚洲 | 在线观看国产网站 | 久久九九精品视频 | 极品videosvideo喷水 | 午夜影视体验区 | 亚欧成人精品一区二区 | 天堂网在线观看视频 | 伊人精品影院 | 日出白浆视频 | 日本黄色三级 | 国产精品视频一区二区三 | 免费成人av在线播放 | 国产乱码av | 国产日韩一区二区三免费高清 | 97精品一区二区视频在线观看 | 少妇aa | 关之琳三级做爰 | 最新免费黄色网址 | 夜夜夜夜骑 | 91视频入口 | 日韩网站视频 | 浮生影视在线观看免费 | 久久精品无码av | 日本黄色一区二区 | 尤物久久 | 国产精品边吃奶边做爽 | 夜夜草网站 | 国产激情视频一区 | 亚洲视频色 | 亚洲特级黄色片 | 亚洲AV无码成人精品区麻豆 | 国产专区一 | 天海翼视频在线观看 | 嫩草大剧院 | 成人私密视频 | 我和岳m愉情xxxⅹ视频 | 欧美性大战xxxxx久久久 | 好爽…又高潮了毛片免费看 | 黄黄视频在线观看 | 国产欧美一级 | 国产综合日韩 | 五月激情天 | 在线观看一区二区视频 | 性高潮久久久久久久久 | 亲嘴扒胸摸屁股激烈网站 | 欧美日韩一区二区久久 | 超碰超碰 | 女教师痴汉调教hd中字 | av片在线观看网站 | 少妇又色又紧又黄又刺激免费 | 精品久久久久中文慕人妻 | 噼里啪啦国语电影 | 久操精品 | 色哟哟视频在线观看 | 天天躁日日躁狠狠很躁 | 欧美色图一区二区 | 三级色视频 | 麻豆av电影在线观看 | 一对一色视频聊天a | 91亚洲国产成人精品一区二区三 | 亚洲成人一区 | 乌克兰极品av女神 | 久草美女| 欧美亚洲天堂 | 秘密基地电影免费版观看国语 | 亚洲国产欧美在线人成 | 久久无毛| 亚洲国产精品免费 | 日本大奶少妇 | 成人国产精品一区 | 九九热超碰 | 国产精品腿扒开做爽爽爽挤奶网站 | 亚洲干综合| 亚洲国产一区二区a毛片 | 国产偷v国产偷v亚洲高清 | 成年丰满熟妇午夜免费视频 | 日韩高清在线一区二区 | 2025国产精品视频 | 免费三级在线 | 双性人hdsexvideos | 丰满人妻一区二区三区53 | 日韩精品电影一区二区 | 91激情| 免费看一级黄色大全 | 日韩高清一区 |