当前位置: 首页 > news >正文

MicroBlaze软核开发(二):GPIO

实现功能:使用 MicroBlaze软核,配置GPIO用拨码开关控制LED灯

Vivado版本:2018.3

目录

引言

vivado部分:

一、配置GPIO

二、生成HDL文件编译

SDK部分:

一、导出硬件启动SDK

二、新建应用程序工程

三、编写程序代码

引言

        在“  MicroBlaze软核开发(一):Hello World  ”中通过串口打印 Hello World 的例子成功跑通了 Microblaze 软核,对相关设计步骤作了一个介绍。本文将基于上一节的工程,继续介绍如何使用 Microblaze 软核,配置GPIO,用4个拨码开关对应控制4个LED灯。 

vivado部分:

一、配置GPIO

       (1)点击添加按钮,搜索GPIO,双击 AXI GPIO 添加IP ,如图所示

        (2)双击GPIO模块进行配置:因为要实现4个拨码开关对应控制4个LED灯,所以LED为4位输出,拨码开关为4位输入;又因为后续输入输出需要分开设置通道,故将GPIO1通道作为LED灯的4位输出,将GPIO2通道作为拨码快关的4位输入。

        (3)点击“运行自动连接”,勾选全部点击OK

        (4)点击“自动布局”,最后得到电路如下,右下角为添加的gpio部分,这里把 GPIO 模块的通道1引脚命名为“gpio_led”,把通道2引脚命名为“gpio_switch” (后面会用到,注意!)

二、生成HDL文件编译

        这一部分和 “  MicroBlaze软核开发(一):Hello World  ” 中相同,不再赘述

        (1)到src栏右键设计块,生成HDL包装文件

        (2)依次进行:Run Synthesis 综合、Run implementation 部署 

        (3)再配置管脚:需要配置的管脚如图所示,根据开发板情况自行配置

        (4)最后 Generate Bitstream 生成比特流文件

SDK部分:

一、导出硬件启动SDK

         这一部分和 “  MicroBlaze软核开发(一):Hello World  ” 中相同,不再赘述

        (1)File -> Export -> Export Hardware 导出硬件: 注意勾选“Include bitstream”再导出

        (2)File -> Launch SDK 启动SDK:保持默认点击OK。

二、新建应用程序工程

        (1)因为是基于(一)的工程进行,会发现已有hello的工程,这里打开该工程 bsp 文件夹(Board Support Package文件夹,封装了特定硬件平台如开发板、FPGA等所需的软件支持)再打开 system.mss 文件,里面会根据 Vivado 内的软核设计提供驱动程序 (Vivado给添加了uart和gpio,可以发现它就提供了uart 和 gpio 的驱动程序的工程模板),选择axi_gpio 的工程创建。

        (2)选择axi_gpio 的工程模板,他一共提供4个模板,这里选最基本的第一个即可。

        (3)打开生成的模板工程的.C文件,可以看到模板功能是使用 AXI GPIO 驱动 LED 灯,
其中LED灯为GPIO通道1的第0位

        (4)先分析运行模板的代码:(SDK中按住Ctrl再点击函数可以跳转查看函数定义,直接烧录并运行该模板程序的现象是LED的第0位循环亮灭)

/***************************** Include Files 包含头文件 *********************************/
#include "xparameters.h" 
#include "xgpio.h"
#include "xil_printf.h"/************************** Constant Definitions 常量定义 *****************************/
#define LED 0x01     //LED的gpio的方向:第0位为1
#define GPIO_EXAMPLE_DEVICE_ID  XPAR_GPIO_0_DEVICE_ID //获取的GPIO设备ID
#define LED_DELAY    10000000 //用于延时计数
#define LED_CHANNEL  1        //LED的gpio通道设为通道1/************************** Variable Definitions 变量定义 ****************************/
XGpio Gpio; //实例化XGpio名为GPIO/********************************** Main 主函数  *************************************/
int main(void)
{int Status;volatile int Delay;/**** GPIO初始化 ****/Status = XGpio_Initialize(&Gpio, GPIO_EXAMPLE_DEVICE_ID);if (Status != XST_SUCCESS) {xil_printf("Gpio Initialization Failed\r\n");return XST_FAILURE;}XGpio_SetDataDirection(&Gpio, LED_CHANNEL, ~LED); //设置LED的gpio方向,这里取反则仅第0位0,即只有第0位为输出/**** LED循环闪烁 ****/while (1) {XGpio_DiscreteWrite(&Gpio, LED_CHANNEL, LED);   for (Delay = 0; Delay < LED_DELAY; Delay++);    //延时XGpio_DiscreteClear(&Gpio, LED_CHANNEL, LED);for (Delay = 0; Delay < LED_DELAY; Delay++);    //延时}return XST_SUCCESS;
}

 三、编写程序代码

        因为要实现4个拨码开关对应控制4个LED灯,所以代码需要进行修改:需要添加拨码开关GPIO的通道2,并将LED的GPIO设为通道1、方向设为输出;将switch的GPIO设为通道2、方向设为输入:

