【问题标题】:how to know the Interrupt/GPIO number for a specific pin in linux如何知道 Linux 中特定引脚的中断/GPIO 编号
【发布时间】:2012-06-28 02:00:57
【问题描述】:

我正在做一个需要在 Linux 中处理中断的项目。

我使用的主板是ARM9Board,基于三星的 s3c6410 MCU(arm 11 处理器),它具有以下 I/O 接口:

如图所示,我有用于外部中断的 EINTx 引脚和作为 GPIO 引脚的 GPxx 引脚,我不介意使用它们中的任何一个,但我没有它们的编号!

对于 EINTx 引脚:

当我打电话时

int request_irq(unsigned int irq, void (*handler)(int, struct pt_regs *), 
unsigned long flags, const char *device); 

我需要中断号作为函数的第一个参数传递,那么我如何获得中断号,例如 EINT16 引脚?

对于 GPxx 引脚: 与我需要 GPIO 引脚编号将其传递给这些功能的故事相同

int gpio_request(unsigned gpio, const char *label);
int gpio_direction_input(unsigned gpio);
int gpio_to_irq(unsigned gpio);

即我如何知道 GPP8 引脚的 GPIO 编号?

我搜索了董事会文件和数据表,但它不包含有关如何获取这些数字的任何内容,关于在哪里查看的任何想法或帮助?

【问题讨论】:

    标签: linux embedded arm embedded-linux interrupt


    【解决方案1】:

    您使用的嵌入式 Linux 应该有一个 GPIO 驱动程序,其中包含用于 GPIO 引脚的 #define 语句。然后,您可以使用以下方式获取特定 GPIO 的 IRQ 编号:

    irq_num = gpio_to_irq(S3C64XX_GPP(8));

    该特定芯片的 Linux GPIO 库支持可在以下文件中找到:

    linux/arch/arm/mach-s3c6400/include/mach/gpio.h

    您会在此处找到各种 GPIO 的所有 #define 语句。

    请参阅其文档中有关 GPIO 约定的部分:

    http://www.kernel.org/doc/Documentation/gpio/gpio.txt

    【讨论】:

    • 随板提供的内核在 /drivers/gpio 有一个 GPIO 驱动程序,但没有 c 文件有一个用于引脚的#define,我发现 /include/linux/gpio.g 但是它仅包含 gpio_request 和 gpio_to_irq 等函数的声明,但也没有#define
    • 我已经用与该板提供的发行版有关的具体信息更新了我的答案。
    • 哇,非常感谢您,先生.. 我不知道他们将这些信息深埋在内核中的想法是什么,但我认为下次我应该更努力地搜索 :)
    • @embedded.kyle:我怎么知道板子in.mouser.com/new/pandaboardorg/pandaboardES类似S3C64XX_GPP()的函数?
    • @mps 这实际上取决于您使用的是哪个 Linux 发行版,因此您应该参考该发行版的文档。但总的来说,您应该找到gpio.h 文件,它应该会告诉您您需要知道的一切。我还更新了指向gpio.txt 的链接,因为它被破坏了。这也应该对你有用。
    【解决方案2】:

    我也在 GPIO 引脚上做了一些工作,但它在不同的板上,AM335x。只是让你知道,有很多方法可以做到这一点。我们使用的一种方法是使用内存板访问(写入或读取)GPIO 引脚。

    这是一篇非常好的文章,可以帮助我完成工作。 Register access to the GPIOs of the Beaglebone via memory mapping

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      相关资源
      最近更新 更多