检测不到中断,无法进入中断处理程序。

sailorlyq 2010-08-17 07:53:42
注册和初始化中断用了两个函数
1)kxtf9_init_irq();
2)ret = request_irq(client->irq, kxtf9_irq_handler, IRQF_TRIGGER_LOW, "kxtf9", client);//IRQF_TRIGGER_HIGH

kxtf9_init_irq如下:
static int kxtf9_init_irq(void)
{
int ret = 0;
ret = gpio_request(KXTF9_IRQ_GPIO, "kxtf9_irq");
if (ret) {
printk("gpio_requset failed, return: %d\n", ret);
goto err_request_gpio;
}

ret = gpio_direction_input(KXTF9_IRQ_GPIO);
if (ret) {
printk("set kxtf9_irq gpio's direction failed, return: %d\n",
ret);
gpio_free(KXTF9_IRQ_GPIO);
}
err_request_gpio:
return ret;
}


ret的返回结果是0,应该是表示成功的;
但无论我将request_irq中的flag设成IRQF_TRIGGER_LOW还是IRQF_TRIGGER_HIGH,中断处理函数kxtf9_irq_handler都没有执行。请大虾指点。
...全文
415 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
paopao1874 2010-08-18
  • 打赏
  • 举报
回复
应该可以使用示波器测量下的吧
sailorlyq 2010-08-18
  • 打赏
  • 举报
回复
打印结果可以看见client->irq=148。
flag我用了IRQF_SHARED|IRQF_TRIGGER_LOW和IRQF_SHARED|IRQF_TRIGGER_HIGH还是不行。
sailorlyq 2010-08-18
  • 打赏
  • 举报
回复
谢谢这位大虾,不过我设置的IRQF_TRIGGER_LOW和IRQF_TRIGGER_HIGH,我想那个管脚不是高电平就是底电平把,所以其中一个应该是可以上来中断的吧?

另外上面的两个宏定义忘记说了
#define GSEN_INT MFP_CFG(GPIO20, AF0)
#define KXTF9_IRQ_GPIO mfp_to_gpio(GSEN_INT)
#define KXTF9_IRQ IRQ_GPIO(KXTF9_IRQ_GPIO)
Wenxy1 2010-08-18
  • 打赏
  • 举报
回复
请确认你的硬件发生中断了吗?
sailorlyq 2010-08-18
  • 打赏
  • 举报
回复
各位大虾还有什么高见呀。我如果给它输入高电平然后,flag设为IRQF_TRIGGER_HIGH,是不是会一直产生中断亚?
lzy0001sl 2010-08-17
  • 打赏
  • 举报
回复
IRQF_SHARED试试
或者你的中断根本就没有被触发

4,465

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