mpsoc 为pl提供了96个gpio,通过emio管脚链接到pl。
普通pl设计,一般只会用到几个gpio管脚。可以使用vivado ipi中的slice ip, 从其中分出指定数量的管脚。
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的输出值。脚本接受两个输入参数。第一个参数表示gpio编号,mio gpio从0开始,emio gpio从78开始。第二个参数是输出值。如果输出值是1,可以省略第二个参数。
#/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/b
# 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/b
}
# 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
执行记录
# ./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
农机蓄电池冬季如何防冻
国产AI芯片如何助力车路协同突破落地瓶颈?
循环队列在网络摄像头项目中处理多则消息的运用
Samsung Terrace推出一款智能电视,具有高端三星QLED电视所能提供的所有功能
我国工业互联网标识解析体系运行良好,已有3000多个企业接入
PL设计中MPSoC EMIO GPIO的应用
为什么您的企业业绩破亿之后就很难突破了?
华为欲将让Mate30系列使用HMS服务扩展海外市场
苹果宣布将在iOS14 Beta测试版上线透明化APP隐私追踪功能
移动应用需要电源路径管理
具有快速瞬态响应的极低压差稳压电路
储能逆变器关键技术参数解读
格创东智出席《财富》中国500强峰会 助力企业实现高质量发展
如何在Microsoft Word中制作高质量的小册子
智慧电厂5G+蓝牙+GPS/北斗RTK人员定位系统解决方案
一体成型电感中的磁场是如何产生的?
借助Ansys Speos这款光机设计一体化的光学软件
三星4纳米良率改善 分食台积电特斯拉订单
彩虹瀑布时钟制作图解
!!(现货) Agilent 8712ET HP8712ET