|
本帖最后由 konizhang 于 2010-12-3 08:49 编辑
内核版本 2.6.30.4
驱动名称: kaypad.ko
驱动测试程序: keypad_test
运行kepad_test, 按键后显示:
-------------------------------------------
keyp opened
Eint 0
-------------------------------------------
显示完上两行后就档机。
输出Eint 0, 说明已经进入中断处理程序,代码如下:
根据代码,在输出Eint 0--->disable_irq-->终端输出 0
实际上终端未输出0, 也就是就在disable_irq这里就档机了
请教一下:是不是哪里出现冲突导致的? 还是有其它的问题
(后面附上驱动代码和测试代码)
谢谢~- //中断处理函数
- static irqreturn_t key_eint_handler(int irq, void *dev_id)
- {
- int cnt, key_index;
- key_index = 0;
- for (cnt=0; cnt<KEY_NUM; cnt++)
- {
- if (key_info_tab[cnt].irq_no == irq)
- {
- key_index = key_info_tab[cnt].key_no;
- break;
- }
- }
- printk(KERN_NOTICE "Eint %d\n", key_index);
-
- disable_irq(key_info_tab[key_index].irq_no); //disable irq
- printk(KERN_NOTICE "0\n");
-
- key_dev->keyStatus[key_index] = KEYSTATUS_X; //set key in unsure state
- key_timer[key_index].expires = jiffies + KEY_DELAY_20MS; //set timer value
- add_timer(&key_timer[key_index]); //start timer
-
- return IRQ_HANDLED;
- }
复制代码 按键源码行数太多,传不上,以附件形式加上
按键测试程序- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- int main()
- {
- int fd, ret, key_num;
- fd = open("/dev/key", 0);
- if (fd < 0)
- {
- printf("open error!\n");
- return -1;
- }
- while (1)
- {
- ret = read(fd, &key_num, sizeof(int));
- printf("you press the key %d\n", key_num);
- }
- close(fd);
- return 0;
- }
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|