[米联客-安路飞龙DR1-FPSOC] SDK入门篇连载-09 PL AXI-GPIO实验

news2024/11/15 16:18:07

软件版本:Anlogic -TD5.9.1-DR1_ES1.1

操作系统:WIN10 64bit

硬件平台:适用安路(Anlogic)FPGA

实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板

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

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

目录

1 概述

2 系统框图

3 AXI-GPIO IP概述

3.1 特性

3.2 寄存器空间

4 硬件电路分析

5 搭建SOC系统工程

5.1 SOC系统工程

1:中断设置

2:设置GP Master接口

3:设置复位输出

4:AXI-GPIO

5.2设置AXI外设地址分配

5.3 编译并导出平台文件

6 搭建SDK工程

6.1 创建Platform工程

6.2 创建APP工程

7 程序分析

7.1 axi_gpio_test.c测试程序

8 方案演示

8.1 硬件准备

8.2 实验结果

8.3 实验结果


1 概述

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

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

本文实验目的:

1:熟悉AXI-GPIO的硬件资源

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

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

2 系统框图

3 AXI-GPIO IP概述

AXI GPIO IP 旨在为 AXI-Lite 接口提供通用输入/输出接口(GPIO),并且可以将设备配置为单通道或双通道,每个通道的宽度是可以独立配置。AXI GPIO IP 的整体原理架构图如图所示

  1. AX14-Lite 接口模块

该模块实现了一个 32 位的 AXI4-Lite slave接口,用于访问 GPIO 通道寄存器

  1. 中断控制模块

该模块从 GPIO 通道获取中断状态,并对主机产生中断。当定制IP 时选择“Enable Interrupt”时,该模块将被启用。

  1. GPIO控制模块

该模块由寄存器和多路复用器组成,用于读写 AXI GPIO通道寄存器。它还包括必要的逻辑,以便在通道输入发生变化时监测并识别。

  1. 三态缓冲

本IP已在顶层加入了三态缓冲逻辑,当 IP 选择 GPIO既有输入端口,又有输出端口时,将根据 GPIO的三态选择信号自行对 GPIO的端口进行输入或输出的选择。

3.1 特性

  1. 支持 AXI4-Lite 接口规范
  2. 支持可配置的单或双 GPIO 通道
  3. 支持从1到 32 位的 GPIO 引脚的可配置通道宽度
  4. 支持每个 GPIO 位作为输入或输出的动态编程支持每个通道的单独配置
  5. 支持所有寄存器的每个位的独立复位值
  6. 支持可选的中断请求生成

3.2 寄存器空间

AXI GPIO IP 的寄存器配置包括 GPIO 数据寄存器、GPIO 三态寄存器和中断寄存器组成。下表列出了 AXI GPIO寄存器及其地址信息。

Address Space

Register Name

Access Type

DefaultValue

Description

0x0000

GPIO DATA

R/W

0x0

GPIO 数据寄存器

0x0004

GPIO TRI

R/W

0x0

GPIO 三态控制寄存器

0x0008

GPIO2 DATA

R/W

0x0

GPIO2 数据寄存器

0x000C

GPIO2 TRI

R/W

0x0

GPIO2 三态控制寄存器

0x0100

IP IER

R/W

0x0

IP 通道中断使能寄存器

0x0104

IP ISR

R/TOW

0x0

IP 中断状态寄存器

  1. 中断寄存器只有在启用中断参数时才可用。
  2. TOW(Toggle-On-Write)访问是指当一个值为1的数据被写入相应的位时,该位的状态被转换。
  3. 地址空间偏移量是相对于 BASEADDR 赋值。
  4. 写访问寄存器由 32 位的 AXI 写数据(* wdata)信号更新,且不受字节使能(* wstrb)信号的影响。

4 硬件电路分析

硬件接口和子卡模块请阅读“附录1”

配套工程的FPGA PIN脚定义路径为/soc_prj/uisrc/04_pin

