中断驱动设计----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)
......文字在整理中....

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 b2驾照累计12分怎么办 c1本扣满12分怎么办 太原公共自行车丢了怎么办 在太原出租车丢了东西怎么办 太原社保卡丢了怎么办 太原铁路医保卡丢了怎么办 学车体检视力不合格怎么办 换驾照色弱被拒怎么办 在上海考驾照贵怎么办 驾驶证有效期过了半年怎么办 资格证脱审2年了怎么办 换驾驶证时眼睛近视了怎么办 违章累计扣12分怎么办 一个违章扣12分怎么办 a1驾照扣3分怎么办 a1驾照扣12分怎么办 吃了毓婷哺乳了怎么办 吃了毓婷后出血怎么办 吃金毓婷喝了水怎么办 白带浓稠浆糊样怎么办 驾校学费不给退怎么办 b1驾证扣了9分怎么办 机动车登记证丢了怎么办 b1驾照扣了9分怎么办 听力正常体检不过关怎么办 做完人流第二天同房了怎么办 医院的票据丢了怎么办 体检人体成分(脂肪缺乏)该怎么办 诊断出右下叶肺炎怎么办 做胸透穿钢圈内衣怎么办 预约不上留学体检怎么办 跨省离职后社保怎么办 开车到成都限号怎么办 月经量多怎么办吃什么 报驾校体检视力不达标怎么办 换驾驶证c1一只眼不合格怎么办 考驾照紧张腿抖怎么办 驾照该换了色弱怎么办 怀孕5个月感冒咳嗽怎么办 怀孕4个月喉咙痛怎么办 怀孕5个多月总是咳嗽尿失禁怎么办