/**************************** Include Files 包含头文件 ********************************/
#include "xparameters.h"
#include "xgpio.h"
#include "xil_printf.h"/************************** Constant Definitions 常量定义 ****************************/
#define LED 0x00  //LED的gpio的方向:低四位全0表示,即全为输出
#define SW  0x0f  //switch的gpio的方向:低四位全1表示,即全为输出#define GPIO_EXAMPLE_DEVICE_ID  XPAR_GPIO_0_DEVICE_ID //获取GPIO设备ID(如果有两个GPIO模块需要再加一个ID,这里只有一个XPAR_GPIO_0模块)#define LED_CHANNEL 1 //LED的gpio通道为通道1
#define SW_CHANNEL  2 //switch的gpio通道为通道2/************************** Variable Definitions 变量定义 ****************************/
XGpio Gpio; //实例化XGpio名为GPIO
u32 data;   //定义u32类型变量data/********************************** Main 主函数  *************************************/
int main(void)
{/*** GPIO初始化 ***/int Status;Status = XGpio_Initialize(&Gpio, GPIO_EXAMPLE_DEVICE_ID);if (Status != XST_SUCCESS) {xil_printf("Gpio Initialization Failed\r\n");return XST_FAILURE;}XGpio_SetDataDirection(&Gpio, LED_CHANNEL, LED);   //设置LED通道的方向为输出XGpio_SetDataDirection(&Gpio, SW_CHANNEL, SW);     //设置Switch通道的方向为输入while (1) {data = XGpio_DiscreteRead(&Gpio, SW_CHANNEL);  //将switch的GPIO输入数据读取到dataXGpio_DiscreteWrite(&Gpio, LED_CHANNEL, data); //data数据输出给led的GPIO}return XST_SUCCESS;
}

        (6)修改结束进行烧录,再运行该程序。效果为4个拨码开关可以对应控制4个LED灯,到此GPIO的配置与简单使用介绍结束。

相关文章:

MicroBlaze软核开发(二):GPIO

实现功能&#xff1a;使用 MicroBlaze软核&#xff0c;配置GPIO用拨码开关控制LED灯 Vivado版本&#xff1a;2018.3 目录 引言 vivado部分&#xff1a; 一、配置GPIO 二、生成HDL文件编译 SDK部分&#xff1a; 一、导出硬件启动SDK 二、新建应用程序工程 三、编写程序代…...

threejs相机辅助对象cameraHelper

为指定相机创建一个辅助对象&#xff0c;显示这个相机的视锥。 想要在场景里面显示相机的视锥&#xff0c;需要创建两个相机。 举个例子&#xff0c;场景中有个相机A&#xff0c;想要显示相机A的视锥&#xff0c;那么需要一个相机B&#xff0c;把B放在A的后面&#xff0c;两个…...

Luma 视频生成 API 对接说明

Luma 视频生成 API 对接说明 随着 AI 的应用变广&#xff0c;各类 AI 程序已逐渐普及。AI 已逐渐深入到人们的工作生活方方面面。而 AI 涉及的行业也越来越多&#xff0c;从最初的写作&#xff0c;到医疗教育&#xff0c;再到现在的视频。 Luma 是一个专业高质量的视频生成平…...

服务器数据恢复—EVA存储硬盘磁头和盘片损坏离线的数据恢复案例

服务器存储数据恢复环境&故障&#xff1a; 一台HP EVA存储中有23块硬盘&#xff0c;挂接到一台windows server操作系统的服务器。 EVA存储上有三个硬盘指示灯亮黄灯&#xff0c;此刻存储还能正常使用。管理员在更换硬盘的过程中&#xff0c;又出现一块硬盘对应的指示灯亮黄…...

【Python】深入探索Python类型检查:掌握 `typing` 模块的高级用法

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着代码复杂度的增加,类型安全性在现代开发中变得尤为重要。Python自3.5引入类型提示(type hints),为开发者提供了静态类型检查的能力,而typing模块则是这一系统的核心。本篇文章深入研究Python的类型提示及…...

Android学习15--charger

1 概述 最近正好在做关机充电这个&#xff0c;就详细看看吧。还是本着保密的原则&#xff0c;项目里的代码也不能直接用&#xff0c;这里就用的Github的。https://github.com/aosp-mirror 具体位置是&#xff1a;https://github.com/aosp-mirror/platform_system_core/tree/mai…...

