Sysfs GPIO电平触发中断

Sysfs GPIO电平触发中断

问题描述:

我是一个尝试在嵌入式Linux电路板上获得电平触发中断的新手。我使用poll()来等待中断事件。我成功地获得了边缘触发的中断。Sysfs GPIO电平触发中断

如何获得电平触发中断? 我该如何设定边缘?

+0

我不知道我是否正确理解你想要的东西。你想打断升降事件吗? – 2014-11-03 12:40:34

+2

@ MicheleD'Amico:他想要电平触发中断。如果您不知道“级别触发”是什么意思,请使用Google - 它是一个定义明确的编程术语。从本质上讲,如果特定线上的电平低或高(取决于配置),他希望持续获得中断事件。 – datenwolf 2014-11-03 12:52:01

+1

我知道它是什么,但我不确定,因为它不适用于gpio sysfs。如果他想要它,他必须在更高层次上编写它,因为gpio sysfs不会给用户空间这样的东西(恕我直言,也许永远不会给)。 – 2014-11-03 13:08:52

下降或上升转换触发边沿触发中断。虽然轮询是处理这种中断的一个选项,但为了节省CPU周期,创建一个可由内核调度的线程,直到发生中断为止,并在中断发生时将其唤醒。这样,主程序不会在轮询中被锁定。

中断线路处于电平触发中断的高电平或低电平。边缘的概念不适用于电平触发中断。在这里,CPU应该扫描设备以找到触发中断的那个设备。一旦设备被服务,它将继续重新检查可能需要服务的其他设备(中断共享)的中断线状态。如果这不是立即Ack(清除/处理),则由于反复/连续地调用中断处理程序,系统可能进入挂起状态。也就是说,外部设备应该断言IRQ信号,直到通过写入设备寄存器的软件清除待处理的中断。如果许多设备已触发IRQ信号,则高电平或低电平将一直存在,直到所有设备驱动程序已经为其各自的设备提供服务。所以,这应该立即处理。