Vivado中的IP核——GPIO详解

这篇具有很好参考价值的文章主要介绍了Vivado中的IP核——GPIO详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

资料ID:PG144
文档查找软件:DocNav,在安装vivado时可以选择一并安装

Vivado中的GPIO模块框图如下。
Vivado中的IP核——GPIO详解
下表展示了AXI GPIO的寄存器和相对于基地址的地址偏移值。
Vivado中的IP核——GPIO详解
这些寄存器是否可用取决于一些配置参数的值。若某个寄存器是不可用的,一个写信号对该寄存器没有效果;当尝试读取该寄存器的值时,将会得到全零值。决定寄存器是否可用的参数如下表。
Vivado中的IP核——GPIO详解
如上表所示,当Enable Interrupt参数为0时,与中断相关的三个寄存器GIER、IP IER、IP ISR是不可使用的,而对其余寄存器是没有影响的。同理,当使能双通道(Enable Dual Channel)这个参数为0时,通道2的数据寄存器和三态寄存器是不可用的。

Register Space

由于通道1和通道2的数据寄存器与三态寄存器是相同的,所以这里仅介绍五个寄存器。GPIOx_DATA表示通道x的数据寄存器。

GPIOx_DATA

GPIO数据寄存器的作用有两个,当GPIO被配置为输入端口时,用于读取输入值;当GPIO被配置为输出端口时,将要输出的值写入该寄存器。此外,当GPIO被配置为输入端口时,向该寄存器写数据是无效的。
GPIO数据寄存器的描述如下表。
Vivado中的IP核——GPIO详解

GPIOx_TRI

GPIO 3态控制寄存器可以动态地配置端口为输入或者输出。当某一个比特位被配置为1,则相应的端口就会被配置为输入端口;当某一比特位被配置为0,则相应的端口被设置为输出端口。
GPIO 3态控制寄存器的描述如下。
Vivado中的IP核——GPIO详解

Interrupts

在介绍与中断相关的寄存器之前,先介绍一下GPIO的中断。
在中断使能的情况下,任何输入通道的转换都会产生一个电平中断。GPIO接口模块中包含了中断检测逻辑,该逻辑可以识别任何输入通道的转换。当一个转换被检测到,它将被告知给中断控制模块。
为了支持通道的中断能力,中断控制模块中实现了以下的寄存器。
全局中断使能寄存器(GIER)-使能或不使能中断输出,这些中断输出到processor或者interrupt controller。
IP中断使能寄存器(IPIER)-为每一个通道配置独立的中断使能位。
IP中断状态寄存器(IPISR)-为每一个通道配置独立的中断状态位。为了测试,IP ISR也可以手动设置产生一个中断。

GIER

该寄存器有效位只有一位,即第31位。具体的寄存器描述如下。
Vivado中的IP核——GPIO详解
如果想要产生中断,必须要设置两个使能,第一个就是上述寄存器,即Master enable;第二个就是IPIER。

IPIER

IPIER中有效位也只有两位,具体的寄存器描述如下。
Vivado中的IP核——GPIO详解

IPISR

与IPIER类似,该寄存器中的有效位也是两个,具体描述如下。
Vivado中的IP核——GPIO详解

示例程序:GPIO做为输出控制LED,GPIO2做为输入产生中断

在利用Vivado搭建硬件平台的时候已经对GPIO进行了相关设置,程序里首先验证这些设置是否会对相关寄存器进行初始化,如是否会将GPIO2所对应的4个端口全部设置为输入。实验结果表明,寄存器必须由软件初始化。文章来源地址https://www.toymoban.com/news/detail-481108.html

#include "xil_printf.h"
#include "sleep.h"

#define GPIOBaADDr 0x40000000
#define DATA1OffSet 0x0
#define TRI1OffSet 0x4
#define DATA2OffSet 0x8
#define TRI2OffSet 0xC
#define GIEROffSet 0x11C
#define IPIEROffSet 0x128
#define IPISROffSet 0x120
#define GETX(x) (*(volatile int *)(GPIOBaADDr + x))

int main()
{
	/***************initialize GPIO*******************/
	if((GETX(TRI1OffSet) & 0xf) == 0x0)
	{
		print("GPIO1 already set to output by hardware platform\r\n");
	}
	else
	{
		print("GPIO1 will set to output by software\r\n");
		GETX(TRI1OffSet) &= 0x0;
	}

	if((GETX(TRI2OffSet) & 0xf) == 0xf)
	{
		print("GPIO2 already set to input by hardware platform\r\n");
	}
	else
	{
		print("GPIO2 will set to input by software\r\n");
		GETX(TRI2OffSet) |= 0xf;
	}

	if((GETX(GIEROffSet) & 0x80000000) == 0x80000000)
	{
		print("Global Interrupt Enable by hardware platform\r\n");
	}
	else
	{
		print("Global Interrupt Enable by software\r\n");
		GETX(GIEROffSet) |= 0x80000000;
	}

	if((GETX(IPIEROffSet) & 0x2) == 0x2)
	{
		print("channel2 interrupt enable by hardware platform\r\n");
	}
	else
	{
		print("channel2 interrupt enable by software\r\n");
		GETX(IPIEROffSet) |= 0x2;
	}
	/*************************************************/

	/******************GPIO control led***************/
	//The four LEDs are lit in turn every one second
	for(int i = 0; i < 100; i++)
	{
		GETX(DATA1OffSet) |= (0x1 << (i % 4));
		sleep(1);
		GETX(DATA1OffSet) &= 0x0;
	}
	/*************************************************/

	/**************GPIO2 generate interrupt***********/
	while(1)
	{
		if((GETX(IPISROffSet) & 0x2) == 0x2)
		{
			print("GPIO2 Generate interrupt\r\n");
			GETX(IPISROffSet) |= 0x2;//clear interrupt by TOW
		}
	}
	/************** **********************************/
}

