首页 > 其他分享 >[米联客-XILINX-H3_CZ08_7100] FPGA_SDK入门篇连载-18 PL AXI-GPIO实验

[米联客-XILINX-H3_CZ08_7100] FPGA_SDK入门篇连载-18 PL AXI-GPIO实验

时间:2024-09-29 11:23:07浏览次数:11  
标签:gpio FPGA CZ08 中断 H3 XGpio 寄存器 GPIO AXI

软件版本:VIVADO2021.1

操作系统:WIN10 64bit

硬件平台:适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA

实验平台:米联客-MLK-H3-CZ08-7100开发板

板卡获取平台:https://milianke.tmall.com/

登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!

目录

1概述

2系统框图

3AXI-GPIO IP概述

3.1特性

3.2寄存器说明

1:数据寄存器GPIOx_DATA

2:三态寄存器GPIOx_TRI

3:全局中断使能寄存器(GIER)

4:IP-CORE中断使能寄存器(IPIER)

5:IP状态寄存器(IPISR)

4硬件电路分析

5搭建SOC系统工程

5.1SOC系统工程

1:中断设置

2:设置GP Master接口

3:设置复位输出

4:设置PL时钟

5:AXI-GPIO

5.2设置AXI外设地址分配

5.3编译并导出平台文件

6搭建Vitis-sdk工程

6.1创建SDK Platform工程

6.2创建APP工程

7程序分析

7.1axi_gpio_test.c测试程序

7.2axi_gpio_intr.c程序

8方案演示

8.1硬件准备

8.2实验结果


1概述

本文介绍VIVADO自带IP AXI-GPIO扩展PS IO的使用。我们在前面的文章中通过EMIO实现过扩展PS的IO,通过EMIO的方式实际上IO控制器还是用PS的。那么AXI-GPIO更多是使用FPGA资源实现的IO的扩展。并且很多应用中,我们会把AXI-GPIO的控制信号用于FPGA内部逻辑和PS之间的数据交互,比如通过AXI-GPIO输出复位信号,或者通过AXI-GPIO的输入中断,扩展出更多中断。

在本文的demo中,我们将实现通过AXI-GPIO扩展2个IO实现LED驱动,以及2个IO实现按键输入,并且通过按键输入产生2个GPIO中断。

本文实验目的:

1:通过阅读pg144-axi-gpio.pdf熟悉AXI-GPIO的硬件资源(配套工程的soc_prj/06_doc路径)

2:通过VIVADO搭建AXI-GPIO的SOC工程,通过按键模拟输入、LED模拟输出

3:使用VITIS-SDK编写AXI-GPIO测试程序,完成GPIO输入、输入中断、输出测试

2系统框图

3AXI-GPIO IP概述

AXI-GPIO IP通过AXI-Lite-slave连接到PS。具体2个通道,每个通道32个GPIO。在IP里面可以固定配置为输入或者输出,也可以通过软件控制寄存器配置为输入或者输出。并且支持中断输入,AXI-GPIO的构架如下图所示。

3.1特性

-支持axis4 - lite接口规范

-支持可配置的单或双GPIO通道

-支持GPIO引脚1 ~ 32位的通道宽度配置

-支持动态规划每个GPIO位作为输入或输出

-支持每个通道的单独配置

-支持所有寄存器的每个位的独立重置值

-支持可选的中断请求生成

3.2寄存器说明

1:数据寄存器GPIOx_DATA

有两个GPIO数据寄存器(GPIO_DATA和GPIO2_DATA),每个通道对应一个。通道1数据寄存器(GPIO_DATA)始终存在;通道2数据寄存器(GPIO2_DATA)只有当IP配置为双通道(Enable dual channel = 1)时才存在。

2:三态寄存器GPIOx_TRI

有两个AXI GPIO 3-state控制寄存器(GPIO_TRI和GPIO2_TRI),每个通道对应一个。通道2 3状态控制寄存器(GPIO2_TRI)只有在IP配置为双通道使能双通道= 1时才存在。

3:全局中断使能寄存器(GIER)

设置31bit位为1使能中断。

4:IP-CORE中断使能寄存器(IPIER)

5:IP状态寄存器(IPISR)

4硬件电路分析

这里使用按键输入BTN3和BTN4,配套工程的FPGA PIN脚定义路径为soc_prj/uisrc/04_pin/ fpga_pin.xdc。

5搭建SOC系统工程

详细的搭建过程这里不再重复,对于初学读者如果还不清楚如何创建SOC工程的,请学习“01Vitis Soc开发入门”这篇文章。

5.1SOC系统工程

1:中断设置

2:设置GP Master接口

3:设置复位输出

4:设置PL时钟

5:AXI-GPIO

输出输出各设置2bit,支持中断

5.2设置AXI外设地址分配