顶会新宠!KAN-LSTM完美融合新方案

2024深度学习发论文&模型涨点之——KANLSTM KAN-LSTM混合预测模型是一种结合了自注意力机制&#xff08;KAN, Key-attention network&#xff09;和长短时记忆网络&#xff08;LSTM&#xff09;的深度学习模型&#xff0c;主要用于序列数据的预测任务&#xff0c;如时间序…...

JS中对象的浅拷贝,深拷贝和引用

JS中对象的浅拷贝&#xff0c;深拷贝和引用 浅拷贝和深拷贝的区别主要在于它们如何处理引用类型的数据&#xff08;如数组和对象&#xff09;&#xff0c;而引用简而言之就是换了个变量名。 浅拷贝 引用&#xff1a;浅拷贝只复制对象的第一层属性&#xff0c;对于嵌套的对象或…...

思普企业运营平台 idsCheck Sql注入漏洞复现

0x01 产品描述: ‌思普企业运营平台‌是由贵阳思普信息技术有限公司自主研发的国内首款投融建管营云服务平台——...

FSWIND脉动风-风载时程生成器软件下载、安装及注册

1、软件下载 点击文末超链接下载 2、软件安装 以下操作&#xff0c;若被电脑杀毒软件提示风险&#xff0c;请加入白名单&#xff0c;软件无任何病毒和后台&#xff0c;请放心使用&#xff01; 1&#xff09;双击Fswind_setup.exe&#xff0c;启动安装程序 2&#xff09;、点…...

spring通过RequestContextHolder获取HttpServletRequest对象

1.获取HttpServletRequest对象方法&#xff1a; public static HttpServletRequest getRequest() {ServletRequestAttributes attributes ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());assert attributes ! null;return attributes.getRequest(…...

STM32编码器接口及编码器测速模板代码

编码器是什么&#xff1f; 编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感 器&#xff0c;我们可以通过编码器测量到底位移或者速度信息。编码器从输出数据类型上 分&#xff0c;可以分为增量式编码器和绝对式编码器。 从编码器检测原理上来分&#xff0…...

qt QNetworkAccessManager详解

1、概述 QNetworkAccessManager是QtNetwork模块中的一个核心类&#xff0c;它允许应用程序发送网络请求并接收响应。该类是网络通信的基石&#xff0c;提供了一种方便的方式来处理常见的网络协议&#xff0c;如HTTP、HTTPS等。QNetworkAccessManager对象持有其发送的请求的通用…...

部署 Vue 前端项目到 Linux

看看怎么把一个 Vue 3 项目部署到 Linux 服务器上。准备好你的咖啡&#xff0c;让我们愉快地度过这段部署时光&#xff01; 前期准备 确保你已经在本地构建了 Vue 3 项目&#xff0c;并生成了 dist 文件夹。 npm run build构建完成后&#xff0c;你将看到一个新鲜出炉的 dis…...

数据分析:探索数据背后的秘密与挑战

在当今这个数据驱动的时代&#xff0c;数据分析已成为各行各业不可或缺的一部分。从市场营销到金融风控&#xff0c;从医疗健康到智能制造&#xff0c;数据分析为企业决策提供了强有力的支持。然而&#xff0c;尽管其重要性日益凸显&#xff0c;数据分析的过程并非一帆风顺&…...

文本域设置高度 加上文字限制并show出来:

文本域设置高度 :rows"4" 加上文字限制并show出来&#xff1a; maxlength"30" show-word-limit 效果: <el-form-item label"产品备注" prop"remark"><el-input v-model"form.remark" type"textarea"…...

深入浅出:Gin框架-简介与API开发入门

深入浅出&#xff1a;Gin框架-简介与API开发入门 引言 Gin框架是基于Go语言的HTTP Web框架&#xff0c;凭借其简单易用、性能卓越和丰富的功能&#xff0c;成为构建高性能Web应用的理想选择。本文将深入浅出地介绍Gin框架的基础知识&#xff0c;并通过一个简单的案例&#xf…...

MySQL各种锁详解

什么是锁&#xff1f; 1.1 锁的解释 计算机协调多个进程或线程并发访问某一资源的机制。 1.2 锁的重要性 在数据库中&#xff0c;除传统计算资源&#xff08;CPU、RAM、I/O等&#xff09;的争抢&#xff0c;数据也是一种供多用户共享的资源。 如何保证数据并发访问的一致性&…...

海外的bug-hunters,不一样的403bypass

一种绕过403的新技术&#xff0c;跟大家分享一下。研究HTTP协议已经有一段时间了。发现HTTP协议的1.0版本可以绕过403。于是开始对lyncdiscover.microsoft.com域做FUZZ并且发现了几个403Forbidden的文件。 &#xff08;访问fsip.svc为403&#xff09; 在经过尝试后&#xff0…...

