【问题标题】:how IORESOURCE_IRQ(address) work in soc chip?IORESOURCE_IRQ(address) 如何在 soc 芯片中工作?
【发布时间】:2012-07-30 00:54:51
【问题描述】:

我们可以读取ic spec中的寄存器映射,我们可以发现有一些中断地址。 而我们注册片上控制器的中断,比如usb控制器……等等,我们使用资源类型来注册中断处理程序。如果我们查看proc/interrupts中的信息,我们可以看到中断类型是GIC(通用中断控制器)。

中断是如何工作的?这像GPIO中断吗?为什么地址可以代表中断信号?这是否意味着系统将 gpio/地址映射到中断号? 我想知道这方面的细节。

提前致谢。

【问题讨论】:

    标签: linux embedded embedded-linux


    【解决方案1】:

    我很高兴分享这个。

    因为我只在PowerPC,MIPS内核的嵌入式设备上工作,所以我不会谈论x86,对不起。

    中断信号一般由模块控制器触发,比如SD控制器、UART控制器、SPI控制器等。

    如您所知,该信号表明该设备上发生了一个事件,它需要 CPU 的关注。

    芯片上一般有一个中断处理模块,各种控制器的中断信号都会发送到该模块。

    通常,中断处理模块有多个信号引脚,但通常情况下,该模块只有一个引脚连接到 CPU 内核。

    如果中断信号引脚只被一个设备使用,或者说,一个控制器,我们可以说中断是不共享的。 我们提到共享中断的原因是它的处理流程与非共享中断不同。

    即使存在一个中断,并且已经发送到内核,如果没有愿意为它服务的软件,它也不会被处理。

    所以,在系统自举或初始化的过程中,一般来说,每个模块中都会有一段代码,主要是设备模块,负责irq的初始化,比如调用request_irq()。

    request_irq()的作用就是把softare附加到某个中断信号上,这样就建立了硬件中断信号和软件ISR的关系。

    通过调用request_irq(),系统被告知有人要处理该事件,如果该事件发生,系统将通过调用传递给request_irq()的函数通知该人带有中断号。

    顺便说一句,当你说“有一些地址可以中断”时,我不是很清楚。 能否提供更多细节?

    【讨论】:

    • .name = "hdmi_irq", .start = HDMI_IRQ, .end = HDMI_IRQ, .flags = IORESOURCE_IRQ,在linnux中定义的HDMI_IRQ,它在spec中定义的可能是一些地址,比如0xcc0000。 ..
    • 您的回复很有用,谢谢!关于中断地址,我想我误解了代码和规范。请忽略它。:)
    • 如果您愿意,请提供一些有关规范内容的详细信息。我对此非常好奇。因为我只是 Linux 世界的新手,所以如果我的帖子中有错误,请纠正我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 2022-12-13
    • 1970-01-01
    相关资源
    最近更新 更多