龙芯2k按键中断驱动_外部中断按键驱动
我的开发板上一共有四个按键,分别影射到GPF0、GPF2、GPG3、GPG11,当按下按键时分别产生0、2、11、19号外部中断。由于没有安装驱动,当按下按键时,没有任何反应。所以需要编写一个驱动,将四个按键驱动起来。
下面是我写的按键驱动的小例子,功能很简单,当按下按键时打印出“key n(n = 1~4) is pressed!”的消息。
/********************************************************************
' 创建日期: 2006/05/04
' 文件名称: keyboard_demo.c
' 文件作者: Gene.Shao (E-Mail To: sjiang1981@163.com)
'
' 文件功能: 按键驱动
' 文件描述: 开发板上一共有四个按键,分别影射到GPF0、GPF2、GPG3、GPG11,
当按下按键时分别产生0、2、11、19号外部中断。这个驱动十分简
单,它仅仅是在按下了按键后打印出一串消息。如果希望按下按键
后做一些更有意义的事,需要改写中断处理程序key_irq。
*********************************************************************/
#i nclude #i nclude #i nclude #i nclude #i nclude #i nclude #i nclude #i nclude #i nclude #i nclude #i nclude #i nclude
/*
总共4个按键,当按下按键时,分别产生0,2,11,19号中断。
IRQ_EINTx在../include/asm-arm/arch-s3c2410/irqs.h中定义。
GPIO_xx在../include/asm-arm/arch-s3c2410/S3C2410.h中定义。
*/
static struct key_info {
int irq_no;
unsigned int gpio_port;
int key_value;
} key_info_tab[4] = {
{ IRQ_EINT0, GPIO_F0, 1}, //第一个按键
{ IRQ_EINT2, GPIO_F2, 2}, //第二个按键
{ IRQ_EINT11, GPIO_G3, 3}, //第三个按键
{ IRQ_EINT19, GPIO_G11, 4}, //第四个按键
};
//中断处理程序
static void key_irq(int irq, void *dev_id, struct pt_regs *reg)
{
struct key_info *k;
int i;
//扫描按键表,根据中断号,找出所按下的按键。
for (i = 0; i < sizeof key_info_tab / sizeof key_info_tab[1]; i++) {
k = key_info_tab + i;
if (k->irq_no == irq) {
printk("key %d is pressed!\n", k->key_value);
break;
}
}
return;
}
//初始化
static int __init keyboard_init(void)
{
struct key_info *k;
int i;
for (i = 0; i < sizeof key_info_tab / sizeof key_info_tab[1]; i++) {
k = key_info_tab + i;
//设置与外部中断号相对应的GPIO端口,上升沿和下降沿各产生一个中断,禁用pull-up.
//set_external_irq是在../kernel/arch/arm/mach-s3c2410/iqr.c中定义的。
set_external_irq(k->irq_no, EXT_FALLING_EDGE, GPIO_PULLUP_DIS);
// 请求中断,所有的按键都使用同一个中断处理程序。中断处理程序根据中断号确定按下的是哪一个按键。
if (request_irq(k->irq_no, &key_irq, SA_INTERRUPT, "keyboard_demo", NULL)) {
printk("request irq failed!\n");
return -1;
}
}
return 0;
}
//退出
static void __exit keyboard_exit(void)
{
struct key_info *k;
int i;
//释放中断号
for (i = 0; i < sizeof key_info_tab / sizeof key_info_tab[1]; i++) {
k = key_info_tab + i;
free_irq(k->irq_no, key_irq);
}
}
module_init(keyboard_init);
module_exit(keyboard_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Gene.Shao (sjiang1981@163.com)");
由于按键不具有I/O功能,它只会在按下的时候产生中断,所以这里不需要实现open,read,write,ioctl等功能,这样整个程序也就十分简单。uclinux不支持动态加载内核模块,需要将驱动程序静态编译进内核:
1. 将keyboard_demo.c拷贝到../kernel/drivers/char/目录下。
2. 在../kernel/drivers/char/Makefile中添加:obj-$(CONFIG_KEYBOARD_DEMO) += keyboard_demo.o。
3. 在../kernel/drivers/char/Config.in中添加:dep_tristate 'Support keyboard demo' CONFIG_KEYBOARD_DEMO。
4. 在../kernel目录下make menuconfig, 选择Character devices,会看到'Support keyboard demo'选项,这一项就是我的键盘驱动。
龙芯2k按键中断驱动_外部中断按键驱动相关推荐
- 龙芯2k按键中断驱动_龙芯2k1000的中断设计
龙芯2k1000的中断设计 1.前言 2.龙芯2k1000的中断描述 2.1 mips设计上的通用中断处理 2.2 龙芯中断的设计 3.龙芯2k1000中断的产生与处理 4.龙芯2k1000中断处理概 ...
- 龙芯2k按键中断驱动_龙芯2k1000的中断处理逻辑
龙芯2k1000的中断设计 1.前言 2.龙芯2k1000的中断描述 2.1mips设计上的通用中断处理 2.2龙芯中断的设计 3.龙芯2k1000中断的产生与处理 4.龙芯2k1000中断处理概述 ...
- 龙芯2k开发板Debian系统安装教程
龙芯2k开发板Debian系统安装教程 1 准备安装u盘 1.1 获取u盘设备名 将U盘插入个人debian/ubuntu电脑,使用lsblk获取U盘设备名 我的u盘设备名为sdb(sda为我的主硬盘 ...
- 经验分享|在龙芯2K上运行RT-Thread系统并开源
大家好,今天分享下群友老李在大四上学期做的一个项目.希望对大家有启发. 项目信息 项目名称:龙芯2K上的RT-Thread系统 学生姓名:李志锐 学校:聊城大学 大四在读 方案描述:该项目要求首先实现 ...
- 龙芯2k的X86环境交叉编译
1.下载 龙芯内核交叉编译器(运行在X86_64机器上): http://ftp.loongnix.org/toolchain/gcc/release/gcc-4.4.7-7215-n64-loong ...
- TM4C123GLaunchPad教程三_外部中断
TM4C123GLaunchPad教程三_外部中断 介绍 TM4C的每个IO口都可以分别配置外部中断,每组IO口对应一个中断服务函数,例如PA0-PA7对应同一个中断服务函数,每个IO口可以配置为 ...
- esp32外部中断_玩转 ESP32 + Arduino (四) 电容按键 霍尔传感器 外部中断 延时 脉冲检测...
一. 电容输入 touchRead(pin) 及电容输入中断touchAttachInterrupt(pin, TSR , threshold) ESP32专门提供了电容触摸传感器的功能, 共有T0, ...
- stm32l4 外部中断按键会卡死_【stm32f407】外部中断实现按键中断方式
一.外部中断 STM32F4的每个IO都可以作为外部中断的中断输入口,这点也是STM32F4的强大之处.STM32F407的中断控制器支持22个外部中断/事件请求.每个中断设有状态位,每个中断/事件都 ...
- stm32l4 外部中断按键会卡死_STM32学习之路-按键中断测试(外部中断)
void RCC_Config(void) { SystemInit(); //系统时钟初始化 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); ...
最新文章
- TensorFlow2简单入门-加载及预处理文本
- 判断手机浏览器还是桌面浏览器
- 瑞柏匡丞_移动互联的发展现状与未来
- array_merge用法
- linux 批量进行:解压缩某一类压缩文件类型的文件
- BAT大揭秘:在腾讯、百度、阿里上班,差别竟然这么大?
- TZOJ 数据结构期末历年题目
- 手机电子词典_【摘要】陈玉珍:词典使用对搭配产出与记忆保持的效能研究—— 以手机在线词典为例...
- Java完全自学手册,你要悄悄努力,然后惊艳所有人
- Hive调优全方位指南(推荐收藏)
- 凤凰项目节选内容、记录和重新描述
- IGS Viewer / IGS 文件查看器
- 北京圣思园java视频教程全套_北京圣思园Java8新特性及实战视频教程完整版
- 如何用计算机ip连接打印机共享,ip共享打印机怎么设置
- C4D模型工具—连接点/边
- python基础教程-第1章节 基础知识
- Android:执行exec app_process启动jar失败原因
- 计算机二级请假条,单位员工病假请假条范文模板
- 文字相对于图片垂直居中
- Python-Django毕业设计钓鱼爱好者交流平台(程序+Lw)
热门文章
- hust1342(流量有上下界的最小流)
- POJ 1703 Find them, Catch them(并查集高级应用)
- chrome vue 未响应_VUE数据响应式
- java线程协作_java 线程间的协作
- 20210614 So-called的用法
- Way to configure the logon navigaion layouts via Business Roles in CRM
- 【i.MX6UL/i.MX6ULL开发常见问题】单独编译内核,uboot生成很多文件,具体用哪一个?...
- 关于Qt QFileDevice::map()接口的一些学习记录
- [原创]分布式系统之缓存的微观应用经验谈(三)【数据分片和集群篇】
- css层叠上下文和层叠顺序