Linux (arm) 中的 GPIO 引脚中断处理程序

发布于 2024-10-06 07:18:43 字数 179 浏览 4 评论 0原文

有人能给我一些在 Linux 中为 ARM9 启用和处理用户引脚 IO 中断(C 语言)的示例代码吗?

我知道可能需要一个低级驱动程序,我只是想了解如何初始化它,然后在用户级别处理消息等的一些想法。

我熟悉 ARM 中断和设备驱动程序(在 Windows 中),但是我是linux编程新手。

谢谢

Can somebody point me at some sample code for enabling and handling user pin IO interrupts (C language) for an ARM9 in linux?

I am aware that a low level driver may be needed, I just want to get some ideas on how to initialise it, then handle the messaging at the user level etc.

I am familiar with ARM interrupts, and device drivers (in Windows) but I am new to linux programming.

thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

热风软妹 2024-10-13 07:18:43

这实际上取决于您使用的实际 BSP。 AFAIK Linux 中没有“通用 ARM9 gpio 中断”,它几乎是特定于主板的。例如,这是 PCA100 板的示例:

static int pca100_sdhc2_init(struct device *dev, irq_handler_t detect_irq,
                void *data)
{
        int ret;

        ret = request_irq(IRQ_GPIOC(29), detect_irq,
                          IRQF_DISABLED | IRQF_TRIGGER_FALLING,
                          "imx-mmc-detect", data);
        if (ret)
                printk(KERN_ERR
                        "pca100: Failed to reuest irq for sd/mmc detection\n");

        return ret;
}

static void pca100_sdhc2_exit(struct device *dev, void *data)
{
        free_irq(IRQ_GPIOC(29), data);
}

It really depends on the actual BSP you're using. AFAIK there's no "generic ARM9 gpio interrupt" in Linux, it's pretty much board-specific. E.g. here's an example for a PCA100 board:

static int pca100_sdhc2_init(struct device *dev, irq_handler_t detect_irq,
                void *data)
{
        int ret;

        ret = request_irq(IRQ_GPIOC(29), detect_irq,
                          IRQF_DISABLED | IRQF_TRIGGER_FALLING,
                          "imx-mmc-detect", data);
        if (ret)
                printk(KERN_ERR
                        "pca100: Failed to reuest irq for sd/mmc detection\n");

        return ret;
}

static void pca100_sdhc2_exit(struct device *dev, void *data)
{
        free_irq(IRQ_GPIOC(29), data);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文