到了这里,关于Vivado中的IP核——GPIO详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DDR3 控制器 MIG IP 详解完整版 (VIVADO&Verilog)

    DDR系列文章分类地址: (1)DDR3 基础知识分享 (2)DDR3 控制器 MIG IP 详解完整版 (AXI4VivadoVerilog) (3)DDR3 控制器 MIG IP 详解完整版 (nativeVivadoVerilog) (4)基于 DDR3 的串口传图帧缓存系统设计实现 (5)基于 DDR3 的native接口串口局部传图缓存系统设计实现 (6)基于 DDR3 的

    2024年02月06日
    浏览(70)
  • AXI三种接口及DMA DDR XDMA介绍(应用于vivado中的ip调用)

    参考资源: 【SDK篇_58~62_AXI接口简介【Xilinx】+【Vivado】+【AXI4总线】+【FPGA】-哔哩哔哩】 关于AXI握手过程都讲解的很细致 ug1037(三种AXI的介绍,相关AXI IP的介绍) IHI0022D(握手过程的详细介绍) FPGA_HP:AXI4的学习与使用1——基础知识积累 这个博主写的其他内容也不错 从零学

    2024年01月24日
    浏览(35)
  • DDR3 控制器 MIG IP 详解完整版 (native&VIVADO&Verilog)

    DDR系列文章分类地址: (1)DDR3 基础知识分享 (2)DDR3 控制器 MIG IP 详解完整版 (AXI4VivadoVerilog) (3)DDR3 控制器 MIG IP 详解完整版 (nativeVivadoVerilog) (4)基于 DDR3 的串口传图帧缓存系统设计实现 (5)基于 DDR3 的native接口串口局部传图缓存系统设计实现 (6)基于 DDR3 的

    2024年02月13日
    浏览(55)
  • Word控件Spire.Doc 【超链接】教程(3):在C#中查找word文档中的超链接

    Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转换和打印Word/PDF/Excel等格式文件处

    2024年02月04日
    浏览(35)
  • DDR3 控制器 MIG IP 详解完整版 (AXI4&VIVADO&Verilog)

    DDR系列文章分类地址: (1)DDR3 基础知识分享 (2)DDR3 控制器 MIG IP 详解完整版 (AXI4VivadoVerilog) (3)DDR3 控制器 MIG IP 详解完整版 (nativeVivadoVerilog) (4)基于 DDR3 的串口传图帧缓存系统设计实现 (5)基于 DDR3 的native接口串口局部传图缓存系统设计实现 (6)基于 DDR3 的

    2024年02月11日
    浏览(34)
  • CS 144 Lab Six -- building an IP router

    对应课程视频: 【计算机网络】 斯坦福大学CS144课程 Lab Six 对应的PDF: Lab Checkpoint 5: building an IP router 在本实验中,你将在现有的 NetworkInterface 基础上实现一个IP路由器,从而结束本课程。路由器有几个网络接口,可以在其中任何一个接口上接收互联网数据报。路由器的工作是根

    2024年02月14日
    浏览(24)
  • 车辆信息快速查找API:轻松查询车牌号对应车辆的详细资料

      车辆信息的快速查找对于许多人来说是非常有用的。无论是想要购买一辆二手车,还是需要了解某辆车的详细信息,这个需求在现实生活中经常会遇到。那么,有没有一种快速方便的方法来实现这个功能呢?答案是有的,就是通过车辆信息快速查找API。 在这篇博文中,我们

    2024年03月24日
    浏览(40)
  • VBA技术资料MF107:表对象中数据的删除查找及排序

    我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到数据库,到字典,到高级的网抓及类的应用。另外,为

    2024年01月17日
    浏览(29)
  • openssl官网文档资料

    文本主要告诉大家当我们在学习openssl的时候,如何查找openssl官网的资料 首先进入openssl官网https://www.openssl.org/ 如上图所示,我们点击Docs, 进入到如下界面: 这里我们点击红色框框的manual page进入下一个界面,会显示openssl的不同版本 我使用的是1.1.1的版本,点击进入后显示如

    2024年02月04日
    浏览(27)
  • 处理数据传入 Word 文档中的空值的方法详解

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 在将数据传入 Word 文档时,可能会遇到空值的情况,即某些数据项为空。本文将介绍如何处理数据传入 Word 文档中

    2024年02月15日
    浏览(83)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包