华清远见上海中心22071班--11.28作业
题目:三个按键实现按键中断,key1>>led1,key2>>led2, key3>>led3。按键按一下灯亮,再按一下灯灭 。
#include <linux/init.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/gpio.h>
#include <linux/of_gpio.h>
#include <linux/timer.h>
#include <linux/of_irq.h>
#include <linux/interrupt.h>//定义指针指向获取的设备树节点信息空间
struct device_node *node;
struct gpio_desc *gpiono1;
struct gpio_desc *gpiono2;
struct gpio_desc *gpiono3;
int ret;unsigned int irqno1;
unsigned int irqno2;
unsigned int irqno3;struct device_node *node_irq;//中断处理函数
irqreturn_t irq_handler1(int irqno, void *dev)
{printk("key1 interrupt....\n");gpiod_set_value(gpiono1, !gpiod_get_value(gpiono1));return IRQ_HANDLED;
}
irqreturn_t irq_handler2(int irqno, void *dev)
{printk("key2 interrupt...\n");gpiod_set_value(gpiono2, !gpiod_get_value(gpiono2));return IRQ_HANDLED;
}
irqreturn_t irq_handler3(int irqno, void *dev)
{printk("key3 interrupt....\n");gpiod_set_value(gpiono3, !gpiod_get_value(gpiono3));return IRQ_HANDLED;
}static int __init mycdev_init(void)
{//通过名字获取设备树节点信息node = of_find_node_by_name(NULL, "myleds");if (node == NULL){printk("通过名字解析设备树节点失败\n");return -EFAULT;}printk("成功解析到设备树节点\n");//获取并申请gpio编号gpiono1 = gpiod_get_from_of_node(node, "myled1", 0, GPIOD_OUT_LOW, NULL);if (IS_ERR(gpiono1)){printk("获取gpio编号失败\n");return PTR_ERR(gpiono1);}printk("成功获取到编号1\n");gpiono2 = gpiod_get_from_of_node(node, "myled2", 0, GPIOD_OUT_LOW, NULL);if (IS_ERR(gpiono2)){printk("获取gpio编号失败\n");return PTR_ERR(gpiono2);}printk("成功获取到编号2\n");gpiono3 = gpiod_get_from_of_node(node, "myled3", 0, GPIOD_OUT_LOW, NULL);if (IS_ERR(gpiono3)){printk("获取gpio编号失败\n");return PTR_ERR(gpiono3);}printk("成功获取到编号3\n");//通过名字获取中断设备树节点信息node_irq = of_find_node_by_name(NULL, "myirq");if (node_irq == NULL){printk("通过名字解析设备树节点失败\n");return -EFAULT;}printk("成功解析到中断设备树节点\n");//根据设备树获取key1软中断号irqno1 = irq_of_parse_and_map(node_irq, 2);if (irqno1 == 0){printk("获取软中断号失败\n");return EINVAL;}printk("获取key1软中断号成功\n");//根据设备树获取key2软中断号irqno2 = irq_of_parse_and_map(node_irq, 0);if (irqno2 == 0){printk("获取软中断号失败\n");return EINVAL;}printk("获取key2软中断号成功\n");//根据设备树获取key2软中断号irqno3 = irq_of_parse_and_map(node_irq, 1);if (irqno3 == 0){printk("获取软中断号失败\n");return EINVAL;}printk("获取key3软中断号成功\n");//将中断号注册进内核ret = request_irq(irqno1, irq_handler1, IRQF_TRIGGER_FALLING, "key1_inte", NULL);if (ret){printk("注册中断失败\n");return ret;}ret = request_irq(irqno2, irq_handler2, IRQF_TRIGGER_FALLING, "key2_inte", NULL);if (ret){printk("注册中断失败\n");return ret;}ret = request_irq(irqno3, irq_handler3, IRQF_TRIGGER_FALLING, "key3_inte", NULL);if (ret){printk("注册中断失败\n");return ret;}printk("注册中断成功\n");return 0;
}
static void __exit mycdev_exit(void)
{//中断注销free_irq(irqno1, NULL);free_irq(irqno2, NULL);free_irq(irqno3, NULL);//熄灭ledgpiod_set_value(gpiono1, 0);gpiod_set_value(gpiono2, 0);gpiod_set_value(gpiono3, 0);//释放gpio编号gpiod_put(gpiono1);gpiod_put(gpiono2);gpiod_put(gpiono3);
}
module_init(mycdev_init);
module_exit(mycdev_exit);
MODULE_LICENSE("GPL");
测试结果:
华清远见上海中心22071班--11.28作业相关推荐
- 华清远见上海中心22071班--11.19作业
题目:实现开发板点灯操作 程序要求: 1)分部实现注册字符设备驱动 2)自动创建设备节点 3)通过结构体对led灯地址进行映射 4)次设备号完成私有数据传参 5)在open函数中获取到次设备号,用私有 ...
- 华清远见上海中心22071班--11.24作业
题目:应用层采取ioctl命令控制,驱动代码用GPIO子系统,实现开发板6盏灯的循环亮灭 头文件程序: #ifndef __LED_H__ #define __LED_H__typedef enum{ ...
- 华清远见上海中心22071班--11.29作业
题目:paltform总线中通过名字.名字列表和设备树三种方式实现driver和device匹配 方式一>>>名字: #include <linux/init.h> #i ...
- 华清远见上海中心22071班 8.25作业
目录 1.用无头结点的循环链表实现约瑟夫环问题 头文件: 功能函数: 主函数: 终端输出: 2.顺序栈实现进制转换问题 头文件: 功能函数: 主函数: 终端输出: 1.用无头结点的循环链表实现约瑟夫环 ...
- 华清远见上海中心22071班 9.2作业
1.用父子进程拷贝一张图片,其中子进程先拷贝后半部分,父进程后拷贝前半部分.要求用文件IO实现. 函数: #include <stdio.h> #include <fcntl.h&g ...
- 华清远见上海中心22071班 9.7作业
目录 1.创建两个线程 A.B,要求A线程读取文件中的数据,B线程将读取到的数据打印到终端上,类似shell命令cat. 2.编写一个程序,开启3个线程,这3个线程的ID分别为A.B.C,每个线程将自 ...
- 华清远见上海中心22071班 9.30作业
电子词典: 登录注册功能,不能重复登录,重复注册 单词查询功能 历史记录功能,存储单词,意思,以及查询时间 基于TCP,支持多客户端连接 采用数据库保存用户信息与历史记录 将dict.txt的数据导入 ...
- 华清远见上海中心22071班 8.24作业
1.单向链表按位置修改 void list_update_pos(linklist *L,int pos,datatype e) {if(NULL==L||list_empty(L)||pos< ...
- 华清远见上海中心22071班 9.21作业
1.完成数据库的插入.删除.修改,插入选择全字段插入.删除.修改选择用id的方式 代码: #include <stdio.h> #include <sqlite3.h> #in ...
最新文章
- 批量更新日期字段中的年
- 未来CPU内核将更简单!
- roboware studio_关于安装Roboware的教程
- Java 开发新选择?Apache NetBeans IDE 9.0 正式发布
- 【51nod】最大子段和
- Ext2 常见界面界面(grid分页、窗口布局、下拉框级联)
- 利用栈将html源码解析为节点树
- JSP的自定义标签(一)
- ISSCC2021 基于SRAM的存内计算16.3阅读记录
- 学号密码错误的计算机流程图,自学考试管理信息系统练习题及答案
- 【DP】洛谷 P1510 精卫填海
- JavaEE个人学习总结
- python心得总结知识点和收获,千锋Python培训学员心得 在总结中收获提升
- 信息系统项目管理师之信息化与信息系统
- UpdateDate()
- C语言中%s,%m.ns 和 %e,%m.ne 的意思
- 达人评测 华为matebook16对比联想小新pro16锐龙版 2021哪个好
- 模拟CMOS集成电路设计 学习笔记(二)
- 小米十年,做不好售后
- Android前台服务讲解二之自定义通知视图(RemoteViews)及数据UI更新
热门文章
- iOS和Android手机浏览器链接打开app store或应用市场下载软件讲解
- mysql数据库字段默认值设为什么_为什么数据库字段需要设置默认值
- pythonurllib登录微博账号_Python使用cookielib和urllib2模拟登录新浪微博并抓取数据...
- 手机PLC编程学习仿真软件(安卓版)
- 叮咚~你订阅的 OpenMMLab 4 月月刊已送达
- Unity3D 之 坦克大战(一)
- 获取DedeCMS当前文章页的本文地址URL地址方法
- geoserver发布离线瓦片卫星图TIF格式
- 【Python】二进制字符串异或
- python读取rtf文件中指定的内容_使用Python读取RTF文件时遇到欧元符号问题