在4418平台上如何配置GPIO口的狀態


硬件
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
通過原理圖找你需要配置的硬件IO口的管腳
 4418 6818 內核中,所有 GPIO 引腳被分為 ABCDE 等幾組,每組 32 個。
每組引腳起始地址定義如下圖:

硬件引腳都對應分配在這幾組引腳中:
例如:
GPIOB29  對應 PAD_GPIO_B + 29
硬件上的命名: GPIOB29
軟件上的命名: PAD_GPIO_B + 29
GPIOC10  對應 PAD_GPIO_C + 10
硬件上的命名: GPIOC10
軟件上的命名: PAD_GPIO_C + 10  
 
軟件
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GPIO配置文件
u-boot\boart\s5p4418\drone\include\Cfg_gpio.h
kernel\arch\arm\plat-s5p4418\drone\include\Cfg_gpio.h
 
u-boot與kernel中
例如:
#define PAD_GPIOAO    (PAD_MODE_OUT | PAD_FUNC_ALT0 | PAD_LEVEL_HIGH | PAD_PULL_OFF | PAD_STRENGTH_0)           
第一個參數:輸出,輸入              (輸入為:PAD_MODE_IN, 輸出為:PAD_MODE_OUT)
第二個參數:功能選擇
        ——————————————————————————————————————         
        | 注:                                                                                                                                  |
        |  // 0: GPIO          1: VIP1_VD[4]           ,2: MPEGTSI_TDATA1[0]   ,3:_                    =        |
        |  這里的GPIO對應的是0,那么第二個參數就是 PAD_FUNC_ALT0                                       |
        |----------------------------------------------------------------------------------------------|
        |    // 0: MCUS_SD[15]   ,1: GPIO       ,2: MPEGTSI0_TDATA[7]   ,3: UART5_TXD       =      |
        |  若GPIO對應的是1,那么第二個參數就是PAD_FUNC_ALT1                                               |
        ——————————————————————————————————————
第三個參數:高低電平            (高電平:PAD_LEVEL_HIGH,低電平 AD_LEVEL_LOW)               
第四個參數:上拉,下拉,關閉上下拉   (上拉:PAD_PULL_UP, 下拉:PAD_PULL_DN,  關閉上下拉:PAD_PULL_OFF)
第五個參數:驅動能力
 
注:
最好不要在cfg_gpio.h文件中配置GPIO,因為有些GPIO會有復用功能,可能會影響其他的功能,最好用GPIO有關的函數來實現
 
GPIO有關的函數
GPIO 輸出功能設置
如果要對 GPIO 配置為輸出功能,輸出高或輸出低,就是拉高拉低的意思。
我們可以用 int gpio_direction_output(unsigned gpio, int value)
從函數的參數來看
unsigned gpio:這個單個 GPIO 的值 ;
int value:這個是要設置的值( 0 代表低電平, 1 代表高電平)
比如我要對 LCD 供電的 GPIO 拉高,那么軟件上這樣寫
gpio_direction_output(PAD_GPIO_C + 10, 1);
如果要拉低:
gpio_direction_output(PAD_GPIO_C + 10, 0);
我們在 LCD 驅動、觸摸屏驅動、按鍵驅動等都有對 GPIO 設置,請參考源碼對應的修改進行理解。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GPIO 輸入功能設置
如果我們想了解一個外部的電平的高低情況,那么我們可以通過 GPIO 連接該路電平,接着把 GPIO 設成輸入功能即可。
軟件上用一個函數即可讓 GPIO 變成輸入功能
int gpio_direction_input(unsigned gpio)
從這上面我們只看到一個參數,就是對應 GPIO 的值
比如我要讓 GPIOC10 改成輸入功能
gpio_direction_input( PAD_GPIO_C + 10);
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GPIO 電平讀取
當我們需要讀取當前 GPIO 的值(輸出、輸入、復用功能都可以讀取),我們也可以通過函
數去讀取
static inline int gpio_get_value(unsigned gpio)
參數 GPIO 代表需要讀取 GPIO 對應的值
比如我要讀 GPIOC10 的值
gpio_get_value(PAD_GPIO_C + 10)  
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GPIO 中斷功能設置
當我們需要引腳中斷功能的時候,那么我們就需要實現 GPIO 的中斷功能。
參數:
void nxp_soc_gpio_set_int_enable(unsigned int io, int on)
unsigned io :代表單個 GPIO 引腳
int on:置為 1,則代表使能中斷功能,置為 0,則說明不使能中斷功能,即不作為中斷引腳。   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM