作者:Terry Ni,AMD工程師;來源:AMD開發者社區

通常在設計中,用戶常常會使用GPIO來完成一些外設的控制,或者用來作為一些調試端口或者調試信號。那么,在Kernel中簡單快速使用這些GPIO就會大大加快我們的開發周期。

對于不通的器件,我們先要明確的就是其MIO和EMIO的數量。例如:ZynqMP器件有一個GPIO控制器,有78個MIO以及96 個EMIO。Versal器件有兩個GPIO控制器,一個是PMC GPIO,有52個MIO和64個EMIO;另一個是LPD GPIO,有26個MIO和32個EMIO。
了解清楚了MIO以及EMIO數量之后,我們就可以在kernel中對GPIO進行操作了。
?在ZynqMP器件上,我們需要先找到哪個GPIO節點對應GPIO控制器。你可以通過查看其標簽的方式將其找到,如下圖所示。

?從上圖中我們可以發現,對應GPIO控制器的節點是gpiochip334,也就是說從334這個編號開始之后的174(78+96)個IO對應的就是GPIO上所有的MIO和EMIO通道了。
?那么接下來,就可以根據你具體要控制的MIO或者EMIO來創建GPIO節點。例如你需要控制EMIO對應的bit2通道。你可以通過如下方法計算得到其對應的GPIO編號。
?334+78+2=414
?計算出編號之后,通過如下命令方式創建出控制節點。

成功執行之后,就會在系統中創建出gpio414這個控制節點,接下來你需要指定其輸入輸出方向。

最后,你就可以控制其高低電平了。

對于Versal器件來說,使用方法基本相同,先是需要找到pmc gpio和versal gpio(lpd gpio)對應的節點。

然后基于找到的節點,計算出你需要控制的GPIO節點編號,例如pmc mio的bit16通道,計算得到其對應的GPIO編號。
338+16=354?
接著,通過如下命令方式創建出控制節點。

然后指定gpio354這個節點的輸入輸出方向。

最后,控制其電平值。


通過以上的方法,你可以方便的在你的設計中利用GPIO的特性,快速實現或者驗證設計中的一些功能,加快整個開發過程。
