0

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

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

提前致谢。

4

1 回答 1

0

我很高兴分享这个。

因为我只在具有 PowerPC、MIPS 内核的嵌入式设备上工作,所以我不会谈论 x86,抱歉。

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

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

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

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

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

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

所以,在系统的bootstrapping或者初始化的时候,一般每个模块都会有一段代码,主要是device模块,负责irq的初始化,比如调用request_irq()。

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

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

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

于 2012-08-01T10:19:55.977 回答