5 搭建SOC系统工程

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

5.1 SOC系统工程

1:中断设置

2:设置GP Master接口

3:设置复位输出

4:AXI-GPIO

位宽设置为1bit,使能中断

5.2设置AXI外设地址分配

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

5.3 编译并导出平台文件

以下步骤简写,有不清楚的看第1篇《01 Soc开发入门》文章。

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

6 搭建SDK工程

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

6.1 创建Platform工程

6.2 创建APP工程

7 程序分析

7.1 axi_gpio_test.c测试程序

/*
 * Copyright (c) 2023, Anlogic Inc. and Contributors. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include <stdio.h>
#include <math.h>
#include <time.h>
#include "al_core.h"
#include <stdlib.h>
#include "ui_io.h"
#include "ui_type.h"

#define AXI_GPIO0_DATA_REG (0X80000000 + 0)
#define AXI_GPIO0_TRI_REG  (0X80000000 + 4)
#define AXI_GPIO0_IER_REG  (0X80000000 + 0x100)
#define AXI_GPIO0_SER_REG  (0X80000000 + 0x104)

#define AXI_GPIO1_DATA_REG (0X80100000 + 0)
#define AXI_GPIO1_TRI_REG  (0X80100000 + 4)
#define AXI_GPIO1_IER_REG  (0X80100000 + 0x100)
#define AXI_GPIO1_SER_REG  (0X80100000 + 0x104)

#define PL_IRQ_NUM0  114
#define PL_IRQ_NUM1  115

//pl interrupt call_back function
int gpio0_intr_func_handle(void) {

	printf("btn0 intr_func_handle\r\n");
	UI_Out32(AXI_GPIO0_SER_REG,0x01);//set gpio input
	return 0;
}

int gpio1_intr_func_handle(void) {

	printf("btn1 intr_func_handle\r\n");
	UI_Out32(AXI_GPIO1_SER_REG,0x01);//set gpio input
	return 0;
}

int main()
{
	u32 btn_val;

	printf("AXI GPIO TEST!\r\n");
	printf("PL interrupt  TEST!\r\n");

	UI_Out32(AXI_GPIO0_TRI_REG,0x01);//set gpio input
	UI_Out32(AXI_GPIO0_IER_REG,0x01);//set gpio channel1 interrupt enable

	UI_Out32(AXI_GPIO1_TRI_REG,0x01);//set gpio input
	UI_Out32(AXI_GPIO1_IER_REG,0x01);//set gpio channel1 interrupt enable

	AL_INTR_AttrStrct *IntrAttr_PL_INTER0 = malloc(sizeof(AL_INTR_AttrStrct));
	IntrAttr_PL_INTER0->TrigMode = POSTIVE_EDGE_TRIGGER;// set interrupt as edge trigger
	IntrAttr_PL_INTER0->Priority   =  137,
	AlIntr_RegHandler(PL_IRQ_NUM0, IntrAttr_PL_INTER0, gpio0_intr_func_handle, NULL);

	AL_INTR_AttrStrct *IntrAttr_PL_INTER1 = malloc(sizeof(AL_INTR_AttrStrct));
	IntrAttr_PL_INTER1->TrigMode = POSTIVE_EDGE_TRIGGER;// set interrupt as edge trigger
	IntrAttr_PL_INTER1->Priority   =  137,
	AlIntr_RegHandler(PL_IRQ_NUM1, IntrAttr_PL_INTER1, gpio1_intr_func_handle, NULL);

    AlIntr_SetLocalInterrupt(1); // enable local interrupt

	while(1)
	{
	}

    return 0;
}

8 方案演示

8.1 硬件准备

本实验需要用到JTAG下载器、USB转串口外设,另外需要把SW1模式开关设置到JTAG模式

按下如上箭头所指的按键。

8.2 实验结果

由于添加了PL端按键资源,所以Debug时需要将TD生成的soc_prj/soc_prj_Runs/best_result/soc_prj.bit文件同时添加进来,在debug前会先下载PL端资源后启动SOC部分。

8.3 实验结果

每次按下按键产生一个中断,每次松开按键也会产生一个中断。总之,只要按键的状态发生改变就会产生中断。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1956738.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

buu做题(9)

[MRCTF2020]PYWebsite 有个二维码 扫了一下啊二维码 function enc(code){hash hex_md5(code);return hash;}function validate(){var code document.getElementById("vcode").value;if (code ! ""){if(hex_md5(code) "0cd4da0223c0b280829dc3ea4…

【C语言报错已解决】“Undefined Reference”

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言&#xff1a; 在开发过程中&#xff0c;我们经常会遇到各种编译错误或运行时错误。其中&#xff0c;“Undefined Referenc…

JavaFX布局-AnchorPane

JavaFX布局-AnchorPane 常用属性padding 实现方式Javafxml 将子节点锚定到容器的边界上&#xff0c;指定子节点相对于 AnchorPane 的四个边界&#xff08;上、下、左、右&#xff09;的距离适合宽高固定的一些表单如果允许最大化&#xff0c;拖动大小&#xff0c;需要自己计算子…

(面试必看!)一些和多线程相关的面试考点

文章导读 引言考点1. CAS 指令&#xff08;重点&#xff09;一、什么是CAS二、CAS 的优点三、CAS 的缺点四、ABA问题五、相关面试题 考点2. 信号量&#xff08;semaphore&#xff09;一、基本概念二、信号量的主要操作三、信号量的应用四、相关面试题 考点3、CountDownLatch 类…

万亿赛道 !二十届三中全会关于大规模设备更新措施深度解读 2024 !

第二十届三中全会审议通过《中共中央关于进一步全面深化改革、推进中国式现代化的决定》&#xff0c;涵盖300多项重要改革举措。总体而言&#xff0c;本次会议在财税体制改革、金融体制改革、统一大市场等方面做出了重点部署。此外&#xff0c;本次新增“高质量发展体制机制”作…

苹果手机丢了如何定位?3个技巧教你解决

在这个移动互联网高度发达的时代&#xff0c;苹果手机已成为我们日常生活中不可或缺的伴侣。然而&#xff0c;手机丢失的风险也随之增加。一旦手机不幸落入他人之手&#xff0c;不仅财产安全堪忧&#xff0c;个人隐私也可能面临泄露风险。那么&#xff0c;手机丢了如何定位呢&a…

【代码随想录训练营第42期 Day7打卡 LeetCode 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和

目录 一、做题心得 二、题目及题解 454.四数相加II 题目链接 题解 383. 赎金信 题目链接 题解 15. 三数之和 题目链接 题解 18. 四数之和 题目链接 题解 三、小结 一、做题心得 今天是代码随想录训练营打卡的第七天&#xff0c;做的也是同昨天一样的哈希表部分…

电源防反接电路设计——NMOS管

电源电压接入正确时&#xff0c;由于MOS管中的寄生二极管的存在&#xff0c;从而使得MOS管的Vgs电压为输入电压减去寄生二极管压降电压0.7V&#xff0c;这个电压是大于MOS开关导通的阈值电压&#xff0c;从而使MOS管导通&#xff0c;导通后相当于寄生二极管被MOS管导通短路&…

HVV | .NET 攻防工具库,值得您拥有!

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

Python:随机数、随机选择的应用

step1:导入 导入的random相当于是创建了random文件里的的一个对象 import random random() 产生0~1随机数 randint(a,b)产生a~b的整数 闭区间&#xff0c;可以取到a,b random.choice(touple_name)从touple_name&#xff08;数组、列表..&#xff09;中随机选择元素 import rand…

代码的魔力:Jupyter Notebook从零开始的探索之旅

1. Jupyter Notebook&#xff1a;探索无限的可能 1.1 Jupyter Notebook的简介 Jupyter Notebook是一个开源的Web应用程序&#xff0c;让你能够创建和共享文档&#xff0c;这些文档可以包含实时代码、数学方程、可视化以及叙述性文本。其名字来源于它支持的三种核心编程语言&am…

【管理咨询宝藏147】顶级人力咨询公司创业公司股权与激励模式设计方案

【管理咨询宝藏147】顶级人力咨询公司创业公司股权与激励模式设计方案 【格式】PDF版本 【关键词】薪酬激励、股权设计、股权架构 【核心观点】 - 价值分享型的机制的激励导向非常明确&#xff0c;引导激励对象高度关注财务指标的达成。个别情况下&#xff0c;公司考虑到指标结…

【数据结构】逆波兰计算器的分析和实现

思路分析 从左至右扫描表达式&#xff0c;遇到数字时&#xff0c;将数字压入堆栈&#xff0c;遇到运算符时&#xff0c;弹出栈顶的两个数&#xff0c;用运算符对他们做相应的计算&#xff08;栈顶元素和次顶元素&#xff09;&#xff0c;并将结果入栈&#xff1b;重复上述过程…

day12-文件属性

01.知识点回顾 文件的详细属性 1.inode号->磁盘1.df -i ->inode内存2.df -h ->磁盘内存 2.文件的属性- 普通文件d 目录l 软连接->win的快捷方式c 字节文件->win驱动文件b 硬件/dev/null$? 判断上一条命令执行结果/dev/zero 3.权限rwxrwxrwxr 读w 写x 执行 4.硬…

前端工程化11-webpack常见插件

1、webpack的插件Plugin 刚才我们也讲解了下&#xff0c;我们对webpack路径的一个处理&#xff0c;处理的话包括别名的配置&#xff0c;模块是如何找到并加载的&#xff0c;总的来说到现在webpack这个配置到现在来说还是相当的麻烦的&#xff0c;但是目前来说我们讲的这些东西…

重生奇迹MU自由选择个性大师之路

自由选择大师技能 每一个大师职业都拥有三条大师技能树&#xff0c;每一条大师技能树对职业加强的侧重点各不相同。玩家可以根据自己喜欢专一选择&#xff0c;一条路走到底&#xff1b;当然也可以同时兼修两条或者三条技能树&#xff0c;做到雨露均沾。每一种选择都没有绝对的…

Python 环境管理大师:Virtualenv

文章目录 **Python 环境管理大师&#xff1a;Virtualenv****第一部分&#xff1a;背景介绍****第二部分&#xff1a;Virtualenv 是什么&#xff1f;****第三部分&#xff1a;如何安装 Virtualenv&#xff1f;****第四部分&#xff1a;Virtualenv 基本使用方法****第五部分&…

查找的介绍

目录 一、基本介绍 1、查找方法有&#xff1a; 2、在Python中&#xff0c;我们应当掌握两种常见的查找方法&#xff1a; 二、顺序查找 1、顺序查找案例 2、扩展&#xff1a; 三、二分查找 1、二分查找案例 2、二分查找的思路分析 3、代码实现 一、基本介绍 1、查找方…

Pytorch框架之神经网络

一、全连接神经网络的整体结构 二、全连接神经网络的单元结构 找出一组w,b使得结果最优 三、常见激活函数 四、前向传播 学习率是指训练模型时每次迭代更新模型参数的步长。 五、梯度下降法 六、反向传播计算 七、总结 1、准备数据 2、搭建模型 3、开始训练(设置学习率、…

springboot高校计算机专业学习资料共享平台-计算机毕业设计源码24752

摘 要 在信息化、数字化的时代背景下&#xff0c;教育资源的共享与高效利用已成为推动教育现代化的关键。高校作为培养未来人才的重要基地&#xff0c;其计算机专业的学习资料共享显得尤为重要。这些资料不仅涵盖了基础理论知识&#xff0c;还涉及前沿技术、实践项目和行业经验…