原创 ZYNQ学习笔记之GPIO

2019-5-10 16:25 3365 17 4 分类: FPGA/CPLD 文集: 技术学习

ZYNQ的GPIO模块分为四个BANK,从Bank0-Bank3,其中Bank0和1是MIO(多用途IO),Bank1和2是EMIO(扩展MIO)。

MIO共有54个引脚,每个引脚都可以复用连接PS的不同外设,如UART0的RXD和TXD既可以连接在MIO10和11上,也可连在14,15上,18和19,22和23等等都可以。所以MIO就是一端直接连接在PS上的线,这个线具体连接PS内部的哪一个外设,有多种选择。另一端可以直接外连,进行输入输出信号。

      54个MIO分为两个电压组,MIO0-15是一个,MIO16-53是第二个。每组同时共有一个电压,所以分配MIO多种挂外设时候,应该考虑电压是否匹配。

EMIO,一端连接在PL上,另一端仍是连接在PS上。如输入的信号,从PL的引脚上走,经过EMIO,还是进到了PS中。

      通过EMIO接口,在PS和PL之间提供了192个GPIO信号。其中64个输入信号,128个输出信号。128输出信号中,64个输出是真正的输出,另外64个是使能输出。


注意:Bank1只有22位,这和其他几个Bank都是32位是不一样的。

         可以对每个GPIO或者每一组进行编程操作。

         每个GPIO都提供了可编程的中断。

Bank0和Bank1的功能结构如下图所示:

具体每个寄存器的意义及说明查看数据手册,列出几个。

DATA_RO:总是读取GPIO引脚状态,不管GPIO是输入还是输出。注:若没有将MIO配置为GPIO,则DATA_R0的内容不可知。因为不能通过GPIO寄存器去读取非GPIO的值。

DATA:GPIO配置为输出时,该寄存器给输出的值。如果读该寄存器,返回上次写入的DATA值(或MASK_DATA值)

DIRM:方向模式。由于输入逻辑是一直使能的,所以这个寄存器是配置使能/禁止输出驱动的。为0,禁止输出驱动器。

OEN:输出使能。当GPIO配置为输出时,控制使能/禁止输出。为0,禁止输出驱动器。禁止输出时,引脚为三态。

注:如果MIO的TRI_ENABLE=1,则使能三态并禁止驱动器,直接忽略OEN。


用于EMIO的寄存器和MIO的相同,但是存在一些功能差异:

①输入时候,是来自于PL的布线连接,只要DIRM设置为0是输入模式,则直接读取DATA_R0的值,和OEN以及输出值都无关。

②输出时没三态使能,OEN对其无影响。此时DIRM设为1,表示为输出。

注意:Bank0的【8:7】引脚用于在复位时候控制IO缓冲区的电压模式,故必须根据正确的电压模式由外部系统来驱动。为了防止被逻辑驱动,不作为通用输入。当系统启动完成后,可用作通用输出。

         ②所有的GPIO共享一个中断,IRQ ID是52,所以必须通过INT_MASK和INT_STAT寄存器来确定引起中断的GPIO源。

GPIO的编程流程:

如:

MIO引脚10作为输出

引脚配置:

①将0x0000_0400写到gpio.DIRM_0 寄存器,把方向设置为输出。就是第10位(从0开始数)置1,一共32位,控制Bank0的32位。

将0x0000_0400写到gpio.OEN_0 寄存器,输出使能。

写数据:可以直接写gpio.DATA_0,也可以通过MASK_DATA来写。


MIO引脚10作为输入

将0x0写到gpio.DIRM_0 寄存器,也就是保证第10位是0即可,其他位是1无所谓。

读数据:读取gpio.DATA_RO_0寄存器,也就是读取所有Bank0输入引脚的值,或者在输入引脚上使用中断逻辑。


对GPIO的读写操作,既可以使用读写寄存器的底层函数来操作,也可以直接使用API函数进行GPIO的配置,SDK都提供了。

除了MIO,EMIO之外,还可以通过IP的方式来操作GPIO信号,使用AXI-GPIO IP核,经过AXI总线,控制PL部分的管脚资源,来实现GPIO信号的输入输出。

作者: 狂野的牛哥, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3867932.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论5条评论)

登录后参与讨论

用户1013590 2019-6-22 18:15

学习!谢谢!

curton 2019-5-22 08:13

学习

curton 2019-5-15 21:25

学习

curton 2019-5-14 15:29

学习

curton 2019-5-13 16:21

学习
相关推荐阅读
狂野的牛哥 2020-06-12 10:24
DC是怎样综合RTL级设计的?
学习书籍《数字IC设计-方法、技巧与实践》笔记对于软件DC(Design Compiler)而言,综合=翻译+优化+映射。翻译:是将RTL级描述转换成DC常用的布尔表达,优化是根据设计目标优化电路结构...
狂野的牛哥 2019-10-29 11:08
秋招整理
签订三方结束秋招已经快一周了,想着回忆整理一下自己的秋招经历,留作纪念,也希望能帮助需要的人。坐标hf,目的城市hf或者wh,所以找工作的重点其实还是放在wh,hf和长三角区域,诸如北京,珠三角以及其...
狂野的牛哥 2019-08-16 20:55
步进电机驱动芯片TMC260使用经验
项目需要使用步进电机的驱动芯片,几经比较,选用了德国的TMC260,非常好用,工作起来稳健。芯片有两个完整的H桥,所以可用来控制两个直流电机或者一个二相四线步进电机。具体参数查看datasheet,大...
狂野的牛哥 2019-07-25 10:53
时序约束之偏移(OFFSET)约束
笔记本上整理记载了时序约束中的偏移约束,上传图片保存,以备日后查阅使用。...
狂野的牛哥 2019-06-20 16:34
ZYNQ学习笔记之First Project
做了第一个Project该工程功能:PS内部定时器开启定时,PL端GPIO连接按键和LED,通过按键按下产生从PL到PS的中断,中断服务程序是控制LED灯做流水灯闪烁,间隔时间为来自于定时器的1s。同...
狂野的牛哥 2019-06-20 15:30
ZYNQ学习笔记之时钟相关
通常模式下,锁相环PLL是启动的,PS-CLK提供时钟信号,经过三路PLL,分别是:ARM PLL,产生时钟用于CPU和互联;IO PLL,产生时钟用于IO外围设备;DDR PLL,产生时钟用于DDR...
EE直播间
更多
我要评论
5
17
关闭 站长推荐上一条 /3 下一条