gpio介面是用於和硬體進行資料互動;gpio是「General Purpose I/O Ports」的簡寫,是通用輸入輸出埠的意思,其接腳可以供使用者由程控自由使用,可以透過介面輸出高低電平或讀取引腳的狀態是高電平還是低電平。
本教學操作環境:windows10系統、DELL G3電腦。
GPIO,通用型之輸入輸出的簡稱,功能類似8051的P0-P3,其接腳可以供使用者由程控自由使用,PIN腳依現實考量可作為通用輸入(GPI)或通用輸出(GPO)或通用輸入與輸出(GPIO),如當clk generator, chip select等
GPIO(General Purpose I/O Ports)意思為通用輸入/輸出端口,通俗地說,就是一些引腳,可以通過它們輸出高低電平或通過它們讀入引腳的狀態-是高電平或是低電平。
GPIO口一是個比較重要的概念,使用者可以透過GPIO口和硬體進行資料互動(如UART),控制硬體工作(如LED、蜂鳴器等),讀取硬體的工作狀態訊號(如中斷訊號)等。 GPIO口的使用非常廣泛。
gpio介面怎麼用
要使用GPIO,系統首先要指派一個GPIO,使用gpio_request() 為系統指派一個GPIO。
接下來要做的一件事是標示GPIO的方向,通常在使用GPIO建立一個platform_device時(位於單板的setup程式碼中):
/* set as input or output, returning 0 or negative errno */ int gpio_direction_input(unsigned gpio); int gpio_direction_output(unsigned gpio, int value);
傳回0標示成功,或者是一個負的errno錯誤碼。它應該被檢查,因為get/set呼叫沒有錯誤返回,並且可能會有錯誤配置。你通常應該在線程上下文中使用這些呼叫。雖然如此,對於spinlock-safe的GPIO,在tasking使能之前使用也是可以的,作為一個早期的單板建立。
對於輸出GPIO,value參數提供了初始輸出值。這有助於避免系統啟動過程中的訊號幹擾。
為了與GPIO早期的介面相容,設定一個GPIO的方向,隱性要求申請GPIO。這個相容性從可選的gpiolib架構中移除了。
如果GPIO號碼無效或是指定的GPIO不能使用對應模式操作的話,設定方向會失敗。依賴boot韌體來設定好GPIO的方向通常不是個好主意,因為boot的功能可能沒有通過驗證(除了boot linux)。 (類似的,單板setup程式碼可能需要將腳位復用為一個GPIO,和配置為合適的上拉/下拉。)
Spinlock-Safe GPIO存取
# 大多數GPIO控制器可以使用記憶體讀寫指令存取。它們不需要休眠,並且可以從內部硬體中斷處理(非執行緒)和類似的上下文環境安全完成。
使用下列呼叫存取這些GPIO,此時gpio_cansleep將總是傳回錯誤
/* GPIO INPUT: return zero or nonzero */ int gpio_get_value(unsigned gpio); /* GPIO OUTPUT */ void gpio_set_value(unsigned gpio, int value);
其中,value是一個布林型參數,零表示低,非零表示高。當讀取一個輸出管腳的值時,傳回的值應該是在腳位上看到的值。 。 。這並不總是與指定輸出值相符的,因為存在開漏訊號和輸出延遲問題。
get/set呼叫沒有錯誤傳回,因為「無效GPIO」應該已經由gpio_direction_*()提早報告了。雖然如此,並非所有的平台都可以讀取輸出腳的值,那些不能讀的應該總是回傳零。同時,對那些可能導致睡眠的GPIO使用這些介面是一個錯誤。
平台的特定實作被鼓勵優化這兩個呼叫以獲取GPIO值。在那些GPIO號碼是常數的情況下,它們通常只需一對指令(讀或寫一個硬體暫存器)來訪問,且不需要spinlock。這樣的最佳化可以使位元拆分應用更有效率(在時間和空間上)(相比較於花費一堆指令在子例程呼叫來說)。
gpio介面是做什麼的
#輸出值可寫(高=1,低=0 )。一些晶片也可以選擇驅動這些值的方式,以便支援“線-或”或類似方案(開漏訊號線)。
輸入值可讀(1,0)。一些晶片支援輸出管腳回讀,這在線上或的情況下非常有用(以支援雙向訊號線)。 GPIO控制器可能具有一個輸入防故障/防反跳邏輯,有時還會有軟體控制。
輸入經常被用作中斷訊號,通常是邊緣觸發,但也有可能是電平觸發。這些中斷可以配置為系統喚醒事件,從而將系統從低功耗模式喚醒。
一個GPIO經常被配置為輸入/輸出雙向,根據不同的產品單板需求,但也存在單向的情況。
大多是GPIO可以在獲取到spinlock自旋鎖時訪問,但那些透過串行匯流排訪問的通常不能如此操作(休眠的原因)。在某些系統中會同時存在這兩種形式的GPIO。
在一個給定單板上,每個GPIO用於一個特定的目的,如監控MMC/SD卡的插入/移除,檢查卡寫保護狀態,驅動LED,配置發送器,串行總線位拆,觸發一個硬體看門狗,觸發一個開關之類的。
更多相關知識,請造訪常見問題欄位!
以上是gpio接口是做什麼的的詳細內容。更多資訊請關注PHP中文網其他相關文章!