實(shí)現(xiàn) GPIO 擴(kuò)展,先弄清楚“復(fù)用”的概念,將調(diào)用這些 GPIO 的驅(qū)動(dòng)去掉配置,重新編
譯,加到自己的驅(qū)動(dòng)中,就可以實(shí)現(xiàn)擴(kuò)展的 GPIO 的輸入和輸出。
另外必須要先看文檔“迅為iTOP-4418開(kāi)發(fā)板和6818開(kāi)發(fā)板-驅(qū)動(dòng)-GPIO 輸入輸出和例程_V1.X”。
1 GPIO 擴(kuò)展的內(nèi)核配置
在底板上,引出的擴(kuò)展口有 J6(camera 口),J38(GPIO/CAN/485),另外如果自己做
底板,假如不使用 WIFI 等模塊,還可以將 WIFI 等模塊的 IO 口擴(kuò)展成 GPIO。
這里只介紹 J6 和 J38 上的方便擴(kuò)展的 IO 口。
如下圖所示,是攝像頭接口。這里帶有“SDA”,“SCL”字樣的兩個(gè)引腳為總線引腳,
不建議更改為 GPIO 接口。其中的紅色字樣比如“MCU_TSI1_D5”為關(guān)鍵詞。
01.jpg (14.8 KB, 下載次數(shù): 46)
下載附件
2018-9-21 15:57 上傳
若想確定該引腳是否可復(fù)用為 GPIO 接口,則在核心板原理圖
“topeet_s5p4418_coreborad_v1_2.pdf”搜索該關(guān)鍵詞,可以得到兩個(gè)結(jié)果。一個(gè)是在板
對(duì)板連接器,另一個(gè)便是在 MCU 上的引腳。如下圖所示
02.jpg (19.14 KB, 下載次數(shù): 56)
下載附件
2018-9-21 15:57 上傳
在 MCU 上用戶(hù)可以看到該引腳對(duì)應(yīng)的其他功能,對(duì)應(yīng)紅框中的位置可以發(fā)現(xiàn),該引腳可
復(fù)用為 GPIO,編號(hào)為 GPIOE1,那么宏定義為(PAD_GPIO_C+13)。其他的引腳所對(duì)應(yīng)編
號(hào)用戶(hù)可根據(jù)此方法來(lái)依次查詢(xún)。
如果這個(gè) GPIO,被其它驅(qū)動(dòng)調(diào)用,需要將驅(qū)動(dòng)去掉配置,如下圖所示,要將攝像頭的驅(qū)
動(dòng)去掉,這樣就可以在這些接口當(dāng)做 GPIO。
Device Drivers --->
Multimedia support --->
Video capture adapters (去掉)
需要將 OV5640 和 TVP5150 同時(shí)去掉,這兩個(gè)攝像頭的驅(qū)動(dòng)都在 Video capture
adapters 下。
03.jpg (33.52 KB, 下載次數(shù): 45)
下載附件
2018-9-21 15:57 上傳
如下圖所示,將 RS485、Relay 驅(qū)動(dòng)去掉,也可以擴(kuò)展一些 GPIO 口。
Device Drivers --->
Character devices --->
04.jpg (29.82 KB, 下載次數(shù): 48)
下載附件
2018-9-21 15:57 上傳
2 GPIO 復(fù)用統(tǒng)計(jì)
作者為了方便大家擴(kuò)展,將網(wǎng)絡(luò)標(biāo)號(hào),管腳號(hào)等統(tǒng)計(jì)出來(lái),方便大家擴(kuò)展。
05.jpg (69.77 KB, 下載次數(shù): 42)
下載附件
2018-9-21 15:57 上傳
有了接口對(duì)應(yīng)的 GPIO 編號(hào),便可以寫(xiě)程序調(diào)用這些 GPIO 了。
3 驅(qū)動(dòng)
用戶(hù)可以根據(jù)自己實(shí)際需求,在“iTOP-4418 和 6818-驅(qū)動(dòng)-GPIO 輸出輸出驅(qū)動(dòng)和
GPIO 擴(kuò)展_V1.X”其中驅(qū)動(dòng)例程基礎(chǔ)上修改。
其中的代碼
#define GPIOIN (PAD_GPIO_B + 18)
如果要替換為操作多個(gè) GPIO,可以定義為數(shù)組,例如:
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 函數(shù)申請(qǐng)和釋放 GPIO;使用
gpio_direction_input/gpio_direction_output 函數(shù)設(shè)置為輸入和輸出模式;
gpio_get_value/gpio_set_value 函數(shù)獲取 GPIO 值和設(shè)置 GPIO 輸出等等,只需要做一個(gè)循
環(huán)即可,例如 gpio_request 函數(shù)申請(qǐng) 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;
}
}
其它操作也是類(lèi)似。
至此,4418 和 6818開(kāi)發(fā)板的 GPIO 擴(kuò)展以及 GPIO 輸入輸出全部介紹完畢。 |