am335x嵌入式開發-GPIO操作
阿新 • • 發佈:2019-01-24
GPIO操作是嵌入式開發中最常見的操作,本文將從硬體、驅動層、應用層去剖析am335x soc 的GPIO操作。
官方文件
ti官方關於gpio的支援,點選以下連結進入
應用層使用
GPIO編號
GPIO的所有操作都是基於編號的,可以說編號是一個GPIO的ID,TI AM335x系列處理器GPIO的編號規則如下:
pin_num=bank_num∗32+pin_bank_num
pin_num=GPIO編號
bank_num=GPIO塊編號
pin_bank_num=GPIO在GPIO塊中的子編號 AM335x系列SOC有4個bank,每個bank有32個GPIO,一共支援
32 個GPIO,GPIO的bank表示方法為: bank0[0:31] bank1[0:31] bank2[0:31] bank3[0:31]。例如晶片上有一個pin為gpio2_3,
則這個pin的GPIO編號為:number=2∗32+3=67
GPIO操作例項
- 將GPIO對映到sysfs檔案系統:
# echo 67 > /sys/class/gpio/export
- 設定GPIO模式(設定為IO口模式):
# echo "7" > /sys/class/gpio/gpio67/mode
- 設定GPIO方向(輸入或輸出):
# echo "out" > /sys/ class/gpio/gpio67/direction
or
# echo "in" > /sys/class/gpio/gpio67/direction
操作GPIO
設定GPIO電平
# echo 0 > /sys/class/gpio/gpio67/value // set gpio value to low # echo 1 > /sys/class/gpio/gpio67/value // set gpio value to high
讀GPIO當前電平
# cat /sys/class/gpio/gpio67/value // read gpio value
# 1
- 解除GPIO對映
# echo 67 /sys/class/gpio/unexport
核心配置
要使能linux下的GPIO功能,需要對核心進行配置,筆者使用的sdk是 sdk-am335x-evm-05.06.00.00 的官方釋出包,主機系統為ubuntu-14.04。假設sdk的配置已經做過。
- 進入核心配置
# make CROSS_COMPILE=arm-arago-linux-gnueabi- ARCH=arm menuconfig
在執行過程中報錯,顯示很多呼叫找不到,這是因為ubuntu缺少一些庫的支援,解決辦法如下:
# sudo apt-get install libncurses5 libncurses5-dev
- 使能核心的GPIO功能
- 退出儲存並重新編譯核心
驅動使用GPIO
驅動路徑
am335x gpio驅動包含兩個檔案:
原始碼檔案 說明 drivers/gpio/omap-gpio.c 處理器 gpio驅動 drivers/gpio/omap-gpiolib.c sysfs gpio驅動 、
如何在kernel中使用GPIO
API 例項 說明 gpio_request() err = gpio_request(67, “sample_name”);
申請GPIO資源 gpio_free() err = gpio_free(67);
釋放GPIO資源 gpio_direction_input() err = gpio_direction_input(67);
將GPIO設為輸出 gpio_direction_output() err = gpio_direction_output(67,1);
將GPIO設為輸出並初始化高 gpio_get_value() val = gpio_get_value();
讀取GPIO的當前電平 ‘
如何在kernel中使用GPIO中斷
API 例項 說明 gpio_to_irq() irq_num = gpio_to_irq(67);
獲取GPIO中斷號 request_irq() request_irq(irq_num, handler, 0, “gpio_test”, NULL);
申請中斷 set_irq_type() set_irq_type(irq_num, IRQ_TYPE_EDGE_RISING);
設定中斷型別 free_irq() free_irq(irq_num, NULL);
釋放中斷 ’
注意:在使用gpio中斷前要先申請對應的GPIO資源,在釋放中斷後要釋放GPIO資源