實現 GPIO 擴展,先弄清楚「複用」的概念,將調用這些 GPIO 的驅動去掉配置,從新編
譯,加到本身的驅動中,就能夠實現擴展的 GPIO 的輸入和輸出。
另外必需要先看文檔「迅爲iTOP-4418開發板和6818開發板-驅動-GPIO 輸入輸出和例程_V1.X」。
1 GPIO 擴展的內核配置
在底板上,引出的擴展口有 J6(camera 口),J38(GPIO/CAN/485),另外若是本身作
底板,假如不使用 WIFI 等模塊,還能夠將 WIFI 等模塊的 IO 口擴展成 GPIO。
這裏只介紹 J6 和 J38 上的方便擴展的 IO 口。
以下圖所示,是攝像頭接口。這裏帶有「SDA」,「SCL」字樣的兩個引腳爲總線引腳,
不建議更改成 GPIO 接口。其中的紅色字樣好比「MCU_TSI1_D5」爲關鍵詞。ios
若想肯定該引腳是否可複用爲 GPIO 接口,則在覈心板原理圖
「topeet_s5p4418_coreborad_v1_2.pdf」搜索該關鍵詞,能夠獲得兩個結果。一個是在板
對板鏈接器,另外一個即是在 MCU 上的引腳。以下圖所示數組
在 MCU 上用戶能夠看到該引腳對應的其餘功能,對應紅框中的位置能夠發現,該引腳可
複用爲 GPIO,編號爲 GPIOE1,那麼宏定義爲(PAD_GPIO_C+13)。其餘的引腳所對應編
號用戶可根據此方法來依次查詢。
若是這個 GPIO,被其它驅動調用,須要將驅動去掉配置,以下圖所示,要將攝像頭的驅
動去掉,這樣就能夠在這些接口當作 GPIO。
Device Drivers --->
Multimedia support --->
Video capture adapters (去掉)
須要將 OV5640 和 TVP5150 同時去掉,這兩個攝像頭的驅動都在 Video capture
adapters 下。網絡
以下圖所示,將 RS48五、Relay 驅動去掉,也能夠擴展一些 GPIO 口。
Device Drivers --->
Character devices --->ide
2 GPIO 複用統計
做者爲了方便你們擴展,將網絡標號,管腳號等統計出來,方便你們擴展。函數
有了接口對應的 GPIO 編號,即可以寫程序調用這些 GPIO 了。
3 驅動
用戶能夠根據本身實際需求,在「iTOP-4418 和 6818-驅動-GPIO 輸出輸出驅動和
GPIO 擴展_V1.X」其中驅動例程基礎上修改。
其中的代碼
#define GPIOIN (PAD_GPIO_B + 18)
若是要替換爲操做多個 GPIO,能夠定義爲數組,例如:
static int gpiostest[]={
PAD_GPIO_C+13,PAD_GPIO_C+5,PAD_GPIO_C+4,PAD_GPIO_E+1,PAD_GPIO_E+3,
PAD_GPIO_E+2,PAD_GPIO_E+0,PAD_GPIO_D+31,PAD_GPIO_D+30,PAD_GPIO_D+29,PAD_GPIO_E+4,PA
D_GPIO_D+28,PAD_GPIO_E+6,PAD_GPIO_E+5,PAD_GPIO_B+16,
PAD_GPIO_C+10,PAD_GPIO_C+11,PAD_GPIO_C+12,PAD_GPIO_C+9,
};
在使用 gpio_request/free 函數申請和釋放 GPIO;使用
gpio_direction_input/gpio_direction_output 函數設置爲輸入和輸出模式;
gpio_get_value/gpio_set_value 函數獲取 GPIO 值和設置 GPIO 輸出等等,只須要作一個循
環便可,例如 gpio_request 函數申請 GPIO 代碼以下:
for(i=0 ; i<NUMBER ; i++){
ret = gpio_request(gpiostest[i], "gpiotest");
if (ret) {
printk("request GPIO %d for gpio failed\n", gpiostest[i]);
return ret;
}
}
其它操做也是相似。
至此,4418 和 6818開發板的 GPIO 擴展以及 GPIO 輸入輸出所有介紹完畢。blog