React 组件中 State 的定义、使用及正确更新方式

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;React篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来React篇专栏内容React 组件中 State 的定义、使用及正确更新方式 前言 在 React 应用开发中&#xff0c;state …...

sxiahdainacinwjcnisd

一、OpenAI 1.OpenAI是什么简单来说&#xff0c;OpenAI 大模型 是由美国人工智能公司 OpenAI 开发的一系列大型语言模型&#xff08;LLMs&#xff09; 。你可以把它们想象成拥有巨大“知识储备”和“学习能力”的超级大脑&#xff0c;它们被训练用来理解和生成人类语言&#xf…...

从HC-SR04到智能报警:手把手教你用51单片机做个超声波倒车雷达原型

从HC-SR04到智能报警&#xff1a;手把手教你用51单片机做个超声波倒车雷达原型 在汽车电子和智能硬件领域&#xff0c;倒车雷达作为基础安全配置已经普及多年。但对于电子爱好者和嵌入式开发者来说&#xff0c;用最基础的51单片机搭配HC-SR04超声波模块实现一个具备三级报警功能…...

jquery-match-height完全教程:5分钟学会创建完美等高元素

jquery-match-height完全教程&#xff1a;5分钟学会创建完美等高元素 【免费下载链接】jquery-match-height a responsive equal heights plugin 项目地址: https://gitcode.com/gh_mirrors/jq/jquery-match-height jquery-match-height是一款强大的响应式等高元素插件&…...

破局足球数据分析困境:Understat工具的技术赋能与实战应用

破局足球数据分析困境&#xff1a;Understat工具的技术赋能与实战应用 【免费下载链接】understat An asynchronous Python package for https://understat.com/. 项目地址: https://gitcode.com/gh_mirrors/un/understat 问题发现&#xff1a;足球数据分析的三重技术壁…...

从NASA到你家菜园:聊聊那些藏在智慧农业背后的‘黑科技’传感器(光学/微波遥感全解析)

从NASA到你家菜园&#xff1a;智慧农业背后的传感器技术革命 当清晨的阳光洒在堪萨斯州的麦田上&#xff0c;NASA的Landsat卫星正以每秒7.5公里的速度掠过北美大陆上空。它的多光谱传感器捕捉到的数据&#xff0c;将在6小时后转化为中国山东某葡萄种植园主的手机推送——"…...

JAVA 注解(Annotation):从原理到实战应用

在 Java 5 及后续版本中&#xff0c;注解&#xff08;Annotation&#xff09;作为一种元数据编程机制&#xff0c;彻底改变了 Java 的配置与框架开发模式。它不再是简单的代码注释&#xff0c;而是能被编译器、虚拟机、框架解析的结构化标记&#xff0c;广泛应用于 Spring Boot…...

原创:黄大年茶思屋难题揭榜第141期|5道核心题精简公开·未获技术反馈求指正

黄大年茶思屋难题揭榜第141期&#xff5c;5道核心题精简公开未获技术反馈求指正 作者&#xff1a;华夏之光永存 摘要 这五道题我们已完整解题并提交黄大年茶思屋难题揭榜&#xff0c;最终被退回&#xff0c;但平台未给出任何具体技术驳回意见、未指明缺陷、未提供修改方向。我们…...

终极免费开源图像修复工具:ComfyUI-BrushNet完整使用指南

终极免费开源图像修复工具&#xff1a;ComfyUI-BrushNet完整使用指南 【免费下载链接】ComfyUI-BrushNet ComfyUI BrushNet nodes 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-BrushNet 想要快速掌握AI图像编辑的核心技术&#xff1f;ComfyUI-BrushNet作为一款…...

薛定谔共价对接实战:如何为你的靶点蛋白快速找到‘锁死’它的共价抑制剂?

薛定谔共价对接实战&#xff1a;靶点蛋白的共价抑制剂高效筛选策略 药物研发领域正经历一场静默革命——共价抑制剂从曾经的"危险分子"摇身变为现代药物设计的明星。与传统可逆抑制剂不同&#xff0c;共价抑制剂能与靶点蛋白形成稳定的共价键&#xff0c;实现近乎不可…...

3块钱,2小时,他用一张显卡从零训练了一个大模型

3块钱能干什么&#xff1f; 一杯蜜雪冰城都不够。 但有人用3块钱的电费加2个小时&#xff0c;从零训练出了一个能聊天的AI大模型。 这不是段子。是一个在 GitHub 上拿到 41.9k Star 的开源项目&#xff0c;叫 MiniMind。大模型自由&#xff0c;来了 过去两年&#xff0c;所有人…...