从本节课开始,只要添加的AXI总线外设都要正确分配地址

5.3编译并导出平台文件

以下步骤简写,有不清楚的看第一篇文章。

1:单击Block文件à右键àGenerate the Output ProductsàGlobalàGenerate。

2:单击Block文件à右键à Create a HDL wrapper(生成HDL顶层文件)àLet vivado manager wrapper and auto-update(自动更新)。

3:添加配套工程路径下uisrc/04_pin/fpga_pin.xdc约束文件

4:生成Bit文件。

5:导出到硬件: FileàExport HardwareàInclude bitstream

6:导出完成后,对应工程路径的soc_hw路径下有硬件平台文件:system_wrapper.xsa的文件。根据硬件平台文件system_wrapper.xsa来创建需要Platform平台。

6搭建Vitis-sdk工程

创建soc_base sdk platform和APP工程的过程不再重复,如果不清楚请参考本章节第一个demo。 

6.1创建SDK Platform工程

右击soc_base编译,编译的时间可能会有点长

6.2创建APP工程

7程序分析

在前面文章文章中,我们已经使用过PS的中断,比如GPIO中断、定时器中断、看门狗中断、I2C中断等等。其中关于sys_intr.c中的函数都做了详细介绍。所以本文开始不再介绍sys_intr.c中的函数。

7.1axi_gpio_test.c测试程序

#include "sys_intr.h"
#include "axi_gpio_intr.h"
#include "sleep.h"

void init_intr_sys(void)
{

	Gpiopl_init(&Gpio, AXI_GPIO_DEV_ID);//初始化GPIO

	Init_Intr_System(&Intc); //初始化系统中断

	Gpiopl_Setup_Intr_System(&Intc, &Gpio, GPIO_INTR_ID); //设置GPIO中断

	Setup_Intr_Exception(&Intc);
}

int main(void)
{
	init_intr_sys();

	while(1)
	{
		if(gpio_intr_flag) //判断中断是否发生,当中断发生后,读取中断,并且打印产生中断的按键号
		{
			gpio_intr_flag = 0; //清除中断标志
			XGpio_DiscreteWrite(&Gpio,2,gpio_val); //用按键的输入去点亮LED
			printf("SW=%d int\n\r", gpio_val);
		}

	}
	return XST_SUCCESS;
}

7.2axi_gpio_intr.c程序

#include "axi_gpio_intr.h"

volatile u32 gpio_intr_flag;
volatile u32 gpio_val;

//中断回调函数
void GpioplIntrHandler(void *Callback)
{
	XGpio *GpioPtr = (XGpio *)Callback;
	u32 IrqStatus;

	IrqStatus = XGpio_InterruptGetStatus(GpioPtr); //获取中断状态

	if((IrqStatus & 0x01) == 0x01)
	{
		gpio_val = XGpio_DiscreteRead(GpioPtr, 1); //GPIO中断需要读按键状态知道哪一个按键产生了中断
		gpio_intr_flag = 1; //设置中断标志
	}

	XGpio_InterruptClear(GpioPtr, IrqStatus); //清除中断

}

//设置中断
void Gpiopl_Setup_Intr_System(XScuGic *GicInstancePtr, XGpio *InstancePtr, u16 IntrId)
{
        XScuGic_Connect(GicInstancePtr, IntrId, //设置中断回调函数
                        (Xil_ExceptionHandler)GpioplIntrHandler,
                        (void *)InstancePtr);

        XScuGic_Enable(GicInstancePtr, IntrId);//使能中断号指定的中断

    	XGpio_InterruptEnable(InstancePtr, 0x01);//使能中断

    	XGpio_InterruptGlobalEnable(InstancePtr); //使能全局中断

 }

int Gpiopl_init(XGpio *InstancePtr, u32 DeviceId)
{

	int Status;
	/* Initialize AXI GPIO */
	Status = XGpio_Initialize(InstancePtr, DeviceId);
	if (Status != XST_SUCCESS) {
		xil_printf("AXI GPIO config failed!\r\n");
		return XST_FAILURE;
	}

	XGpio_SetDataDirection(InstancePtr, 1, 0x3);//设置GPIO通道1用于输入

	XGpio_SetDataDirection(InstancePtr, 2, 0x0); //设置GPIO通道2用于输出


    return 1;
}

在初始化函数中,设置channel1 的2个IO为输入,channel2 的2个IO为输出

在Gpiopl_Setup_Intr_System(XScuGic *GicInstancePtr, XGpio *InstancePtr, u16 IntrId)函数中主要是对,AXI-GPIO的全局中断使能寄存器GIER和IPIER中断使能寄存器进行设置

当GPIO的电平状态发生改变就会触发中断,回调函数中,首先读取AXI-GPIO的状态寄存器,然后判断是否是channel1产生的中断。之后读取GPIO的按键输入状态,设置中断触发变量为1。最后清除中断。

