OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 481|回复: 6

[XILINX] linux中断-AXI-GPIO软核引脚的中断号问题

[复制链接]

30

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2020-10-19
在线时间
54 小时
发表于 2024-7-3 17:35:53 | 显示全部楼层 |阅读模式
3金钱
开发板型号:正点原子Zynq最小系统板。根据教程完成了PS KEY的中断例程。现在改为AXIO GPIO软核引出的引脚绑定PL KEY尝试,代码基本上没有什么区别。我的设备树如下:
  1. ///include/ "system-conf.dtsi"

  2. #include <dt-bindings/gpio/gpio.h>
  3. #include <dt-bindings/input/input.h>
  4. #include <dt-bindings/media/xilinx-vip.h>
  5. #include <dt-bindings/phy/phy.h>
  6. #include <dt-bindings/interrupt-controller/irq.h>

  7. / {
  8. chosen {
  9. bootargs = "console=ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootwait";
  10. stdout-path = "serial0:115200n8";
  11. };
  12. key {
  13. compatible = "alientek,key";
  14. status = "okay";
  15. key-gpio = <&axi_gpio_0 0 0 GPIO_ACTIVE_LOW>;
  16. interrupt-parent = <&axi_gpio_0>;
  17. interrupts = <0 IRQ_TYPE_EDGE_FALLING>;
  18. };
  19. };
复制代码
程序中还是用的plkey.irq_num = irq_of_parse_and_map(nd, 0);但是在加载驱动模块时,就显示报错信息跟中断号相关,分配的是49,但是这个49已经被系统给分配了。interrupts-cells是2,应该是GPIO编号和中断标志,所以我写0应该没问题才对呀。
后来获取中断号的函数我换成了gpio_to_irq,然后去掉了interrutps属性。并且在驱动程序中直接指定了中断标志,没再采用[color=var(--code-normal)]irq_get_trigger_type获得。并打印出了GPIO编号和中断号,分别是1023和49,结果又和系统分配的冲突了。请问这是什么原因?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2024-7-3 23:48:19 | 显示全部楼层
回复

使用道具 举报

0

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2024-3-19
在线时间
105 小时
发表于 2024-7-4 09:34:46 | 显示全部楼层
主要问题应该还是中断号分配冲突了,可以正常进去系统的话用命令cat /proc/interrupts查看一下中断号的分配情况
回复

使用道具 举报

30

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2020-10-19
在线时间
54 小时
 楼主| 发表于 2024-7-4 11:16:00 | 显示全部楼层
Alexan 发表于 2024-7-4 09:34
主要问题应该还是中断号分配冲突了,可以正常进去系统的话用命令cat /proc/interrupts查看一下中断号的分配 ...

我查看过,分配的中断号的确是早就被系统占用了。上面的两个函数我也对应修改过设备树中的中断属性,每次自动分配的都是被系统占用的。都是49,哪怕我在驱动程序中指定没被占用的中断号,也是有问题。
回复

使用道具 举报

0

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2024-3-19
在线时间
105 小时
发表于 2024-7-4 11:43:25 | 显示全部楼层
无糖加冰123 发表于 2024-7-4 11:16
我查看过,分配的中断号的确是早就被系统占用了。上面的两个函数我也对应修改过设备树中的中断属性,每次 ...

可以贴一下具体的报错信息
回复

使用道具 举报

30

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2020-10-19
在线时间
54 小时
 楼主| 发表于 2024-7-4 13:55:14 | 显示全部楼层
Alexan 发表于 2024-7-4 11:43
可以贴一下具体的报错信息

完整信息:
root@Test4:/lib/modules/5.4.0-xilinx# depmod
root@Test4:/lib/modules/5.4.0-xilinx# modprobe plkey.ko
plkey: loading out-of-tree module taints kernel.
key: GPIO Number is 1018!
key: GPIO IRQNumber is 54!
key: IRQ flags is 2!
genirq: Setting trigger mode 2 for irq 54 failed (xgpio_set_irq_type+0x0/0x10)
key: request irq result is -22
key: GPIO Number is 1018!
key: GPIO IRQNumber is 54!
key: IRQ flags is 2!
genirq: Setting trigger mode 2 for irq 54 failed (xgpio_set_irq_type+0x0/0x10)
key: request irq result is -22
modprobe: can't load module plkey.ko (plkey.ko): Invalid argument
root@Test4:/lib/modules/5.4.0-xilinx# cat /proc/interrupts
           CPU0       CPU1
16:          0          0     GIC-0  27 Edge      gt
17:       5944       2583     GIC-0  29 Edge      twd
18:          0          0     GIC-0  37 Level     arm-pmu
19:          0          0     GIC-0  38 Level     arm-pmu
20:         43          0     GIC-0  39 Level     f8007100.adc
23:          0          0     GIC-0  35 Level     f800c000.ocmc
24:        202          0     GIC-0  59 Level     xuartps
25:          0          0     GIC-0  51 Level     e000d000.spi
26:      14790          0     GIC-0  54 Level     eth0
27:        499          0     GIC-0  56 Level     mmc0
28:          0          0     GIC-0  45 Level     f8003000.dmac
29:          0          0     GIC-0  46 Level     f8003000.dmac
30:          0          0     GIC-0  47 Level     f8003000.dmac
31:          0          0     GIC-0  48 Level     f8003000.dmac
32:          0          0     GIC-0  49 Level     f8003000.dmac
33:          0          0     GIC-0  72 Level     f8003000.dmac
34:          0          0     GIC-0  73 Level     f8003000.dmac
35:          0          0     GIC-0  74 Level     f8003000.dmac
36:          0          0     GIC-0  75 Level     f8003000.dmac
37:          0          0     GIC-0  40 Level     f8007000.devcfg
39:          0          0     GIC-0  43 Level     ttc_clockevent
45:          0          0     GIC-0  41 Edge      f8005000.watchdog
IPI1:          0          0  Timer broadcast interrupts
IPI2:       2643       4626  Rescheduling interrupts
IPI3:          4          3  Function call interrupts
IPI4:          0          0  CPU stop interrupts
IPI5:          0          0  IRQ work interrupts
IPI6:          0          0  completion interrupts
Err:          0

设备树:
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/media/xilinx-vip.h>
#include <dt-bindings/phy/phy.h>
#include <dt-bindings/interrupt-controller/irq.h>

/ {
        chosen {
                bootargs = "console=ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootwait";
                stdout-path = "serial0:115200n8";
        };
        key {
                    compatible = "alientek,key";
             status = "okay";
             key-gpio = <&axi_gpio_2 4 0 GPIO_ACTIVE_LOW>;
             interrupt-parent = <&axi_gpio_2>;
         interrupts = <4 IRQ_TYPE_EDGE_FALLING>;
        };
};
回复

使用道具 举报

30

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2020-10-19
在线时间
54 小时
 楼主| 发表于 2024-7-4 18:14:27 | 显示全部楼层
Alexan 发表于 2024-7-4 11:43
可以贴一下具体的报错信息

中断号冲突是连带问题,根本原因是中断触发类型,原设备书中我是下降沿。但看了ug585中断的table 7-4,请求类型全部都是上升沿或者高电平。所以修改设备树的中断触发类型,就能够正常注册中断。但是我按了PL KEY,始终没有在终端看到App的打印信息,这部分对应的代码我也没修改过。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 11:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表