S3C2440按键、中断、等待队列

news2025/1/15 12:46:04

内核

  • 中断
    • 中断注册函数request_irq
    • 禁止其他中断执行disable_irq()
    • 删除中断函数free_irq()
  • 等待队列

中断

中断注册函数request_irq

request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev)
作用:注册中断服务函数
参数:
	irq:中断名称
	handeler:中断函数名
	flags:宏 IRQF_TRIGGER_FALLING (...)
	name:中断名称(自己起)
	dev:设备名所在

禁止其他中断执行disable_irq()

disable_irq((unsigned int irq)

删除中断函数free_irq()

void free_irq(unsigned int irq, void *dev_id)

等待队列

1.定义一个队列头 数据类型位wait_queue_head_t
2.初始化等待队列头 (使用带参宏init_waitqueue_head(q))
参数:wait_queue_head_t类型变量
3.阻塞wait_event(wq,condition);
condition为假才能进入函数调用

//Linux驱动编程按键(等待队列demo以及中断注册函数)
#include<linux/init.h>
#include<linux/module.h>
#include<linux/fs.h>
#include<linux/miscdevice.h>
#include<asm/uaccess.h>
#include<asm/io.h>
#include<linux/interrupt.h>
#include<mach/irqs.h>
#include<linux/wait.h>
#include<linux/sched.h>
unsigned int *regGPGCON;
unsigned int *regGPGDAT;

static int key;
static wait_queue_head_t wq;
static int condition;
/*static int key_pressed(void)
{
	int ret = 0;
	if(!(*regGPGDAT & 0x01))
	{
		return 1;
	}

	return ret;
}*/

static ssize_t key_device_read(struct file *fp, char __user *puser, size_t len, loff_t *offset)
{
	condition = 0;
	wait_event_interruptible(wq, condition);
	copy_to_user(puser, &key, sizeof(key));
	key = 0;
	return sizeof(key);
}	
int key_device_open(struct inode *pnode, struct file *fp)
{
	return 0;

}
int key_device_release(struct inode *pnode, struct file *fp)
{
	return 0;

}
struct file_operations fops = 
{
	.owner = THIS_MODULE,
	.read = key_device_read,
	.open = key_device_open,
	.release = key_device_release
};

static struct miscdevice key_device =
{
	.minor = MISC_DYNAMIC_MINOR,
	.name = "key",
	.fops = &fops,
};


irqreturn_t key_interrupt(int irq_num, void *dev)
{
	if(irq_num == IRQ_EINT8)
	{
		key = 1;
	}
	condition = 1;
	wake_up_interruptible(&wq);
	return IRQ_HANDLED;
}

static int __init key_driver_init(void)
{
	misc_register(&key_device);
	if(request_irq(IRQ_EINT8, key_interrupt, IRQF_TRIGGER_FALLING | IRQF_DISABLED, "EINT8", &key_device) != 0)
	{
		misc_deregister(&key_device);
		return -1;
	}
	init_waitqueue_head(&wq);
	regGPGCON = ioremap(0x56000060, 4);
	regGPGDAT = ioremap(0x56000064, 4);
	*regGPGCON &= ~(0x03 << 0);
	*regGPGCON |= (0x01 << 1);
	return 0;
}

static void __exit key_driver_exit(void)
{
	iounmap(regGPGCON);
	iounmap(regGPGDAT);
	disable_irq(IRQ_EINT8);
	free_irq(IRQ_EINT8, &key_device);
	misc_deregister(&key_device);
}
module_init(key_driver_init);
module_exit(key_driver_exit);
MODULE_LICENSE("GPL");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2119660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【重学 MySQL】二十一、order by 实现数据排序

【重学 MySQL】二十一、order by 实现数据排序 基本语法示例按薪水升序排序按薪水降序排序根据多个列排序 注意事项 在MySQL中&#xff0c;ORDER BY子句用于对结果集中的数据进行排序。你可以根据一个或多个列对结果进行升序&#xff08;ASC&#xff09;或降序&#xff08;DESC…

JavaEE:文件操作

文章目录 文件操作和IO文件系统操作File介绍属性构造方法方法 代码演示前四个listmkdirrenameTo 文件操作和IO 文件系统操作 创建文件,删除文件,创建目录,重命名… Java中有一个类,可以帮我们完成上述操作. 这个类叫做File类. File介绍 属性 这个表格描述了文件路径的分隔符…

【IIS实战】ERR_SSL_KEY_USAGE_INCOMPATIBLE

当我们第一次配置IIS服务器做测试环境网站时&#xff0c;如果没有插手做自签名证书&#xff0c;而是用IIS自带的自签名证书&#xff0c;那么现代浏览器访问HTTPS测试站点大概率会有下图所示的报错&#xff1a; &#xff08;IE&#xff1a;我能打开( •̀ ω •́ )y&#xff0…

VuePress搭建个人博客(手动安装)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

ENSP配置云服务找不到以太网卡【已解决】

在搭建网络拓扑图的时候&#xff0c;想要连接云&#xff0c;发现没有以太网卡 环境&#xff1a;Windows10&#xff0c;ensp模拟器 以为一直是用轻薄本&#xff0c;上网都是连接wifi&#xff0c;所以没用上以太网卡。 一、在电脑环境上安装以太网卡 winR跳出运行口&#xff0c…

chapter13-常用类——(StringBuffer StringBuilder)—day15

475-StringBuffer结构剖析 476-StringBuffer转换 477-StringBuffer方法

2024.9.9

优化登录框&#xff1a; 当用户点击取消按钮&#xff0c;弹出问题对话框&#xff0c;询问是否要确定退出登录&#xff0c;并提供两个按钮&#xff0c;yes|No&#xff0c;如果用户点击的Yes&#xff0c;则关闭对话框&#xff0c;如果用户点击的No&#xff0c;则继续登录 当用户…

Java后台生成二维码

一、效果图 二、实现代码 1.添加依赖 <!-- zxing生成二维码 --> <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version> </dependency><dependency><grou…

【Dart 教程系列第 50 篇】在 Flutter 项目的国际化多语言中,如何根据翻译提供的多语言文档表格,快速生成不同语言的内容

这是【Dart 教程系列第 50 篇】&#xff0c;如果觉得有用的话&#xff0c;欢迎关注专栏。 博文当前所用 Flutter SDK&#xff1a;3.22.1、Dart SDK&#xff1a;3.4.1 文章目录 一&#xff1a;问题描述二&#xff1a;解决方案三&#xff1a;完整代码 一&#xff1a;问题描述 在…

学会分析问题,画出分析图,解释问题过程,找出规律 ;整数数组分为左右2个部分,左边位奇数右边偶数

// 整数数组左边是奇数右边是偶数.cpp : Defines the entry point for the console application. //#include "stdafx.h" #include<stdio.h> void swap(int& a,int& b) {int tempa;ab;btemp; } int main(int argc, char* argv[]) {int a[7]{1,2,3,4,5,…

使用jenkins 打包前端私服代码失败的问题

问题现象&#xff1a; jinekins 流水线在yarn 编译前端私服依赖包的时候&#xff0c;报错&#xff0c;提示 Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 【emm。。。之前的构建都是好好的&#xff0c;也不知道前端大哥啥时候去封装的前端代码&am…

【每日刷题】Day115

【每日刷题】Day115 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. LCR 089. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 2. LCR 090. 打家劫舍 II - 力扣&…

阿里云服务器镜像,有大用处

大家好&#xff0c;我是小悟 有时候阿里云旧服务器快到期了&#xff0c;想把项目、数据、软件挪到新服务器上&#xff0c;如果全部重新搭建的话&#xff0c;那无疑是耗时又费力。有了镜像迁移&#xff0c;就方便了许多。 新旧服务器的类型要一致&#xff0c;比如都是ECS服务器…

Matlab程序练习

Part1 1.求 [100,999] 之间能被 21整除的数的个数。 程序&#xff1a; 主文件&#xff1a;main.m clear; start_num 100; end_num 999; div_num 21; res div(start_num,end_num,div_num); fprintf("[%d,%d]之间能被%d整除的数的个数为%d个\n",start_num,end_…

使用Azure+C#+visual studio开发图像目标检测系统

在这篇文章里面&#xff0c;我们讲解使用AzureC#visual studio在Azure上做图像的目标检测系统。 笔者是头一次接触C#。之前以Python Java和Scala为主。感觉C#.Net是一种挺好用的开发系统。C#和Java非常像。会一个学另一个很快。 首先&#xff0c;目标检测是个什么东西&#x…

vulhub spring 远程命令执行漏洞(CVE-2022-22963)

1.执行以下命令启动靶场环境并在浏览器访问 cd spring/CVE-2022-22963docker-compose up -ddocker ps 2.反弹shell 构造payload 3.页面刷新抓包&#xff0c;修改内容 POST /functionRouter HTTP/1.1 Host: 172.16.1.89:8080 Accept-Encoding: gzip, deflate Accept: */* Acc…

任务栏颜色怎么改?快速实现Windows系统任务栏透明,全面指南和操作实践!

任务栏是电脑操作系统的重要组成部分&#xff0c;电脑会自动为任务栏选择颜色&#xff0c;一般分为浅色&#xff08;白色&#xff09;、深色&#xff08;黑色&#xff09;。如果想要设置成自己喜欢的颜色&#xff0c;也是可以更改的&#xff0c;那么任务栏颜色怎么改呢&#xf…

实时图像处理的加速器:《基于FPGA的数字图像处理原理及应用》(可下载)

图像处理技术已成为我们生活中不可或缺的一部分。从智能手机的摄像头到卫星图像分析&#xff0c;从医疗影像到安全监控&#xff0c;图像处理技术的应用无处不在。随着技术的进步&#xff0c;我们对图像处理的速度和质量要求也越来越高。在这一背景下&#xff0c;现场可编程门阵…

CDGA|大模型数据治理的案例与实践深入剖析

随着人工智能技术的飞速发展&#xff0c;大模型在数据治理领域的应用日益广泛&#xff0c;为企业带来了前所未有的机遇与挑战。本文将通过几个具体案例&#xff0c;深入剖析大模型在数据治理中的实践应用&#xff0c;探讨其带来的变革与影响。 大模型在数据治理中的核心优势 大…

大腾智能出席龙华云创中心启动与鸿蒙园揭牌仪式

在数字化转型的浪潮中&#xff0c;深圳市龙华区再次引领行业创新&#xff0c;携手华为云成功举办“龙华工业软件云工程应用创新中心启动仪式暨鸿蒙产业园揭牌仪式”&#xff0c;本次盛会已于8月26日圆满落幕。活动现场&#xff0c;来自全国各地的行业精英、企业领袖及专家学者汇…