2014-11-03 84 views
1

我是一個嘗試在嵌入式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

回答

1

下降或上升轉換觸發邊沿觸發中斷。雖然輪詢是處理這種中斷的一個選項,但爲了節省CPU週期,創建一個可由內核調度的線程,直到發生中斷爲止,並在中斷髮生時將其喚醒。這樣,主程序不會在輪詢中被鎖定。

中斷線路處於電平觸發中斷的高電平或低電平。邊緣的概念不適用於電平觸發中斷。在這裏,CPU應該掃描設備以找到觸發中斷的那個設備。一旦設備被服務,它將繼續重新檢查可能需要服務的其他設備(中斷共享)的中斷線狀態。如果這不是立即Ack(清除/處理),則由於反覆/連續地調用中斷處理程序,系統可能進入掛起狀態。也就是說,外部設備應該斷言IRQ信號,直到通過寫入設備寄存器的軟件清除待處理的中斷。如果許多設備已觸發IRQ信號,則高電平或低電平將一直存在,直到所有設備驅動程序已經爲其各自的設備提供服務。所以,這應該立即處理。