硬件
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
通過原理圖找你需要配置的硬件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,低電平
![]()
第四個參數:上拉,下拉,關閉上下拉 (上拉: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,則說明不使能中斷功能,即不作為中斷引腳。
|