中断驱动设计----mini2440 按键驱动设计之路
来源:互联网 发布:spss数据结果分析报告 编辑:程序博客网 时间:2024/06/05 20:37
按键驱动设计设计的知识比较多,包括中断体系,定时器,GPIO配置,多路I/O选择。其源代码在我引用的另一篇博客里附有,这里主要讲在学习过程中遇到的一些问题。这里对中断体系进行一个总结。
1 中断处理体系结构,如下图所示。
extern struct irq_desc irq_desc[NR_IRQS];
先简要说下上图中的一些数据结构体含义,irq_desc结构数组用来描述中断,每个数组项对于一个或一组中断号;irq_chip操作底层硬件,比如设置寄存器屏蔽中断、使能中断、清除中断;irqaction表示用户注册的中断处理。
中断处理流程:
【1】发生中断时,cpu执行异常向量vector_irq的代码
【2】在vector_irq里面,最终会调用中断处理的总入口函数asm_do_IRQ
【3】 asm_do_IRQ根据中断号调用irq_desc数组项中的handle_irq。
【4】handle_irq会使用chip成员中的函数来初始化硬件。
【5】handle_irq逐个调用用户在action链表中注册的处理函数。
中断初始化就是构造这些数据结构,比如irq_desc数组项里的成员handle_irq,chip等成员;
用户注册的中断是就是构造action链表;
用户卸载中断时就是从action链表中去除不需要的项。
2 中断注册函数最后一个参数的作用,即dev_id
for(i = 0; i < KEY_COUNT; i++) { //设置6个IO口为中断触发方式 s3c2410_gpio_cfgpin(button_irqs[i].pin, button_irqs[i].pin_setting); //设置中断下降沿为有效触发 set_irq_type(button_irqs[i].irq, IRQ_TYPE_EDGE_FALLING); //申请中断(类型为快速中断,中断服务时屏蔽所有外部中断?) ret = request_irq(button_irqs[i].irq, buttons_interrupt, IRQF_DISABLED,button_irqs[i].name,(void *)i); if(ret) { break; } //初始化6个按键的状态为抬起 key_status[i]= KEY_UP; //初始化并设置6个去抖定时器 setup_timer(&key_timers[i], buttons_timer, i); }request_irq申请注册中断,其函数原型是
int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char * devname, void *dev_id)
......文字在整理中....
- 中断驱动设计----mini2440 按键驱动设计之路
- mini2440 基于中断的按键驱动
- 基于mini2440外部中断的按键驱动
- 基于platform总线的中断(按键)字符设备驱动设计
- 基于platform总线的中断(按键)字符设备驱动设计
- 基于platform总线的中断(按键)字符设备驱动设计
- 基于platform总线的中断(按键)字符设备驱动设计
- linux驱动之按键中断
- Linux驱动学习之:按键中断驱动
- 字符设备驱动之中断按键驱动
- 关于mini2440触摸屏驱动设计
- mini2440按键驱动分析
- mini2440的按键驱动
- mini2440的按键驱动
- mini2440按键驱动分析
- mini2440 按键驱动
- mini2440按键驱动
- 基于中断的linux按键驱动(mini2440)
- SQL 通配符
- SQL server2005测试是否连接成功的方法
- PL/SQL的定义(二)基本规范
- uva 10763 - Foreign Exchange
- 【我的电脑】突然不显示菜单栏、工具条等,使用注册表文件快速修复方法
- 中断驱动设计----mini2440 按键驱动设计之路
- Spring事务管理----声明式(1)利用TransactionProxyFactoryBean生成事务代理
- 解决linux下无法运行windows下写的脚本
- gold_ 背包DP, memory_KMP
- GPS服务端解析程序编写日记之--vs2010中多种语言开发及调试的若干注意事项
- AI中的漫游行为,简单模拟了下
- Android’s HTTP Clients(Android的HTTP客户端接口)
- linux flash模块分层
- 2012年08月21日