1. 程式人生 > >MTK GPIO配置

MTK GPIO配置

轉載:http://blog.csdn.net/mcgrady_tracy/article/details/40788873

如果需要定製GPIO口呢,需要使用mediatek/dct/DrvGen.exe工具,點選Open,選擇mediatek/custom/project_dir/kernel/dct/dct/codegen.dws檔案,點選Edit,將出現如圖所示的一個視窗:

EintMode: 指示是否當作中斷引腳來使用,例如GPIO0就可以當作ENTI0,如果選中了該模式,其它模式是不可見的。
Def.Mode: GPIO預設的模式,什麼意思呢,就是在系統啟動過程中GPIO口的模式,GPIO口啟動模式是定義在檔案cust_gpio_boot.h檔案中的,例如,GPIO3的啟動模式就是作為普通的GPIO口來使用,即模式為GPIO_MODE_00,稍後會為大家講解cust_gpio_boot.h檔案是怎麼生成的。
M0~M7: 由於GPIO口是複用的,也就說除了作為普通的GPIO口使用之外,還有其它用途,所以這裡會在cust_gpio_usage.h檔案中產生一些巨集定義,可能某些驅動中會用到這些巨集定義。
InPull En: 是指GPIO是否使能上拉或下拉。
InPull SelHigh: 上面只是只是指示是否使能上拉或下拉,但是並沒有指出到底是上拉還是下拉,那麼就由這裡來指定,如果勾選了那麼就表示上拉,否則就是下拉。
Def.Dir: 指示GPIO預設的資料傳輸方向,是輸入還是輸出,都需要設定的。
In、Out: In和Out這兩個選項暫時不知道有何用處,根據字面意思呢,應該是允許輸入或輸出的。
OutHigh: 指示GPIO口作為普通IO時輸出電平高低。
VarName1: 變數的名字,有些驅動中可能會使用到一些GPIO口,那麼這裡就是為GPIO口定義一個別名,那麼在驅動中只需要這個別名就可以了,而這個GPIO口是可以換的,所以這裡也是為了可移植性。

在GPIO口配置完成之後,首先是需要點選Save來儲存這個配置,可以點選Gen Code去生成新的程式碼,新的程式碼就生成在和codegen.dws同一個目錄下,但是在Android 4.4版本上我都不是這樣做的,在儲存以後,直接執行./mk n k也會生成新的程式碼,生成目錄在:
out/target/product/project_dir/obj/CUSTGEN/custom/kernel/dct/,如果是其他版本,可能會不相同。

前面說了在系統啟動過程中會初始化這些GPIO口,那麼什麼地方在做初始化呢,有兩個地方preloader和lk,preloader初始化程式碼流程如下:
mt_gpio_set_default()->mt_gpio_set_default_chip()
而該部分程式碼在mediatek/platform/mt6582/preloader/src/drivers/gpio_init.c中,在該檔案中首先就是包含檔案cust_gpio_boot.h。

而lk部分初始化流程都是差不多的,流程如下:
mt_gpio_set_default()->mt_gpio_set_default_chip()
lk部分程式碼在mediatek/platform/mt6582/lk/mt_gpio_init.c中。