在我开始之前:是的,我知道答案是build筑依赖的 – 我只是对数字的大小感兴趣。
linux内核对中断频率有一个上限吗?
背景:我想从Linux内部的相机模块接口。 该模块有一个时钟并行数据输出(8位,在〜650kHz),我想从中读取数据并将其存储在缓冲区中,以便通过例如/ dev / camera进行访问。
我写了一个基本的驱动程序,它正在监视适当的中断线。 如果我把一根电线挂在中断引脚上,我会受到白噪声干扰。 但是,如果我连接一个更高的频率信号(555定时器atm〜250kHz),则不会触发中断。 (我已经用/ proc / interrupts证实了这一点)
我的想法是,这可能来自处理器上的GPIO模块无法处理如此高的频率(这可能很愚蠢 – 不是特别高),也可能是内核问题。 人们怎么想?
这样看。 现代CPU每秒执行约10 9条指令。
为了处理一个中断,你需要执行一些100-1000条指令(保存上下文,做I / O,中断处理的信号结束,恢复上下文)。 这给了你最多每秒10 6 – 10 7个中断。
如果你花时间处理中断,那么剩下的系统和程序就没有了。
所以,考虑一下10 5中断/秒(100 KHz)是最大的实际中断率。
电路可能会有其他的限制,我对这方面也不太熟悉。 但内核不太可能明确限制中断速率。 我看不出有什么好的理由,也不认为这件事可以轻易完成。
现在,有一些像DMA这样的东西,可以让你在输入/输出数据的每个字节上都不中断,而是在几千字节甚至几兆字节的缓冲区上。 例如,准备将数据输出到内存缓冲区,并告诉DMA控制器现在可以从缓冲区发送数据。 完成后,它会触发一个中断信号,表示传输完成,您将可以启动另一个中断。 它在另一个转移方向上也是一样的。 当整个缓冲区充满输入数据时,您会得到一个中断。
如果您只能以较低的速率接收中断,我认为您可能面临硬件限制。