8方案演示

8.1硬件准备

本实验需要用到 JTAG 下载器、USB 转串口外设,另外需要把核心板上的 2P 模式开关设置到 JTAG 模式,即 ON ON(注意新版本的 MLK_H3_CZ08-7100-MZ7100FC),支持 JTAG 模式,对于老版本的核心板,JTAG 调试的时候 一定要拔掉 TF 卡,并且设置模式开关为 OFF OFF)

8.2实验结果

除了通过串口观察按键中断的结果,而且可以通过LED观察。每次按下按键产生一个中断,每次松开按键也会产生一个中断。总之,只要按键的状态发生改变就会产生中断。

标签:gpio,FPGA,CZ08,中断,H3,XGpio,寄存器,GPIO,AXI
From: https://blog.csdn.net/u011570052/article/details/142392447

相关文章

  • [米联客-XILINX-H3_CZ08_7100] FPGA_SDK入门篇连载-26PL 自定义 AXI-Lite-频率计
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA实验平台:米联客-MLK-H3-CZ08-7100开发板板卡获取平台:https://milianke.tmall.com/登录“米联客”FPGA社区http://www.uisrc.com视频课程、答疑解惑!目录1概述2系统框图3等精度......
  • [米联客-XILINX-H3_CZ08_7100] FPGA_SDK入门篇连载-23PL 自定义 AXI-Lite 协议 IP
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA实验平台:米联客-MLK-H3-CZ08-7100开发板板卡获取平台:https://milianke.tmall.com/登录“米联客”FPGA社区http://www.uisrc.com视频课程、答疑解惑!目录1概述2系统框图3AXI总线......
  • 基于FPGA 多通道多带宽多速率 DDC设计
    摘要:数字阵列雷达的核心内容之一是单元级回波信号中频或射频数字化后,在数字域进行幅/相加权实现接收数字波束形成,并具有灵活的波束调度和更好的抗有源干扰的性能,基于多通道数字化接收机的数字阵列模块是数字阵列雷达的关键模块。论述了数字阵列模块内部基于FPGA的多通......
  • H3C交换机的Console和Telnet密码配置
    一、Console口登陆配置在AUX用户接口视图下,可以设置CONSOLE用户登陆的口令认证。有如下三种认证方式①None:不需要口令认证②Password:需要简单的本地口令认证,包含明文(simple)和密文(cipher)③Scheme:通过RADIUS服务器或本地提供用户名和认证口令配置命令如下:system-view[H......
  • 【TES817】l基于XCZU19EG FPGA的高性能实时信号处理平台
    板卡概述TES817是一款基于ZU19EGFPGA的高性能实时信号处理平台,该平台采用1片高性能的FPGA:XCZU19EG-2FFVC1760I作为主处理器,FPGA的PL端外挂1组72位DDR4SDRAM,用来实现超大容量数据缓存,FPGA的PS端外挂1组72位的DDR4SDRAM的高速数据缓存,用来支持操作系统的运行。该平台支持2个FMC......
  • CH395 tcp客户端 热拔插
    CH395做tcp客户端,实现网线拔掉后tcp断开,网线插上后tcp连接。目前提供三种思路:芯片测试版本:0x49,测试工具:TCPIPDebug做服务器1.第一种思路(1)代码:(在CH395的tcp_client例程的超时终端和PHY_Change中断中加上下面的代码即可)1u8sock_sta[2];2u8i;3if(init_status&GINT......
  • FPGA Verilog基本语句(语法)FPGA入门
    本篇文章主要写了在Verilog环境下,FPGA基本语法和数据类型。可以通过导航键快速进入assign语句、always语句等其他内容!对于Verilog(FPGA):module     ...                   ==》构成主体endmodulemodule模块名(【端口......
  • arch3 信息系统架构设计
    信息系统架构(InformationSystemArchitecture,ISA)则是指对某一特定内容里的信息进行统筹、规划、设计、安排等一系列有机处理的活动。它的主体对象是信息,由信息建筑师来加以设计结构、决定组织方式以及归类,好让使用者与用户容易寻找与管理的一项艺术与科学。架构风格能否达......
  • BGP选路解析(H3C)
    1.1        解析BGP选路的意义每个路由协议都有自己计算路由的方法,计算路由的方法称为路由算法,BGP选路方法就是BGP的路由算法,BGP运行路由算法的目的是计算出有效路由进而优选出最优路由,选路算法是BGP路由协议的核心算法之一。1.2        BGP选路与常见IGP选......
  • (066)FPGA时钟--->(016)异步时钟
    1目录(a)FPGA简介(b)Verilog简介(c)时钟简介(d)异步时钟(e)结束1FPGA简介(a)FPGA(FieldProgrammableGateArray)是在PAL(可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又......