1. 程式人生 > >在4418平臺上如何配置GPIO口的狀態

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

按鍵驅動 out ont 第一個 u-boot 微軟 evel gif http

硬件 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 通過原理圖找你需要配置的硬件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,則說明不使能中斷功能,即不作為中斷引腳。

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