0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PL设计中MPSoC EMIO GPIO的应用

454398 来源:赛灵思中文社区 作者:赛灵思中文社区 2020-11-04 14:57 次阅读

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 DriverGPIO 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
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206736
  • Xilinx
    +关注

    关注

    70

    文章

    2121

    浏览量

    119374
  • GPIO
    +关注

    关注

    16

    文章

    1135

    浏览量

    50578
  • MPSoC
    +关注

    关注

    0

    文章

    194

    浏览量

    24111
收藏 人收藏

    评论

    相关推荐

    MIO与EMIO的关系解析 GPIO、MIO、EMIO的区别

    通过AXI点亮PL端LED。 1. MIO与EMIO 首先来理清楚MIO与EMIO的关系。MIO是PS的I/O引脚,一共有54个,分为Bank0与Bank1,可以接许多外设比如UART、SPI或
    的头像 发表于 11-24 14:32 2.1w次阅读
    MIO与<b class='flag-5'>EMIO</b>的关系解析 <b class='flag-5'>GPIO</b>、MIO、<b class='flag-5'>EMIO</b>的区别

    Xilinx ZYNQ开发GPIO的三种方式:MIO、EMIO、AXI_GPIO

    前言: ZYNQ 7000有三种GPIO:MIO,EMIO,AXI_GPIO MIO是固定管脚的,属于PS,使用时不消耗PL资源;EMIO
    的头像 发表于 12-26 10:12 3388次阅读
    Xilinx ZYNQ开发<b class='flag-5'>GPIO</b>的三种方式:MIO、<b class='flag-5'>EMIO</b>、AXI_<b class='flag-5'>GPIO</b>

    【ZYNQ Ultrascale+ MPSOC FPGA教程】第二十八章PS端EMIO的使用

    如果想用PS点亮PL的LED灯,该如何做呢?一是可以通过EMIO控制PL端LED灯,二是通过AXI GPIO的IP实现控制。本章介绍如何使用EMIO
    的头像 发表于 01-30 10:05 6831次阅读
    【ZYNQ Ultrascale+ <b class='flag-5'>MPSOC</b> FPGA教程】第二十八章PS端<b class='flag-5'>EMIO</b>的使用

    【ZYNQ Ultrascale+ MPSOC FPGA教程】第二十九章PL端AXI GPIO的使用

    使用zynq最大的疑问就是如何把PS和PL结合起来使用,在其他的SOC芯片中一般都会有GPIO,本实验使用一个AXI GPIO的IP核,让PS端通过AXI总线控制PL端的LED灯,实验
    的头像 发表于 02-01 10:06 6251次阅读
    【ZYNQ Ultrascale+ <b class='flag-5'>MPSOC</b> FPGA教程】第二十九章<b class='flag-5'>PL</b>端AXI <b class='flag-5'>GPIO</b>的使用

    玩转Zynq连载31——[ex53] 基于Zynq PS的EMIO控制

    zstar.bit文件和GPIO_EMIO_project.elf文件烧录到Zynq运行起来。程序运行起来后,我们就可以看到Zstar板上PL侧的3个LED指示灯D3、D2和D1逐个闪烁起来。 腾讯微云链接
    发表于 10-12 17:35

    【正点原子FPGA连载】第三章EMIO按键控制LED实验-领航者 ZYNQ 之嵌入式开发指南

    和柱状图两种方式显示当前PL资源的使用情况。在我们本次实验,只消耗了PL端1个LUT和一个IO资源,这个IO就是PS通过EMIO扩展GPIO
    发表于 08-29 16:20

    MIO/EMIO/AXI_GPIO接口详解

    ZYNQ-7000系列MIO/EMIO/AXI_GPIO接口
    发表于 02-02 07:30

    XILINX MPSOC系列FPGA视频教程

    开发之Vitis工程创建流程04_MPSoC开发之固化程序05_利用批处理建立Vitis工程二、MPSoC外设基础开发06_RTC及中断控制器介绍07_RTC中断实验程序分析08_MIO GPIO结构
    发表于 07-21 10:34

    ZYNQ 的三种GPIO :MIO、EMIO、AXI

    GPIO的博客说的有一些不一样呢。 我们先看有哪三种GPIO:MIO、EMIO、AXI_GPIO。其中MIO和EMIO是直接挂在PS上的
    发表于 02-08 10:23 2788次阅读
    ZYNQ 的三种<b class='flag-5'>GPIO</b> :MIO、<b class='flag-5'>EMIO</b>、AXI

    被zynq的GPIO唬住,告诉你zynq的3种GPIO

    我们先看有哪三种GPIO:MIO、EMIO、AXI_GPIO。其中MIO和EMIO是直接挂在PS上的GPIO。而AXI_
    发表于 07-07 08:23 4963次阅读

    PL设计中使用MPSoC EMIO GPIO

    为了简化使用GPIO,编写了以下脚本。使用下列脚本,一条命令就能设置一个GPIO的输出值。脚本接受两个输入参数。第一个参数表示GPIO编号,MIO GPIO从0开始,
    的头像 发表于 09-03 09:50 2580次阅读
    在<b class='flag-5'>PL</b>设计中使用<b class='flag-5'>MPSoC</b> <b class='flag-5'>EMIO</b> <b class='flag-5'>GPIO</b>

    ZYNQ-7000系列MIO、EMIO、AXI_GPIO接口

    ZYNQ-7000系列MIO/EMIO/AXI_GPIO接口
    发表于 07-25 17:41 2146次阅读
    ZYNQ-7000系列MIO、<b class='flag-5'>EMIO</b>、AXI_<b class='flag-5'>GPIO</b>接口

    ZYNQ-7000系列MIO/EMIO/AXI_GPIO接口

    ZYNQ-7000系列MIO/EMIO/AXI_GPIO接口
    发表于 01-31 06:50 12次下载
    ZYNQ-7000系列MIO/<b class='flag-5'>EMIO</b>/AXI_<b class='flag-5'>GPIO</b>接口

    ZYNQ学习笔记_GPIO之输入输出

    通过MIO(Multiuse I/O)模块对器件的引脚做观测(input)和控制(output)。ZYNQ的PS端上的GPIO也可以通过EMIO(Extra MIO)模块对PL端的IP以及引脚实现上述操作。
    发表于 12-04 19:36 10次下载
    ZYNQ学习笔记_<b class='flag-5'>GPIO</b>之输入输出

    强制开放MPSoC的PS-PL接口

    MPSoC含有PS、PL;在PS和PL之间有大量接口和信号线,比如AXI、时钟、GPIO等。缺省情况下,PS和PL之间有接口和信号线被关闭。
    发表于 08-02 09:45 716次阅读