MPSoC 為PL提供了96個GPIO,通過EMIO管腳鏈接到PL。
普通PL設計,一般只會用到幾個GPIO管腳??梢允褂肰ivado IPI中的Slice IP, 從其中分出指定數(shù)量的管腳。
Slice配置界面
上圖中,輸入寬度是95,因為pl_reset占用率一個管腳。slice從輸入中提取emio的[7:5]三位,作為輸出。
Xilinx Linux 中缺省使能了GPIO驅動。對于MPSoC,檢查目錄/sys/class/gpio,可以看到設備gpiochip338。
# ls -l /sys/class/gpio total 0 export gpiochip306 -> ../../devices/platform/amba/ff020000.i2c/i2c-0/0-0021/gpio/gpiochip306 gpiochip322 ->../../devices/platform/amba/ff020000.i2c/i2c-0/0-0020/gpio/gpiochip322 gpiochip338 -> ../../devices/platform/amba/ff0a0000.gpio/gpio/gpiochip338 unexport # ls /sys/class/gpio/gpiochip338/ -l total 0 base device -> ../../../ff0a0000.gpio label ngpio power subsystem -> ../../../../../../class/gpio uevent
Linux GPIO Driver下的GPIO使用,可以參考Linux GPIO Driver;GPIO User Space App。
從上述文章可以看到,使用GPIO不簡單。
為了簡化使用GPIO,編寫了以下腳本。使用下列腳本,一條命令就能設置一個GPIO的輸出值。腳本接受兩個輸入參數(shù)。第一個參數(shù)表示GPIO編號,MIO GPIO從0開始,EMIO GPIO從78開始。第二個參數(shù)是輸出值。如果輸出值是1,可以省略第二個參數(shù)。
#/bin/bash function gpio_output_func() { #echo "No.1 parameter: $1" #echo "No.2 parameter: $2" # MPSoC GPIO number. gpio_num=$[338+$1] # MPSoC EMIO GPIO number. # gpio_num=$[338+78+$1] echo "Set GPIO number: $gpio_num to value: $2" if [ ! -f /sys/class/gpio/gpio$gpio_num/direction ]; then # Export a GPIO pin echo $gpio_num > /sys/class/gpio/export fi # Read the direction and value from the GPIO pin */ # ls -l /sys/class/gpio/gpio$gpio_num/ gpio_direction=`cat /sys/class/gpio/gpio$gpio_num/direction` gpio_value=`cat /sys/class/gpio/gpio$gpio_num/value` echo -e "GPIO number: $gpio_num previous direction: $gpio_direction, previous value: $gpio_value" # Set the direction to an output and write a value 1 to GPIO pin */ echo out > /sys/class/gpio/gpio$gpio_num/direction echo $2 > /sys/class/gpio/gpio$gpio_num/value gpio_direction=`cat /sys/class/gpio/gpio$gpio_num/direction` gpio_value=`cat /sys/class/gpio/gpio$gpio_num/value` echo -e "GPIO number: $gpio_num current direction: $gpio_direction, current value: $gpio_value" } # Check GPIO chip gpio_chip=`cat /sys/class/gpio/gpiochip338/label` gpio_base=`cat /sys/class/gpio/gpiochip338/base` gpio_number=`cat /sys/class/gpio/gpiochip338/ngpio` echo "MPSoC GPIO information: chip: $gpio_chip, base: $gpio_base, number: $gpio_number." # cat /sys/class/gpio/gpiochip338/label # cat /sys/class/gpio/gpiochip338/base # cat /sys/class/gpio/gpiochip338/ngpio # The above line indicates that gpio 0th pin starts from 338 and ends at 511 (GPIO has total 174 pins for ZynqMP) if [ "$2" = "" ]; then gpio_output_func $1 1 else gpio_output_func $1 $2 fi
執(zhí)行記錄
# ./gpio_single_output.sh 81 MPSoC GPIO information: chip: zynqmp_gpio, base: 338, number: 174. Set GPIO number: 419 to value: 1 GPIO number: 419 previous direction: out, previous value: 0 GPIO number: 419 current direction: out, current value: 1 # ./gpio_single_output.sh 81 0 MPSoC GPIO information: chip: zynqmp_gpio, base: 338, number: 174. Set GPIO number: 419 to value: 0 GPIO number: 419 previous direction: out, previous value: 1 GPIO number: 419 current direction: out, current value: 0
-
管腳
+關注
關注
1文章
228瀏覽量
32147 -
MPSoC
+關注
關注
0文章
199瀏覽量
24325 -
Vivado
+關注
關注
19文章
815瀏覽量
66915
原文標題:【分享】在PL設計中使用MPSoC EMIO GPIO,并使用腳本設置MPSoC EMIO GPIO
文章出處:【微信號:FPGA-EETrend,微信公眾號:FPGA開發(fā)圈】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
GPIO使用教程 GPIO接口應用
GPIO錯誤排查與解決
GPIO在嵌入式系統(tǒng)中的作用
GPIO在物聯(lián)網中的應用
GPIO在樹莓派中的應用
Zynq UltraScale+ MPSoC數(shù)據(jù)手冊
如何通過PMC_GPIO喚醒AMD Versal? Adaptive SoC Linux系統(tǒng)
![如何通過PMC_<b class='flag-5'>GPIO</b>喚醒AMD Versal? Adaptive SoC Linux系統(tǒng)](https://file1.elecfans.com/web3/M00/02/9A/wKgZO2dg3UCAO9ZCAAAPSHJGrcQ785.png)
基于PYNQ和機器學習探索MPSOC筆記
![基于PYNQ和機器學習探索<b class='flag-5'>MPSOC</b>筆記](https://file1.elecfans.com/web1/M00/F5/3A/wKgaoWc4EwmAFLDDAABNy0bkvGw531.png)
在米爾電子MPSOC實現(xiàn)12G SDI視頻采集H.265壓縮SGMII萬兆以太網推流
SOC GPIO操作
在米爾電子MPSOC實現(xiàn)12G SDI視頻采集H.265壓縮SGMII萬兆以太網推流
復旦微PS+PL異構多核開發(fā)案例分享,基于FMQL20SM國產處理器平臺
FM20S用戶手冊-PS + PL異構多核案例開發(fā)手冊
什么是GPIO?GPIO組成原理
![什么是<b class='flag-5'>GPIO</b>?<b class='flag-5'>GPIO</b>組成原理](https://file1.elecfans.com/web2/M00/DE/2B/wKgZomYt0YKAc8h8AAAoNDQz4hY382.png)
評論