[嵌入式linux] [求救大神]4412开发板设置外部中断为下降沿触发,但是在...

[复制链接]
 楼主| 大光89 发表于 2017-2-20 14:10 | 显示全部楼层 |阅读模式
[求救大神]4412开发板设置外部中断为下降沿触发,但是在上升沿的时候也触发中断
设置和问题如下:
1. 中断信号经过硬件消斗处理;
1. 调试迅为4412的外部中断时,设置中断为下降沿触发,但是在上升沿的时候也触发了中断,这里上升沿触发中断时,中断脚的电平读出来为 0;
2. 设置的外部中断脚为EXYNOS4_GPX2(0),EXYNOS4_GPX2(1),EXYNOS4_GPX1(2),EXYNOS4_GPX3(0)),EXYNOS4_GPX3(2);
3. 其中引脚EXYNOS4_GPX3(0)设置为下降沿中断时,在上升沿不会像其他引脚一样触发中断;
4. 设置为上升沿触发中断时,在上升沿会触发两次中断,在第一次中断时,读取中断脚的电平为 0,在第二次中断时,读取中断脚的电平为 1 ;
5. 调试过程中没有加载下列make menuconfig 路径中提供的的任何驱动:
Device Drivers  --->                                                              
         Input device support  --->
                           
·     Keyboards  --->  
6. 中断配置代码如下:
  1.     ret = gpio_request(EXYNOS4_GPX3(2), "EINT26");
  2.     if (ret) {
  3.                 printk("%s: request GPIO %d for EINT26 failed, ret = %d\n", DRIVER_NAME,
  4.                 EXYNOS4_GPX3(2), ret);
  5.                 return ret;
  6.              }
  7.     s3c_gpio_cfgpin(EXYNOS4_GPX3(2), S3C_GPIO_SFN(0xF));
  8.     s3c_gpio_setpull(EXYNOS4_GPX3(2), S3C_GPIO_PULL_UP);
  9.     gpio_free(EXYNOS4_GPX3(2));
  10.     ret = gpio_request(EXYNOS4_GPX3(2), "EINT26");
  11.     if (ret) {
  12.                 printk("%s: request GPIO %d for EINT26 failed, ret = %d\n", DRIVER_NAME,
  13.                 EXYNOS4_GPX3(0), ret);
  14.                 return ret;
  15.              }
  16.     s3c_gpio_cfgpin(EXYNOS4_GPX3(0), S3C_GPIO_SFN(0xF));
  17.     s3c_gpio_setpull(EXYNOS4_GPX3(0), S3C_GPIO_PULL_UP);
  18.     gpio_free(EXYNOS4_GPX3(0));
  19.     ret = gpio_request(EXYNOS4_GPX2(1), "EINT17");
  20.     if (ret) {
  21.                 printk("%s: request GPIO %d for EINT17 failed, ret = %d\n", DRIVER_NAME,
  22.                 EXYNOS4_GPX2(1), ret);
  23.                 return ret;
  24.              }
  25.     s3c_gpio_cfgpin(EXYNOS4_GPX2(1), S3C_GPIO_SFN(0xF));
  26.     s3c_gpio_setpull(EXYNOS4_GPX2(1), S3C_GPIO_PULL_UP);
  27.     gpio_free(EXYNOS4_GPX2(1));
  28.     ret = gpio_request(EXYNOS4_GPX1(2), "EINT10");
  29.     if (ret) {
  30.                 printk("%s: request GPIO %d for EINT10 failed, ret = %d\n", DRIVER_NAME,
  31.                 EXYNOS4_GPX1(2), ret);
  32.                 return ret;
  33.              }
  34.     s3c_gpio_cfgpin(EXYNOS4_GPX1(2), S3C_GPIO_SFN(0xF));
  35.     s3c_gpio_setpull(EXYNOS4_GPX1(2), S3C_GPIO_PULL_UP);
  36.     gpio_free(EXYNOS4_GPX1(2));
  37.     ret = request_irq(IRQ_EINT(26), eint26_interrupt,
  38.                         IRQ_TYPE_EDGE_FALLING /*IRQF_TRIGGER_FALLING*/, "eint26", pdev);
  39.     if (ret < 0) {
  40.                     printk("Request IRQ %d failed, %d\n", IRQ_EINT(26), ret);
  41.                     goto exit;
  42.                  }
  43.     ret = request_irq(IRQ_EINT(24), eint24_interrupt,
  44.                         IRQ_TYPE_EDGE_FALLING /*IRQF_TRIGGER_FALLING*/, "eint24", pdev);
  45.     if (ret < 0) {
  46.                     printk("Request IRQ %d failed, %d\n", IRQ_EINT(24), ret);
  47.                     goto exit;
  48.                  }
  49.     ret = request_irq(IRQ_EINT(17), eint17_interrupt,
  50.                         IRQ_TYPE_EDGE_FALLING /*IRQF_TRIGGER_FALLING*/, "eint17", pdev);
  51.     if (ret < 0) {
  52.                     printk("Request IRQ %d failed, %d\n", IRQ_EINT(17), ret);
  53.                     goto exit;
  54.                  }
  55.     ret = request_irq(IRQ_EINT(10), eint10_interrupt,
  56.                         IRQ_TYPE_EDGE_FALLING /*IRQF_TRIGGER_FALLING*/, "eint10", pdev);
  57.     if (ret < 0) {
  58.                     printk("Request IRQ %d failed, %d\n", IRQ_EINT(10), ret);
  59.                     goto exit;
  60.                  }

7. 中断信号波形:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

15

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部