iT邦幫忙

0

Raspberry Pi 按鈕偵測的中斷(interrupt)相關新手問題

因對硬體較為不熟悉
查了相關資料看到在Raspberry Pi用Python去做按鈕偵測大多是用RPi.GPIO 套件的add_event_detect來做

這邊有幾個問題想請教:

  1. 軟體中斷和硬體中斷我看得有點混亂, 目前的理解是: 軟體中斷是透過程式去不斷去查看GPIO變化(輪詢); 硬體中斷是外部裝置主動發出中斷訊號給CPU, 所以是CPU部分也有寫好類似軟體中斷的功能?

  2. 用add_event_detect來偵測GPIO腳位的電位變化, 這個應該是算軟體中斷對吧?

  3. 那Raspberry Pi是否可以做硬體中斷呢?

  4. add_event_detect他是多久去偵測一次該GPIO腳位呢? 我試著想更改但找不到可設定參數的地方

如果有理解錯誤還請指正
謝謝

froce iT邦大師 1 級 ‧ 2021-10-08 11:51:21 檢舉
1. 樹梅派應該沒有直接的硬體中斷
2. add_event_detect是你按下按鈕的時候進行,是實時通知你按下按鈕,如果你要間隔一段時間才觸發第二次,可以用個timer一起判斷
picross iT邦新手 5 級 ‧ 2021-10-08 13:09:14 檢舉
先謝謝回答. 這個所謂的"實時通知"的原理到底是怎麼做到的呢, 若他沒有硬體中斷是不是也是用輪詢之類方式去判斷改變再通知, 那是不是就會有個多久去做一次輪詢, 這篇就是想知道預設的間隔時間到底是多少
froce iT邦大師 1 級 ‧ 2021-10-08 13:48:51 檢舉
這部分可能跟核心有關,問熟悉嵌入式系統的應該會比較清楚。我下面說的只是我看source code的推測。
kernel會有一部分資源是在監測GPIO電壓變化的,但這輪詢時間一定很短,而且是不斷的跑while迴圈得來的。
https://sourceforge.net/p/raspberry-gpio-python/code/ci/default/tree/source/event_gpio.c#l255

除非你要修改source code並重新編譯,要不然應該是沒有修改這個輪詢的機會,在python加個timer一起判斷會比較簡單。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
EN
iT邦好手 1 級 ‧ 2021-10-08 15:28:26

樹梅派一定是有硬體中斷的,不然沒辦法處理外部訊號。
1. 硬體中斷是外部裝置主動發出中斷訊號給 CPU,所以是 CPU 部分也有寫好類似軟體中斷的功能?
系統程式會設定好中斷向量表,等到中斷發生時再去查表並 Dispatch 給相對應的 Handler。

2. 我沒在玩樹梅派,但我認為這是硬體中斷而非軟體中斷,我猜想的流程大概是這樣:

  • 系統端
GPIO 腳位接收狀態 -> 系統處理外部中斷 -> Handler 更新特定的 flag
  • add_event_detect
軟體不斷檢測特定 flag。

3. 那 Raspberry Pi 是否可以做硬體中斷呢?
一定可以,不然那些裝著 Linux 的樹梅派該怎麼接收鍵盤訊號/讀寫記憶卡呢

4. add_event_detect 他是多久去偵測一次該 GPIO 腳位呢? 我試著想更改但找不到可設定參數的地方

我不知道,留給其他人解答

froce iT邦大師 1 級 ‧ 2021-10-08 15:37:06 檢舉

喔喔,感謝改正。
4的話目前看GPIO的code是沒地方設定的,就一個while不斷去看GPIO的狀態而已。

EN iT邦好手 1 級 ‧ 2021-10-08 22:27:04 檢舉

froce
沒事沒事,大家一起討論 XD

我要發表回答

立即登入回答